diff --git a/.gitignore b/.gitignore index 99d92dc0e0b..55965f522cc 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ uberenv_libs spack-*.txt /src/docs/sphinx/datastructure +/src/docs/sphinx/build *~ __pycache__ diff --git a/examples/functions/function_examples/function_examples.xml b/examples/functions/function_examples/function_examples.xml index 0cc84199b48..a5b2958eaa6 100644 --- a/examples/functions/function_examples/function_examples.xml +++ b/examples/functions/function_examples/function_examples.xml @@ -5,7 +5,7 @@ - @@ -13,7 +13,7 @@ + expression="sqrt((x*x)+(y*y)+(z*z))*t"/>--> diff --git a/host-configs/ubuntu.cmake b/host-configs/ubuntu.cmake new file mode 100644 index 00000000000..73542768822 --- /dev/null +++ b/host-configs/ubuntu.cmake @@ -0,0 +1,32 @@ +set( CONFIG_NAME "ubuntu" ) + +# Set compilers path +set(CMAKE_C_COMPILER "/usr/bin/gcc" CACHE PATH "") # This is typically something like /usr/bin/gcc ... or clang +set(CMAKE_CXX_COMPILER "/usr/bin/g++" CACHE PATH "") # This is typically something like /usr/bin/g++ ... or clang++ +set(ENABLE_FORTRAN OFF CACHE BOOL "" FORCE) + +# Set paths to mpi +set(ENABLE_MPI ON CACHE PATH "") +set(MPI_C_COMPILER "/usr/bin/mpicc" CACHE PATH "") # This is typically something like /usr/bin/mpicc +set(MPI_CXX_COMPILER "/usr/bin/mpicxx" CACHE PATH "") # This is typically something like /usr/bin/mpicxx +set(MPIEXEC "/usr/bin/mpirun" CACHE PATH "") # This is typically something like /usr/bin/mpirun + +# Set paths to blas and lapack +set( BLAS_LIBRARIES "/usr/lib/x86_64-linux-gnu/libblas.so" CACHE PATH "" FORCE ) # This is typically something like /usr/lib64/libblas.so +set( LAPACK_LIBRARIES "/usr/lib/x86_64-linux-gnu/liblapack.so" CACHE PATH "" FORCE ) # This is typically something like /usr/lib64/liblapack.so + +# Cuda and openMP +set( ENABLE_CUDA OFF CACHE PATH "" FORCE ) +set( ENABLE_OPENMP OFF CACHE PATH "" FORCE ) + +# TPLs +set( ENABLE_TRILINOS OFF CACHE PATH "" FORCE ) +set( ENABLE_CALIPER OFF CACHE PATH "" FORCE ) +set( ENABLE_DOXYGEN OFF CACHE BOOL "" FORCE) +set( ENABLE_MATHPRESSO OFF CACHE BOOL "" FORCE ) + +if(NOT ( EXISTS "${GEOS_TPL_DIR}" AND IS_DIRECTORY "${GEOS_TPL_DIR}" ) ) + set(GEOS_TPL_DIR "${CMAKE_SOURCE_DIR}/../../thirdPartyLibs/install-${CONFIG_NAME}-release" CACHE PATH "" FORCE ) +endif() + +include(${CMAKE_CURRENT_LIST_DIR}/tpls.cmake) diff --git a/inputFiles/stressPathDrivenGeomechanics/fractureMatrixFlow_edfm_SPD_base.xml b/inputFiles/stressPathDrivenGeomechanics/fractureMatrixFlow_edfm_SPD_base.xml new file mode 100644 index 00000000000..6b167af6e4b --- /dev/null +++ b/inputFiles/stressPathDrivenGeomechanics/fractureMatrixFlow_edfm_SPD_base.xml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/stressPathDrivenGeomechanics/fractureMatrixFlow_edfm_horizontalFrac_SPD_smoke.xml b/inputFiles/stressPathDrivenGeomechanics/fractureMatrixFlow_edfm_horizontalFrac_SPD_smoke.xml new file mode 100644 index 00000000000..6467d2e8ef8 --- /dev/null +++ b/inputFiles/stressPathDrivenGeomechanics/fractureMatrixFlow_edfm_horizontalFrac_SPD_smoke.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d9c175fec20..17723f46909 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -23,6 +23,12 @@ set( CMAKE_ENABLE_EXPORTS ON ) # populated by `geos_add_test` (private list of all geos tests, keep in sync with the macro definition) set_property( GLOBAL PROPERTY geos_tests_exe_list ) +set(ENABLE_PYGEOSX ON CACHE BOOL "") +set(Python3_EXECUTABLE "/home/lilianera/miniconda3/envs/PYGEOS312/bin/python") +set(Python3_INCLUDE_DIRS "/home/lilianera/miniconda3/envs/PYGEOS312/include/python3.12") +set(Python3_LIBRARIES "/home/lilianera/miniconda3/envs/PYGEOS312/lib") + + ################################ # Include blt ################################ @@ -293,6 +299,9 @@ if (NOT DEFINED ENABLE_ATS) set( ENABLE_ATS true CACHE BOOL "") endif() +message(STATUS "********************************** " ${ENABLE_ATS}) +message(STATUS "********************************** " ${ATS_WORKING_DIR}) +message(STATUS "********************************** " ${ATS_BASELINE_DIR}) if ( ENABLE_ATS ) if (NOT DEFINED ATS_WORKING_DIR) diff --git a/src/coreComponents/constitutive/CMakeLists.txt b/src/coreComponents/constitutive/CMakeLists.txt index c835c57966f..7ad8c16e274 100644 --- a/src/coreComponents/constitutive/CMakeLists.txt +++ b/src/coreComponents/constitutive/CMakeLists.txt @@ -37,6 +37,7 @@ set( constitutive_headers capillaryPressure/CapillaryPressureSelector.hpp capillaryPressure/Layouts.hpp contact/BartonBandis.hpp + contact/BartonBandisStressPathDriven.hpp contact/CoulombFriction.hpp contact/FrictionSelector.hpp contact/FrictionBase.hpp @@ -232,6 +233,7 @@ set( constitutive_sources capillaryPressure/TableCapillaryPressureHelpers.cpp capillaryPressure/VanGenuchtenCapillaryPressure.cpp contact/BartonBandis.cpp + contact/BartonBandisStressPathDriven.cpp contact/CoulombFriction.cpp contact/FrictionBase.cpp contact/FrictionlessContact.cpp diff --git a/src/coreComponents/constitutive/contact/BartonBandisStressPathDriven.cpp b/src/coreComponents/constitutive/contact/BartonBandisStressPathDriven.cpp new file mode 100644 index 00000000000..6c405f4292b --- /dev/null +++ b/src/coreComponents/constitutive/contact/BartonBandisStressPathDriven.cpp @@ -0,0 +1,73 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2024 TotalEnergies + * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2023-2024 Chevron + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file BartonBandis.cpp + */ + + +#include "BartonBandisStressPathDriven.hpp" + + +namespace geos +{ + +namespace constitutive +{ + +using namespace dataRepository; + +BartonBandisStressPathDriven::BartonBandisStressPathDriven( string const & name, Group * const parent ): + HydraulicApertureBase( name, parent ) +{ + + registerWrapper( viewKeyStruct::biotString(), &m_biot ). + setApplyDefaultValue( 1.0 ). + setInputFlag( InputFlags::REQUIRED ). + setDescription( "Biot coefficient." ); + registerWrapper( viewKeyStruct::poissonString(), &m_poisson ). + setApplyDefaultValue( 0.3 ). + setInputFlag( InputFlags::REQUIRED ). + setDescription( "Poisson ratio." ); + registerWrapper( viewKeyStruct::normalStiffnessString(), &m_normalStiffness ). + setInputFlag( InputFlags::REQUIRED ). + setDescription( "Normal stiffness: Kni." ); + registerWrapper( viewKeyStruct::referencePressureString(), &m_referencePressure ). + setApplyDefaultValue( 1.0e5 ). + setInputFlag( InputFlags::REQUIRED ). + setDescription( "Reference pressure: p_0." ); + registerWrapper( viewKeyStruct::referenceTotalStressString(), &m_referenceTotalStress ). + setApplyDefaultValue( { 85.0e6, 85.0e6, 105.0e6 } ). + setInputFlag( InputFlags::REQUIRED ). + setDescription( "Total stress at reference state: sigmaT_0." ); + +} + + +BartonBandisStressPathDrivenUpdates BartonBandisStressPathDriven::createKernelWrapper() const +{ + return KernelWrapper( m_aperture0, + m_biot, + m_poisson, + m_normalStiffness, + m_referencePressure, + m_referenceTotalStress); +} + +REGISTER_CATALOG_ENTRY( ConstitutiveBase, BartonBandisStressPathDriven, string const &, Group * const ) + +} /* namespace constitutive */ + +} /* namespace geos */ diff --git a/src/coreComponents/constitutive/contact/BartonBandisStressPathDriven.hpp b/src/coreComponents/constitutive/contact/BartonBandisStressPathDriven.hpp new file mode 100644 index 00000000000..880f5ab64f7 --- /dev/null +++ b/src/coreComponents/constitutive/contact/BartonBandisStressPathDriven.hpp @@ -0,0 +1,212 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2024 TotalEnergies + * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2023-2024 Chevron + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +/** + * @file BartonBandis.hpp + */ + +#ifndef GEOS_CONSTITUTIVE_CONTACT_BARTONBANDISSTRESSPATHDRIVEN_HPP_ +#define GEOS_CONSTITUTIVE_CONTACT_BARTONBANDISSTRESSPATHDRIVEN_HPP_ + +#include "constitutive/contact/HydraulicApertureBase.hpp" +#include "functions/TableFunction.hpp" +#include "physicsSolvers/solidMechanics/contact/FractureState.hpp" + +namespace geos +{ + +namespace constitutive +{ + +/** + * @class BartonBandisUpdates + * + * This class is used for in-kernel contact relation updates + */ +class BartonBandisStressPathDrivenUpdates +{ +public: + + BartonBandisStressPathDrivenUpdates( real64 const aperture0, + real64 const biot, + real64 const poisson, + real64 const normalStiffness, + real64 const referencePressure, + R1Tensor const &referenceTotalStress) + : m_aperture0( aperture0 ), + m_biot( biot ), + m_poisson( poisson ), + m_normalStiffness( normalStiffness ), // Kni + m_referencePressure( referencePressure ), + m_referenceTotalStress( referenceTotalStress ) + { + m_referenceEffectiveStress[0] = m_referenceTotalStress[0] - m_biot*m_referencePressure; + m_referenceEffectiveStress[1] = m_referenceTotalStress[1] - m_biot*m_referencePressure; + m_referenceEffectiveStress[2] = m_referenceTotalStress[2] - m_biot*m_referencePressure; + } + + /// Default copy constructor + BartonBandisStressPathDrivenUpdates( BartonBandisStressPathDrivenUpdates const & ) = default; + + /// Default move constructor + BartonBandisStressPathDrivenUpdates( BartonBandisStressPathDrivenUpdates && ) = default; + + /// Deleted default constructor + BartonBandisStressPathDrivenUpdates() = default; + + /// Deleted copy assignment operator + BartonBandisStressPathDrivenUpdates & operator=( BartonBandisStressPathDrivenUpdates const & ) = delete; + + /// Deleted move assignment operator + BartonBandisStressPathDrivenUpdates & operator=( BartonBandisStressPathDrivenUpdates && ) = delete; + + /** + * @brief Evaluate the effective aperture, and its derivative wrt aperture + * @param[in] aperture the model aperture/gap + * @param[out] dHydraulicAperture_dAperture the derivative of the effective aperture wrt aperture + * @return The hydraulic aperture that is always > 0 + */ + GEOS_HOST_DEVICE + real64 computeHydraulicAperture( real64 const pressure, + array1d< real64 > const & normal) const; + + +private: + real64 m_aperture0; + + real64 m_biot; + real64 m_poisson; + real64 m_normalStiffness; // Kni + real64 m_referencePressure; // p_0 + + R1Tensor m_referenceTotalStress; // sigmaT_0 computed analytically + R1Tensor m_referenceEffectiveStress; // sigma_0 + + real64 computeFractureStress( real64 const pressure, array1d< real64 > const & normal ) const; +}; + + +/** + * @class BartonBandis + * + * This class serves as the interface for implementing contact enforcement constitutive relations. + * This does not include the actual enforcement algorithm, but only the constitutive relations that + * govern the behavior of the contact. So things like penalty, or friction, or kinematic constraint. + */ +class BartonBandisStressPathDriven : public HydraulicApertureBase +{ +public: + + /** + * @brief The standard data repository constructor + * @param name The name of the relation in the data repository + * @param parent The name of the parent Group that holds this relation object. + */ + BartonBandisStressPathDriven( string const & name, + Group * const parent ); + + static string catalogName() { return "BartonBandisStressPathDriven"; } + + virtual string getCatalogName() const override { return catalogName(); } + + + /// Type of kernel wrapper for in-kernel update + using KernelWrapper = BartonBandisStressPathDrivenUpdates; + + /** + * @brief Create an update kernel wrapper. + * @return the wrapper + */ + KernelWrapper createKernelWrapper() const; + + struct viewKeyStruct : public HydraulicApertureBase::viewKeyStruct + { + static constexpr char const * biotString() { return "biot"; } + static constexpr char const * poissonString() { return "poisson"; } + static constexpr char const * normalStiffnessString() { return "normalStiffness"; } + static constexpr char const * referencePressureString() { return "referencePressure"; } + static constexpr char const * referenceTotalStressString() { return "referenceTotalStress"; } + }; + +private: + real64 m_biot; + real64 m_poisson; + real64 m_normalStiffness; // Kni + real64 m_referencePressure; // p_0 + + R1Tensor m_referenceTotalStress; // sigmaT_0 computed analytically +}; + +GEOS_HOST_DEVICE +GEOS_FORCE_INLINE +real64 BartonBandisStressPathDrivenUpdates::computeHydraulicAperture( real64 const pressure, + array1d< real64 > const & normal ) const +{ + real64 const biot_pressure = m_biot * m_referencePressure; // biot is alpha in the equations + + // Computation of maximum fracture closure (Barton-Bandis parameter) + // Fracture traction via Terzaghi's Principle + real64 const sigma_c0[3] = { m_referenceTotalStress[0] * normal[0] - biot_pressure * normal[0], + m_referenceTotalStress[1] * normal[1] - biot_pressure * normal[1], + m_referenceTotalStress[2] * normal[2] - biot_pressure * normal[2] }; + real64 const sigma_n0 = sigma_c0[0]*normal[0] + + sigma_c0[1]*normal[1] + + sigma_c0[2]*normal[2]; + real64 const g0 = (-m_normalStiffness*m_aperture0 + + std::sqrt((m_normalStiffness*m_aperture0)* + (m_normalStiffness*m_aperture0) + + 4.0*m_normalStiffness*sigma_n0*m_aperture0)) / (2.0*m_normalStiffness); + real64 const maximumFractureClosure = g0 + m_aperture0; // Vm + + // Normal effective stress on the fracture + real64 const sigmaN_N = computeFractureStress( pressure, normal ); + real64 const fractureClosure = sigmaN_N*maximumFractureClosure/(m_normalStiffness*maximumFractureClosure + sigmaN_N); // gn_BB + + // Compute the new aperture which is equal to the aperture at the free-stress state + // minus the closure from the free-stress state to the current state + real64 const newHydraulicAperture = maximumFractureClosure - fractureClosure; + + return newHydraulicAperture; +} + +GEOS_HOST_DEVICE +GEOS_FORCE_INLINE +real64 BartonBandisStressPathDrivenUpdates::computeFractureStress( real64 const pressure, + array1d< real64 > const & normal ) const +{ + // TODO: remove this lambda expression + auto matmul = [](real64 const (&u)[3], array1d< real64 > const &v, array1d< real64 > &r) -> void + { + r[0] = u[0]*v[0]; + r[1] = u[1]*v[1]; + r[2] = u[2]*v[2]; + }; + + real64 const deltaSigmaZ = m_biot * (pressure - m_referencePressure); + real64 const poisson_deltaSigma = deltaSigmaZ * m_poisson/(1.0 - m_poisson); + // sigma: matrix diagonal + real64 effectiveStress[3] = { m_referenceEffectiveStress[0] - poisson_deltaSigma, + m_referenceEffectiveStress[1] - poisson_deltaSigma, + m_referenceEffectiveStress[2] - deltaSigmaZ }; + array1d< real64 > effectiveStressOnFracture(3); // sigma_c + matmul(effectiveStress, normal, effectiveStressOnFracture); + real64 normalComponentOfStressOnFracture = dot(effectiveStressOnFracture, normal); // sigmaN_N + return normalComponentOfStressOnFracture; +} +} /* namespace constitutive */ + +} /* namespace geos */ + +#endif /* GEOS_CONSTITUTIVE_CONTACT_BARTONBANDISSTRESSPATHDRIVEN_HPP_ */ diff --git a/src/coreComponents/constitutive/contact/HydraulicApertureRelationSelector.hpp b/src/coreComponents/constitutive/contact/HydraulicApertureRelationSelector.hpp index f8675f1dc1e..5e1930fa7ea 100644 --- a/src/coreComponents/constitutive/contact/HydraulicApertureRelationSelector.hpp +++ b/src/coreComponents/constitutive/contact/HydraulicApertureRelationSelector.hpp @@ -23,6 +23,7 @@ #include "constitutive/ConstitutivePassThruHandler.hpp" #include "constitutive/contact/HydraulicApertureTable.hpp" #include "constitutive/contact/BartonBandis.hpp" +#include "constitutive/contact/BartonBandisStressPathDriven.hpp" namespace geos { @@ -46,6 +47,19 @@ void constitutiveUpdatePassThru( HydraulicApertureBase & contact, BartonBandis >::execute( contact, std::forward< LAMBDA >( lambda ) ); } +template< typename LAMBDA > +void constitutiveUpdatePassThru( BartonBandisStressPathDriven const & contact, + LAMBDA && lambda ) +{ + ConstitutivePassThruHandler< BartonBandisStressPathDriven >::execute( contact, std::forward< LAMBDA >( lambda ) ); +} + +template< typename LAMBDA > +void constitutiveUpdatePassThru( BartonBandisStressPathDriven & contact, + LAMBDA && lambda ) +{ + ConstitutivePassThruHandler< BartonBandisStressPathDriven >::execute( contact, std::forward< LAMBDA >( lambda ) ); +} } /* namespace constitutive */ } /* namespace geos */ diff --git a/src/coreComponents/constitutive/permeability/PressurePermeability.hpp b/src/coreComponents/constitutive/permeability/PressurePermeability.hpp index 9d654048a0e..6e4ed374512 100644 --- a/src/coreComponents/constitutive/permeability/PressurePermeability.hpp +++ b/src/coreComponents/constitutive/permeability/PressurePermeability.hpp @@ -87,7 +87,7 @@ class PressurePermeabilityUpdate : public PermeabilityBaseUpdate referencePermeability[0] = m_referencePermeability[k][0][0]; referencePermeability[1] = m_referencePermeability[k][0][1]; referencePermeability[2] = m_referencePermeability[k][0][2]; - + switch( m_presModelType ) { case PressureModelType::Exponential: diff --git a/src/coreComponents/constitutive/unitTests/CMakeLists.txt b/src/coreComponents/constitutive/unitTests/CMakeLists.txt index 1112c6924d6..154836bc3e1 100644 --- a/src/coreComponents/constitutive/unitTests/CMakeLists.txt +++ b/src/coreComponents/constitutive/unitTests/CMakeLists.txt @@ -28,6 +28,7 @@ set( gtest_geosx_tests testNegativeTwoPhaseFlash9Comp.cpp testNegativeTwoPhaseFlashModel.cpp testParticleFluidEnums.cpp + testPrescribedStressPath.cpp testPressureTemperatureCoordinates.cpp testPropertyConversions.cpp testSoreideWhitsonEOSPhaseModel.cpp diff --git a/src/coreComponents/constitutive/unitTests/testPrescribedStressPath.cpp b/src/coreComponents/constitutive/unitTests/testPrescribedStressPath.cpp new file mode 100644 index 00000000000..df577492568 --- /dev/null +++ b/src/coreComponents/constitutive/unitTests/testPrescribedStressPath.cpp @@ -0,0 +1,86 @@ +/* + * ------------------------------------------------------------------------------------------------------------ + * SPDX-License-Identifier: LGPL-2.1-only + * + * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC + * Copyright (c) 2018-2024 TotalEnergies + * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University + * Copyright (c) 2023-2024 Chevron + * Copyright (c) 2019- GEOS/GEOSX Contributors + * All rights reserved + * + * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details. + * ------------------------------------------------------------------------------------------------------------ + */ + +// Source includes +#include "constitutive/ConstitutiveManager.hpp" +#include "constitutive/contact/BartonBandisStressPathDriven.hpp" +#include "dataRepository/xmlWrapper.hpp" + +// TPL includes +#include +#include + +using namespace geos; +using namespace ::geos::constitutive; + + +TEST( BartonBandisStressPathDrivenTests, testNewAperture ) +{ + conduit::Node node; + dataRepository::Group rootGroup( "root", node ); + ConstitutiveManager constitutiveManager( "constitutive", &rootGroup ); + + real64 constexpr referenceAperture = 1.2421e-4; // in-situ + std::stringstream ss; + ss << std::scientific << std::setprecision(4) << referenceAperture; + + string const inputStream = + /*"" + " " + ""*/ + "" + " " + ""; + + xmlWrapper::xmlDocument xmlDocument; + xmlWrapper::xmlResult xmlResult = xmlDocument.loadString( inputStream ); + if( !xmlResult ) + { + GEOS_LOG_RANK_0( "XML parsed with errors!" ); + GEOS_LOG_RANK_0( "Error description: " << xmlResult.description()); + GEOS_LOG_RANK_0( "Error offset: " << xmlResult.offset ); + } + + xmlWrapper::xmlNode xmlConstitutiveNode = xmlDocument.getChild( "Constitutive" ); + constitutiveManager.processInputFileRecursive( xmlDocument, xmlConstitutiveNode ); + constitutiveManager.postInputInitializationRecursive(); + + BartonBandisStressPathDriven & cm = constitutiveManager.getConstitutiveRelation< BartonBandisStressPathDriven >( "hApertureModel" ); + + BartonBandisStressPathDriven::KernelWrapper cmw = cm.createKernelWrapper(); + + { + array1d < real64 > normal(3); + normal[0] = 0.0; + normal[1] = 0.0; + normal[2] = 1.0; + + real64 const newAperture = cmw.computeHydraulicAperture(1e5, normal); + EXPECT_DOUBLE_EQ( newAperture, referenceAperture ); + } + +} diff --git a/src/coreComponents/physicsSolvers/fluidFlow/FlowSolverBase.cpp b/src/coreComponents/physicsSolvers/fluidFlow/FlowSolverBase.cpp index 8a0474bf79c..988d32b38d4 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/FlowSolverBase.cpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/FlowSolverBase.cpp @@ -36,6 +36,8 @@ #include "physicsSolvers/fluidFlow/kernels/MinPoreVolumeMaxPorosityKernel.hpp" #include "physicsSolvers/fluidFlow/kernels/StencilWeightsUpdateKernel.hpp" +#include "constitutive/contact/HydraulicApertureRelationSelector.hpp" + namespace geos { @@ -109,6 +111,8 @@ FlowSolverBase::FlowSolverBase( string const & name, PhysicsSolverBase( name, parent ), m_numDofPerCell( 0 ), m_isThermal( 0 ), + m_computePrescribedStressPath( 0 ), + m_updateStencil( 0 ), m_keepVariablesConstantDuringInitStep( false ), m_isFixedStressPoromechanicsUpdate( false ), m_isJumpStabilized( false ), @@ -119,6 +123,18 @@ FlowSolverBase::FlowSolverBase( string const & name, setInputFlag( InputFlags::OPTIONAL ). setDescription( "Flag indicating whether the problem is thermal or not." ); + this->registerWrapper( viewKeyStruct::computePrescribedStressPathString(), &m_computePrescribedStressPath ). + setApplyDefaultValue( 0 ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "Flag to determine whether or not this simulation computes the precribed stress path." ); + + // TODO: temporary. It will be removed after analyzing the impact of computing or not the gemoetric component + // of the transmissibility (aka stencil weights). + this->registerWrapper( viewKeyStruct::updateStencilString(), &m_updateStencil ). + setApplyDefaultValue( 0 ). + setInputFlag( InputFlags::OPTIONAL ). + setDescription( "Flag to determine whether or not this simulation updates the stencil weights (aka geometric component of the transmissibility)." ); + this->registerWrapper( viewKeyStruct::allowNegativePressureString(), &m_allowNegativePressure ). setApplyDefaultValue( 0 ). // negative pressure is not allowed by default setInputFlag( InputFlags::OPTIONAL ). @@ -625,6 +641,7 @@ void FlowSolverBase::updatePorosityAndPermeability( SurfaceElementSubRegion & su { GEOS_MARK_FUNCTION; + arrayView1d< real64 const > const & pressure = subRegion.getField< flow::pressure >(); arrayView1d< real64 const > const newHydraulicAperture = subRegion.getField< flow::hydraulicAperture >(); @@ -642,6 +659,33 @@ void FlowSolverBase::updatePorosityAndPermeability( SurfaceElementSubRegion & su } ); } +void FlowSolverBase::updateHydraulicAperture( SurfaceElementSubRegion & subRegion ) const +{ + GEOS_MARK_FUNCTION; + + arrayView1d< real64 const > const & pressure = subRegion.getField< fields::flow::pressure >(); + arrayView1d< real64 > & newHydraulicAperture = subRegion.getField< fields::flow::hydraulicAperture >(); // fluidFlow/FlowSolverBaseFields.hpp + arrayView2d< real64 const > const & normalVector = subRegion.getField< fields::normalVector >(); // mesh/MeshFields.hpp + + string const & hydraulicApertureRelationName = + subRegion.template getReference< string >( viewKeyStruct::hydraulicApertureRelationNameString() ); + BartonBandisStressPathDriven const & hydraulicApertureModel = + this->template getConstitutiveModel< BartonBandisStressPathDriven >( subRegion, hydraulicApertureRelationName ); + + BartonBandisStressPathDrivenUpdates hydraulicApertureWrapper = hydraulicApertureModel.createKernelWrapper(); + + forAll< parallelDevicePolicy<> >( subRegion.size(), [&] GEOS_DEVICE ( localIndex const k ) + { + array1d < real64 > normal(3); + normal[0] = normalVector[k][0]; + normal[1] = normalVector[k][1]; + normal[2] = normalVector[k][2]; + + newHydraulicAperture[k] = hydraulicApertureWrapper.computeHydraulicAperture( pressure[k], normal ); + } ); + +} + void FlowSolverBase::findMinMaxElevationInEquilibriumTarget( DomainPartition & domain, // cannot be const... std::map< string, localIndex > const & equilNameToEquilId, diff --git a/src/coreComponents/physicsSolvers/fluidFlow/FlowSolverBase.hpp b/src/coreComponents/physicsSolvers/fluidFlow/FlowSolverBase.hpp index 110c27f293e..b20fe0e1ceb 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/FlowSolverBase.hpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/FlowSolverBase.hpp @@ -82,9 +82,17 @@ class FlowSolverBase : public PhysicsSolverBase static constexpr char const * fluidNamesString() { return "fluidNames"; } static constexpr char const * solidNamesString() { return "solidNames"; } + static constexpr char const * stressPathNamesString() { return "stressPathNames"; } static constexpr char const * permeabilityNamesString() { return "permeabilityNames"; } static constexpr char const * solidInternalEnergyNamesString() { return "solidInternalEnergyNames"; } static constexpr char const * thermalConductivityNamesString() { return "thermalConductivityNames"; } + + static constexpr char const * computePrescribedStressPathString() { return "computePrescribedStressPath"; } + static constexpr char const * hydraulicApertureRelationNameString() { return "hydraulicApertureRelationName"; } + + // TODO: temporary. It will be removed after analyzing the impact of computing or not the gemoetric component + // of the transmissibility (aka stencil weights). + static constexpr char const * updateStencilString() { return "updateStencil"; } }; /** @@ -109,6 +117,8 @@ class FlowSolverBase : public PhysicsSolverBase virtual void updatePorosityAndPermeability( SurfaceElementSubRegion & subRegion ) const; + void updateHydraulicAperture( SurfaceElementSubRegion & subRegion ) const; + /** * @brief Utility function to save the iteration state (useful for sequential simulations) * @param[in] domain the domain partition @@ -258,6 +268,13 @@ class FlowSolverBase : public PhysicsSolverBase /// flag to determine whether or not this is a thermal simulation integer m_isThermal; + /// flag to determine whether or not this simulation computes the precribed stress path + integer m_computePrescribedStressPath; + + // TODO: temporary. It will be removed after analyzing the impact of computing or not the gemoetric component of the transmissibility + /// flag to determine whether or not this simulation updates the stencil weights + integer m_updateStencil; + /// the input temperature real64 m_inputTemperature; diff --git a/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseBase.cpp b/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseBase.cpp index bb4d66c6122..a4c8ea0e9f7 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseBase.cpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseBase.cpp @@ -47,6 +47,7 @@ #include "physicsSolvers/fluidFlow/kernels/singlePhase/FluidUpdateKernel.hpp" #include "physicsSolvers/fluidFlow/kernels/singlePhase/SolidInternalEnergyUpdateKernel.hpp" +#include "constitutive/contact/HydraulicApertureRelationSelector.hpp" namespace geos { @@ -131,6 +132,15 @@ void SinglePhaseBase::setConstitutiveNames( ElementSubRegionBase & subRegion ) c { setConstitutiveName< SinglePhaseThermalConductivityBase >( subRegion, viewKeyStruct::thermalConductivityNamesString(), "singlephase thermal conductivity" ); } + + if( m_computePrescribedStressPath ) + { + // Do it only for fractures + if( dynamic_cast< SurfaceElementSubRegion * >( &subRegion ) ) + { + setConstitutiveName< constitutive::BartonBandisStressPathDriven >( subRegion, viewKeyStruct::hydraulicApertureRelationNameString(), "hydraulic aperture" ); + } + } } void SinglePhaseBase::initializeAquiferBC() const @@ -1184,6 +1194,24 @@ void SinglePhaseBase::updateState( DomainPartition & domain ) { GEOS_MARK_FUNCTION; + if(m_computePrescribedStressPath) + { + // m_updateStencil is temporary + if(m_updateStencil) prepareStencilWeights( domain ); + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&]( string const &, + MeshLevel & mesh, + string_array const & regionNames ) + { + mesh.getElemManager().forElementSubRegions< SurfaceElementSubRegion >( regionNames, [&]( localIndex const, + auto & subRegion ) + { + updateHydraulicAperture( subRegion ); + } ); + } ); + // m_updateStencil is temporary + if(m_updateStencil) updateStencilWeights( domain ); + } + forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&]( string const &, MeshLevel & mesh, string_array const & regionNames ) diff --git a/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseBase.hpp b/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseBase.hpp index a9e0af8e961..e72bf051256 100644 --- a/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseBase.hpp +++ b/src/coreComponents/physicsSolvers/fluidFlow/SinglePhaseBase.hpp @@ -266,7 +266,7 @@ class SinglePhaseBase : public FlowSolverBase arrayView1d< real64 > const & localRhs ) const = 0; virtual void - updateState ( DomainPartition & domain ) override final; + updateState ( DomainPartition & domain ) override; /** * @brief Function to update all constitutive state and dependent variables diff --git a/src/coreComponents/schema/schema.xsd b/src/coreComponents/schema/schema.xsd index b4480011c41..554d60346e8 100644 --- a/src/coreComponents/schema/schema.xsd +++ b/src/coreComponents/schema/schema.xsd @@ -222,18 +222,10 @@ - - - - - - - - @@ -607,6 +599,10 @@ + + + + @@ -835,42 +831,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1433,26 +1469,10 @@ stress - traction is applied to the faces as specified by the inner product of i - - - - - - - - - - - - - - - - @@ -1461,18 +1481,6 @@ stress - traction is applied to the faces as specified by the inner product of i - - - - - - - - - - - - @@ -3058,6 +3066,8 @@ When set to 2 also output convergence information to a csv--> + + @@ -3135,6 +3145,8 @@ Information output from lower logLevels is added with the desired log level + + @@ -3186,6 +3198,8 @@ When set to 2 also output convergence information to a csv--> + + @@ -3245,6 +3259,8 @@ Information output from lower logLevels is added with the desired log level + + @@ -3927,6 +3943,8 @@ When set to 2 also output convergence information to a csv--> + + @@ -3963,6 +3981,8 @@ Information output from lower logLevels is added with the desired log level + + @@ -4444,6 +4464,8 @@ When set to 2 also output convergence information to a csv--> + + @@ -4482,6 +4504,8 @@ Information output from lower logLevels is added with the desired log level + + @@ -4509,6 +4533,8 @@ When set to 2 also output convergence information to a csv--> + + @@ -4547,6 +4573,8 @@ Information output from lower logLevels is added with the desired log level + + @@ -4615,6 +4643,8 @@ When set to 2 also output convergence information to a csv--> + + @@ -4648,6 +4678,8 @@ Information output from lower logLevels is added with the desired log level + + @@ -4669,6 +4701,8 @@ When set to 2 also output convergence information to a csv--> + + @@ -4702,6 +4736,8 @@ Information output from lower logLevels is added with the desired log level + + @@ -4962,6 +4998,8 @@ When set to 2 also output convergence information to a csv--> + + @@ -4995,6 +5033,8 @@ Information output from lower logLevels is added with the desired log level + + @@ -6024,6 +6064,7 @@ Information output from lower logLevels is added with the desired log level + @@ -6081,15 +6122,25 @@ Information output from lower logLevels is added with the desired log level + + + + + + + + + + @@ -6125,6 +6176,22 @@ Information output from lower logLevels is added with the desired log level + + + + + + + + + + + + + + + + @@ -7315,6 +7382,18 @@ If you want to do a three-phase simulation, please use instead wettingIntermedia + + + + + + + + + + + + @@ -7327,6 +7406,18 @@ If you want to do a three-phase simulation, please use instead wettingIntermedia + + + + + + + + + + + + @@ -7339,6 +7430,18 @@ If you want to do a three-phase simulation, please use instead wettingIntermedia + + + + + + + + + + + + @@ -7351,6 +7454,18 @@ If you want to do a three-phase simulation, please use instead wettingIntermedia + + + + + + + + + + + + @@ -7363,6 +7478,18 @@ If you want to do a three-phase simulation, please use instead wettingIntermedia + + + + + + + + + + + + @@ -7375,6 +7502,18 @@ If you want to do a three-phase simulation, please use instead wettingIntermedia + + + + + + + + + + + + @@ -7387,6 +7526,18 @@ If you want to do a three-phase simulation, please use instead wettingIntermedia + + + + + + + + + + + + @@ -7399,6 +7550,18 @@ If you want to do a three-phase simulation, please use instead wettingIntermedia + + + + + + + + + + + + @@ -7411,6 +7574,18 @@ If you want to do a three-phase simulation, please use instead wettingIntermedia + + + + + + + + + + + + @@ -7423,6 +7598,18 @@ If you want to do a three-phase simulation, please use instead wettingIntermedia + + + + + + + + + + + + diff --git a/src/coreComponents/schema/schema.xsd.other b/src/coreComponents/schema/schema.xsd.other index 38ec3095e83..fa4f46119b6 100644 --- a/src/coreComponents/schema/schema.xsd.other +++ b/src/coreComponents/schema/schema.xsd.other @@ -341,15 +341,11 @@ - - - - @@ -516,7 +512,7 @@ - + @@ -1502,13 +1498,14 @@ - + + @@ -1566,15 +1563,25 @@ + + + + + + + + + + @@ -1603,6 +1610,7 @@ + @@ -2741,15 +2749,25 @@ + + + + + + + + + + diff --git a/src/docs/sphinx/basicExamples/Index.rst b/src/docs/sphinx/basicExamples/Index.rst index af43ba213fe..0d00922eaaf 100644 --- a/src/docs/sphinx/basicExamples/Index.rst +++ b/src/docs/sphinx/basicExamples/Index.rst @@ -19,6 +19,8 @@ Basic Examples triaxialDriver/Example + stressPathDriven/Example + diff --git a/src/docs/sphinx/basicExamples/stressPathDriven/Example.rst b/src/docs/sphinx/basicExamples/stressPathDriven/Example.rst new file mode 100644 index 00000000000..9db41218abd --- /dev/null +++ b/src/docs/sphinx/basicExamples/stressPathDriven/Example.rst @@ -0,0 +1,148 @@ +.. _stressPathDrivenExample: + + +############################################################# +Stress-Path Driven Simulation +############################################################# + + +**Context** + +In this example, we demonstrate how to set up a single-phase flow simulation driven by the oedometric stress path. The domain contains a single fracture, whose aperture is updated according to the Barton–Bandis constitutive law. + +**Objectives** + +At the end of this example, you will know: + + - how to set up the Barton-Bandis parameters for the oedometric stress path simulation + - how to update the fracture aperture without a mechanics solver + + +**Input file** + +The XML file for this test case is located at: + +.. code-block:: console + + inputFiles/stressPathDrivenGeomechanics/fractureMatrixFlow_edfm_horizontalFrac_SPD_smoke.xml + + +------------------------------------------------------------------ +Description of the case +------------------------------------------------------------------ + +This example is part of the research about integrating geomechanical effects into the Embedded Discrete Fracture Model (EDFM). Here, the EDFM formulation was coupled with analytical poromechanics under an Oedometric Stress Path assumption (flat reservoir with low contrast between it and adjacent formation stiffness), enabling a direct relationship between pore-pressure variations and changes in effective normal stress. These stresses, in turn, govern aperture evolution via the Barton–Bandis constitutive law. Also, we assume: + + - In-situ stress data are available + - Andersonian stress regime (no lateral stress, constant vertical total stress) + - Permeability computed by Parallel Plates law + +The simulation presented below is a simplified case designed to validate the implementation against the analytical solution detailed in the Section ..... The simplification include the use of a single-phase flow solver with TPFA as discretization method, an impermeable matrix, and a through-going fracture. + +------------------------------ +Mesh and geometry +------------------------------ + +The hexahedral mesh is generated internally and consists of 11 cells aligned along the Y-axis, each measuring 1x1x1 m. The fracture is represented as a plane that crosses the entire domain, dividing it into two halves. A pressure gradient is applied at the boundary cells of the domain and directly at the fracture tips. + +.. figure:: stressPathDrivenExampleParaview.png + :align: center + :width: 500 + :figclass: align-center + + Visualization of the first simulation step. + +------------------------------ +Constitutive law +------------------------------ + +The new class ``BartonBandisStressPathDriven`` follows a similar implementation to the class ``BartonBandis``. Both are defined as contact laws managed by the ``HydraulicApertureRelationSelector``, and each contains a private kernel responsible for computing the updated hydraulic aperture. However, because the proposed formulation of the Barton–Bandis model is stress-dependent, the implementation of the new class’s kernel differs and requires the following inputs: + +.. literalinclude:: ../../../../../inputFiles/stressPathDrivenGeomechanics/fractureMatrixFlow_edfm_SPD_base.xml + :language: xml + :start-after: + :end-before: + +In summary, by assuming the oedometric conditions, it is possible to relate pore pressure and total stresses by + +.. math:: + \Delta \sigma_V = \alpha\, \Delta p, \qquad \Delta \sigma_H = \Delta \sigma_h = \frac{\nu}{1 - \nu}\, \Delta \sigma_V + +where :math:`\alpha` is the Biot coefficient and :math:`\nu` is Poisson's ratio. + +Given the in-situ effective stress, + +.. math:: + \sigma_0 = \sigma_{\text{ref}} - \alpha\, p_0\, I, + +where :math:`p_0` is the reference pore pressure, we compute the normal stress acting on the fracture plane by projecting the updated total stress tensor onto the fracture normal direction: + +.. math:: + \sigma_n = \left( \sigma_0 - \sigma_T \right) : (\vec{n} \otimes \vec{n}), + +where :math:`\vec{n}` is the unit normal vector to the fracture plane. + +Once the normal effective stress is obtained, the fracture closure is computed using the Barton--Bandis hyperbolic law, which relates normal stress to mechanical aperture reduction. The fracture +closure is given by + +.. math:: + g_n(\sigma_n) = \frac{\sigma_n\, V_m}{K_{ni}\, V_m + \sigma_n}, + +where :math:`K_{ni}` is the initial normal stiffness and :math:`V_m` is the maximum possible closure. +The resulting closure is then used to update the aperture (:math:`a`), from which the intrinsic fracture permeability (:math:`K_f`) is obtained using the parallel-plates law + +.. math:: + K_f = \frac{a^2}{12}. + +Both quantities — the updated aperture and the resulting permeability — affect the EDFM transmissibilities. + +------------------------------------------------------------------ +Single-phase flow solver with fracture aperture update +------------------------------------------------------------------ + +The single-phase flow solver definition in the input file remains the same, with the exception of two optional flags. The first, ``computePrescribedStressPath``, enables the computation of the updated fracture aperture using the new ``BartonBandisStressPathDriven`` class. If this constitutive law is not defined in the input file while the flag is set to 1, an error will be raised. Also, if this flag is set to 0, the fracture aperture will not be updated, even if the constitutive law is defined. The second, ``updateStencil``, is a temporary flag to enable the update of the geometric component of the transmissibility. Further analysis is necessary to check the impact of this update in the transmissibility. + +.. literalinclude:: ../../../../../inputFiles/stressPathDrivenGeomechanics/fractureMatrixFlow_edfm_SPD_base.xml + :language: xml + :start-after: + :end-before: + +To trigger the fracture aperture computation, the new constitutive class first had to be made visible to the ``SinglePhaseBase`` class. This required a modification to the code architecture. Specifically, the header file of the contact law manager (``HydraulicApertureRelationSelector``) is now included and therefore accessible to all single-phase flow solvers. A new function was then implemented to apply the stress-path-driven Barton–Bandis law to the fracture elements, and it is defined in the ``FlowSolverBase`` class. + +This new functionality is illustrated in the diagram below. The entry point of the updated code flow is the ``updateState`` function in the ``PhysicsSolverBase`` class. The execution then proceeds to its implementation in the ``SinglePhaseBase`` class, two levels below in the class hierarchy. If the ``computePrescribedStressPath`` flag is enabled, the function defined in the FlowSolverBase class is invoked to compute the updated fracture aperture using the stress-path-driven Barton–Bandis class. + + +.. figure:: bartonBandisSPDDiagram.png + :align: center + :width: 600 + :figclass: align-center + + Diagram of the new implementation to incorporate Barton-Bandis law to the single-phase flow solver. + +------------------------ +Events +------------------------ + +Saving the data of the pressure and aperture of the fracture. + +.. literalinclude:: ../../../../../inputFiles/stressPathDrivenGeomechanics/fractureMatrixFlow_edfm_horizontalFrac_SPD_smoke.xml + :language: xml + :start-after: + :end-before: + +------------------------------ +Unit test +------------------------------ + +The function implemented in the ``BartonBandisStressPathDriven`` class can be tested by verifying if in the first step of the simulation, at reference pressure, the new fracture aperture is the in-situ aperture. + + + +------------------------------------------------------------------ +To go further +------------------------------------------------------------------ + + +**Feedback on this example** + +For any feedback on this example, please submit a `GitHub issue on the project's GitHub page `_. diff --git a/src/docs/sphinx/basicExamples/stressPathDriven/bartonBandisSPDDiagram.png b/src/docs/sphinx/basicExamples/stressPathDriven/bartonBandisSPDDiagram.png new file mode 100644 index 00000000000..d9667aa0cf1 Binary files /dev/null and b/src/docs/sphinx/basicExamples/stressPathDriven/bartonBandisSPDDiagram.png differ diff --git a/src/docs/sphinx/basicExamples/stressPathDriven/stressPathDrivenExampleParaview.png b/src/docs/sphinx/basicExamples/stressPathDriven/stressPathDrivenExampleParaview.png new file mode 100644 index 00000000000..5da55276b52 Binary files /dev/null and b/src/docs/sphinx/basicExamples/stressPathDriven/stressPathDrivenExampleParaview.png differ diff --git a/src/docs/sphinx/basicExamples/stressPathDriven/stressPathDrivenExampleParaviewShortFrac.png b/src/docs/sphinx/basicExamples/stressPathDriven/stressPathDrivenExampleParaviewShortFrac.png new file mode 100644 index 00000000000..45037257521 Binary files /dev/null and b/src/docs/sphinx/basicExamples/stressPathDriven/stressPathDrivenExampleParaviewShortFrac.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/Array.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/Array.doctree new file mode 100644 index 00000000000..e9dc3e05253 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/Array.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/ArrayOfArrays.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/ArrayOfArrays.doctree new file mode 100644 index 00000000000..f38bb9f6030 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/ArrayOfArrays.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/ArrayOfSets.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/ArrayOfSets.doctree new file mode 100644 index 00000000000..17f236ba62a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/ArrayOfSets.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/SortedArray.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/SortedArray.doctree new file mode 100644 index 00000000000..b837f29e417 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/SortedArray.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/SparsityPatternAndCRSMatrix.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/SparsityPatternAndCRSMatrix.doctree new file mode 100644 index 00000000000..674db968137 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/SparsityPatternAndCRSMatrix.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/benchmarks.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/benchmarks.doctree new file mode 100644 index 00000000000..9d9105de7aa Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/benchmarks.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/bufferClasses.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/bufferClasses.doctree new file mode 100644 index 00000000000..90eef4fb220 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/bufferClasses.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/buildGuide.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/buildGuide.doctree new file mode 100644 index 00000000000..1a6d3301e17 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/buildGuide.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/developmentAids.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/developmentAids.doctree new file mode 100644 index 00000000000..8220042fa17 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/developmentAids.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/extraThings.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/extraThings.doctree new file mode 100644 index 00000000000..8c490fb5995 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/extraThings.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/index.doctree new file mode 100644 index 00000000000..281f524773b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/python/index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/python/index.doctree new file mode 100644 index 00000000000..1c4f90094d5 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/python/index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/tensorOps.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/tensorOps.doctree new file mode 100644 index 00000000000..ecf69ded239 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/tensorOps.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/testing.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/testing.doctree new file mode 100644 index 00000000000..65f7df75b1c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/LvArray/docs/sphinx/testing.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/PVTPackage/docs/main.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/PVTPackage/docs/main.doctree new file mode 100644 index 00000000000..0c9c9e0752e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/PVTPackage/docs/main.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/BiotPorosity.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/BiotPorosity.doctree new file mode 100644 index 00000000000..ce0416b581e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/BiotPorosity.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/BlackOilFluid.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/BlackOilFluid.doctree new file mode 100644 index 00000000000..4f0d4dc3f51 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/BlackOilFluid.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/BrooksCoreyCapillaryPressure.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/BrooksCoreyCapillaryPressure.doctree new file mode 100644 index 00000000000..bad9b8c0449 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/BrooksCoreyCapillaryPressure.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/BrooksCoreyRelativePermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/BrooksCoreyRelativePermeability.doctree new file mode 100644 index 00000000000..464370f02af Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/BrooksCoreyRelativePermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/CO2BrineFluid.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/CO2BrineFluid.doctree new file mode 100644 index 00000000000..fb287361f8d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/CO2BrineFluid.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/CapillaryPressureModels.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/CapillaryPressureModels.doctree new file mode 100644 index 00000000000..63c2c96bf8e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/CapillaryPressureModels.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/CompositionalMultiphaseFluid.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/CompositionalMultiphaseFluid.doctree new file mode 100644 index 00000000000..2587f38ed70 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/CompositionalMultiphaseFluid.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/CompressibleSinglePhaseFluid.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/CompressibleSinglePhaseFluid.doctree new file mode 100644 index 00000000000..538f4eed44d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/CompressibleSinglePhaseFluid.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/ConstantPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/ConstantPermeability.doctree new file mode 100644 index 00000000000..ab21db60cf8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/ConstantPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/Constitutive.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/Constitutive.doctree new file mode 100644 index 00000000000..a33c9493dbb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/Constitutive.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/ExponentialDecayPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/ExponentialDecayPermeability.doctree new file mode 100644 index 00000000000..f5348e8d278 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/ExponentialDecayPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/FluidModels.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/FluidModels.doctree new file mode 100644 index 00000000000..3449176a023 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/FluidModels.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/KozenyCarmanPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/KozenyCarmanPermeability.doctree new file mode 100644 index 00000000000..774f4352705 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/KozenyCarmanPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/ParallelPlatesPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/ParallelPlatesPermeability.doctree new file mode 100644 index 00000000000..7e465ae464c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/ParallelPlatesPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/PermeabilityModels.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/PermeabilityModels.doctree new file mode 100644 index 00000000000..61e15204ee5 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/PermeabilityModels.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/PorosityModels.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/PorosityModels.doctree new file mode 100644 index 00000000000..9342b7d2ce6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/PorosityModels.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/PorousSolids.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/PorousSolids.doctree new file mode 100644 index 00000000000..d2632d62f24 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/PorousSolids.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/PressurePorosity.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/PressurePorosity.doctree new file mode 100644 index 00000000000..005b0b252f8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/PressurePorosity.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/RelativePermeabilityModels.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/RelativePermeabilityModels.doctree new file mode 100644 index 00000000000..ba99bd4b8ef Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/RelativePermeabilityModels.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/SlipDependentPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/SlipDependentPermeability.doctree new file mode 100644 index 00000000000..c7b0713505d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/SlipDependentPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/TableCapillaryPressure.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/TableCapillaryPressure.doctree new file mode 100644 index 00000000000..3a3e05ab634 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/TableCapillaryPressure.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/TableRelativePermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/TableRelativePermeability.doctree new file mode 100644 index 00000000000..94c6a210ae6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/TableRelativePermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/TemperatureDependentSolidVolumetricHeatCapacity.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/TemperatureDependentSolidVolumetricHeatCapacity.doctree new file mode 100644 index 00000000000..0a8490bd3db Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/TemperatureDependentSolidVolumetricHeatCapacity.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/TemperatureDependentThermalConductivity.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/TemperatureDependentThermalConductivity.doctree new file mode 100644 index 00000000000..3de1aa9a9c0 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/TemperatureDependentThermalConductivity.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/ThreePhaseRelativePermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/ThreePhaseRelativePermeability.doctree new file mode 100644 index 00000000000..4bbe85fe9a6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/ThreePhaseRelativePermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/TwoPhaseImmiscibleFluid.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/TwoPhaseImmiscibleFluid.doctree new file mode 100644 index 00000000000..9317a804643 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/TwoPhaseImmiscibleFluid.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/VanGenuchtenCapillaryPressure.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/VanGenuchtenCapillaryPressure.doctree new file mode 100644 index 00000000000..14248ce003d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/VanGenuchtenCapillaryPressure.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/WillisRichardsPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/WillisRichardsPermeability.doctree new file mode 100644 index 00000000000..de65aae94b1 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/WillisRichardsPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/constitutiveDeveloperGuide.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/constitutiveDeveloperGuide.doctree new file mode 100644 index 00000000000..8baf446cab7 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/constitutiveDeveloperGuide.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/Damage.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/Damage.doctree new file mode 100644 index 00000000000..066478867a6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/Damage.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/DelftEgg.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/DelftEgg.doctree new file mode 100644 index 00000000000..963e57ec33b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/DelftEgg.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/DruckerPrager.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/DruckerPrager.doctree new file mode 100644 index 00000000000..e62d0cf2b4e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/DruckerPrager.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/DruckerPragerExtended.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/DruckerPragerExtended.doctree new file mode 100644 index 00000000000..c5ea12ce4f3 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/DruckerPragerExtended.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/ElasticIsotropic.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/ElasticIsotropic.doctree new file mode 100644 index 00000000000..197aa70776a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/ElasticIsotropic.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/ElasticIsotropicPressureDependent.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/ElasticIsotropicPressureDependent.doctree new file mode 100644 index 00000000000..92ee879c17a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/ElasticIsotropicPressureDependent.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/ElasticOrthotropic.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/ElasticOrthotropic.doctree new file mode 100644 index 00000000000..66c780f6396 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/ElasticOrthotropic.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/ElasticTransverseIsotropic.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/ElasticTransverseIsotropic.doctree new file mode 100644 index 00000000000..a8a755f4302 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/ElasticTransverseIsotropic.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/ModifiedCamClay.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/ModifiedCamClay.doctree new file mode 100644 index 00000000000..eadffbc8424 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/ModifiedCamClay.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/Plasticity.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/Plasticity.doctree new file mode 100644 index 00000000000..f87e97d53e4 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/Plasticity.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/SolidModels.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/SolidModels.doctree new file mode 100644 index 00000000000..9a42bb8fc00 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/SolidModels.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/Theory.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/Theory.doctree new file mode 100644 index 00000000000..b0f9e9659bd Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/Theory.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/ViscoPlasticity.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/ViscoPlasticity.doctree new file mode 100644 index 00000000000..ed7af4593c4 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/ViscoPlasticity.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/Voight.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/Voight.doctree new file mode 100644 index 00000000000..a02332ec112 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutive/docs/solid/Voight.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutiveDrivers/docs/ConstitutiveDrivers.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutiveDrivers/docs/ConstitutiveDrivers.doctree new file mode 100644 index 00000000000..27ce2f06863 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutiveDrivers/docs/ConstitutiveDrivers.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutiveDrivers/docs/PVTDriver.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutiveDrivers/docs/PVTDriver.doctree new file mode 100644 index 00000000000..8f74cebe045 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutiveDrivers/docs/PVTDriver.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutiveDrivers/docs/TriaxialDriver.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutiveDrivers/docs/TriaxialDriver.doctree new file mode 100644 index 00000000000..2bef119d03a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/constitutiveDrivers/docs/TriaxialDriver.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/dataRepository/docs/Group.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/dataRepository/docs/Group.doctree new file mode 100644 index 00000000000..bc49da7a0cc Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/dataRepository/docs/Group.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/dataRepository/docs/LogLevel.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/dataRepository/docs/LogLevel.doctree new file mode 100644 index 00000000000..d4f0199cee7 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/dataRepository/docs/LogLevel.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/dataRepository/docs/MappedVector.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/dataRepository/docs/MappedVector.doctree new file mode 100644 index 00000000000..1cc352f6f67 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/dataRepository/docs/MappedVector.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/dataRepository/docs/ObjectCatalog.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/dataRepository/docs/ObjectCatalog.doctree new file mode 100644 index 00000000000..b12db3f8795 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/dataRepository/docs/ObjectCatalog.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/dataRepository/docs/Wrapper.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/dataRepository/docs/Wrapper.doctree new file mode 100644 index 00000000000..d45e3eab6b3 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/dataRepository/docs/Wrapper.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/dataRepository/docs/dataRepository.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/dataRepository/docs/dataRepository.doctree new file mode 100644 index 00000000000..e443fa2ff52 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/dataRepository/docs/dataRepository.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/discretizationMethods/docs/NumericalMethodsManager.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/discretizationMethods/docs/NumericalMethodsManager.doctree new file mode 100644 index 00000000000..edf7394ad61 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/discretizationMethods/docs/NumericalMethodsManager.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/events/docs/EventManager.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/events/docs/EventManager.doctree new file mode 100644 index 00000000000..525e34a26db Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/events/docs/EventManager.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/events/docs/TasksManager.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/events/docs/TasksManager.doctree new file mode 100644 index 00000000000..b801b62c4f1 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/events/docs/TasksManager.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/fieldSpecification/docs/AquiferBoundaryCondition.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/fieldSpecification/docs/AquiferBoundaryCondition.doctree new file mode 100644 index 00000000000..7e9d9d737b5 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/fieldSpecification/docs/AquiferBoundaryCondition.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/fieldSpecification/docs/EquilibriumInitialCondition.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/fieldSpecification/docs/EquilibriumInitialCondition.doctree new file mode 100644 index 00000000000..26660a964c9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/fieldSpecification/docs/EquilibriumInitialCondition.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/fieldSpecification/docs/FieldSpecification.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/fieldSpecification/docs/FieldSpecification.doctree new file mode 100644 index 00000000000..e837535f670 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/fieldSpecification/docs/FieldSpecification.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/fileIO/doc/InputXMLFiles.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/fileIO/doc/InputXMLFiles.doctree new file mode 100644 index 00000000000..a49cd1f45c7 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/fileIO/doc/InputXMLFiles.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/fileIO/doc/Outputs.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/fileIO/doc/Outputs.doctree new file mode 100644 index 00000000000..89b25471129 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/fileIO/doc/Outputs.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/finiteElement/kernelInterface/kernelInterface.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/finiteElement/kernelInterface/kernelInterface.doctree new file mode 100644 index 00000000000..4a3be76f419 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/finiteElement/kernelInterface/kernelInterface.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/functions/docs/FunctionManager.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/functions/docs/FunctionManager.doctree new file mode 100644 index 00000000000..e0195d86b55 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/functions/docs/FunctionManager.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/linearAlgebra/docs/DofManager.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/linearAlgebra/docs/DofManager.doctree new file mode 100644 index 00000000000..ad1cc362da3 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/linearAlgebra/docs/DofManager.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/linearAlgebra/docs/KrylovSolvers.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/linearAlgebra/docs/KrylovSolvers.doctree new file mode 100644 index 00000000000..023f7fae742 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/linearAlgebra/docs/KrylovSolvers.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/linearAlgebra/docs/LinearSolvers.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/linearAlgebra/docs/LinearSolvers.doctree new file mode 100644 index 00000000000..3f4221b4f62 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/linearAlgebra/docs/LinearSolvers.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/mesh/docs/Mesh.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/mesh/docs/Mesh.doctree new file mode 100644 index 00000000000..7987cda4de0 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/mesh/docs/Mesh.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/mesh/docs/meshDeveloperGuide.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/mesh/docs/meshDeveloperGuide.doctree new file mode 100644 index 00000000000..cb1a0121106 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/mesh/docs/meshDeveloperGuide.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/mesh/mpiCommunications/docs/SpatialPartition.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/mesh/mpiCommunications/docs/SpatialPartition.doctree new file mode 100644 index 00000000000..0e67662fd16 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/mesh/mpiCommunications/docs/SpatialPartition.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/PhysicsSolvers.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/PhysicsSolvers.doctree new file mode 100644 index 00000000000..6fbfc011a0f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/PhysicsSolvers.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/SolutionStrategy.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/SolutionStrategy.doctree new file mode 100644 index 00000000000..9c61de5d336 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/SolutionStrategy.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/fluidFlow/docs/CompositionalMultiphaseFlow.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/fluidFlow/docs/CompositionalMultiphaseFlow.doctree new file mode 100644 index 00000000000..6f8cee930bb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/fluidFlow/docs/CompositionalMultiphaseFlow.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/fluidFlow/docs/ImmiscibleMultiphaseFlow.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/fluidFlow/docs/ImmiscibleMultiphaseFlow.doctree new file mode 100644 index 00000000000..3602b6203aa Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/fluidFlow/docs/ImmiscibleMultiphaseFlow.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/fluidFlow/docs/ProppantTransport.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/fluidFlow/docs/ProppantTransport.doctree new file mode 100644 index 00000000000..1653f3e6f4d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/fluidFlow/docs/ProppantTransport.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/fluidFlow/docs/SinglePhaseFlow.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/fluidFlow/docs/SinglePhaseFlow.doctree new file mode 100644 index 00000000000..52cf646877d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/fluidFlow/docs/SinglePhaseFlow.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/fluidFlow/wells/docs/CompositionalMultiphaseWell.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/fluidFlow/wells/docs/CompositionalMultiphaseWell.doctree new file mode 100644 index 00000000000..b43649d3908 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/fluidFlow/wells/docs/CompositionalMultiphaseWell.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/multiphysics/docs/Initialization.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/multiphysics/docs/Initialization.doctree new file mode 100644 index 00000000000..c15e2027881 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/multiphysics/docs/Initialization.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/multiphysics/docs/Poromechanics.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/multiphysics/docs/Poromechanics.doctree new file mode 100644 index 00000000000..58e84131ca8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/multiphysics/docs/Poromechanics.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/Example.doctree new file mode 100644 index 00000000000..9304b7fe060 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/Example.doctree new file mode 100644 index 00000000000..82f02b30730 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/solidMechanics/contact/docs/ContactMechanics.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/solidMechanics/contact/docs/ContactMechanics.doctree new file mode 100644 index 00000000000..d124d31da16 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/solidMechanics/contact/docs/ContactMechanics.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/solidMechanics/contact/docs/SolidMechanicsConformingFractures.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/solidMechanics/contact/docs/SolidMechanicsConformingFractures.doctree new file mode 100644 index 00000000000..ee45f90a394 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/solidMechanics/contact/docs/SolidMechanicsConformingFractures.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/solidMechanics/contact/docs/SolidMechanicsEmbeddedFractures.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/solidMechanics/contact/docs/SolidMechanicsEmbeddedFractures.doctree new file mode 100644 index 00000000000..5b18eae77cd Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/solidMechanics/contact/docs/SolidMechanicsEmbeddedFractures.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/solidMechanics/docs/SolidMechanics.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/solidMechanics/docs/SolidMechanics.doctree new file mode 100644 index 00000000000..11f83c5d5de Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/coreComponents/physicsSolvers/solidMechanics/docs/SolidMechanics.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/Acknowledgements.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/Acknowledgements.doctree new file mode 100644 index 00000000000..2b7e36d9502 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/Acknowledgements.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/Contributors.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/Contributors.doctree new file mode 100644 index 00000000000..79d09b16cca Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/Contributors.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/Doxygen.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/Doxygen.doctree new file mode 100644 index 00000000000..19cc7340da7 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/Doxygen.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/Publications.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/Publications.doctree new file mode 100644 index 00000000000..90be7ac09ce Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/Publications.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/QuickStart.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/QuickStart.doctree new file mode 100644 index 00000000000..9a6b0ded8ca Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/QuickStart.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/Index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/Index.doctree new file mode 100644 index 00000000000..82faa2072b6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/Index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/applicationStudies/Index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/applicationStudies/Index.doctree new file mode 100644 index 00000000000..da21d79cfbb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/applicationStudies/Index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/performanceBenchmarks/Index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/performanceBenchmarks/Index.doctree new file mode 100644 index 00000000000..85fca69cee8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/performanceBenchmarks/Index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/pygeosxExamples/Index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/pygeosxExamples/Index.doctree new file mode 100644 index 00000000000..7c1f1e806da Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/pygeosxExamples/Index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/pygeosxExamples/inSituDataMonitor/AdvancedExample.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/pygeosxExamples/inSituDataMonitor/AdvancedExample.doctree new file mode 100644 index 00000000000..b548cf4b430 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/pygeosxExamples/inSituDataMonitor/AdvancedExample.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/pygeosxExamples/initialConditionModification/AdvancedExample.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/pygeosxExamples/initialConditionModification/AdvancedExample.doctree new file mode 100644 index 00000000000..75c6fb9bb61 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/pygeosxExamples/initialConditionModification/AdvancedExample.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/Index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/Index.doctree new file mode 100644 index 00000000000..032b4ebb488 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/Index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/carbonStorage/Index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/carbonStorage/Index.doctree new file mode 100644 index 00000000000..6fcaa099639 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/carbonStorage/Index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/carbonStorage/buckleyLeverett/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/carbonStorage/buckleyLeverett/Example.doctree new file mode 100644 index 00000000000..2cbea6d4306 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/carbonStorage/buckleyLeverett/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/carbonStorage/isothermalHystInjection/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/carbonStorage/isothermalHystInjection/Example.doctree new file mode 100644 index 00000000000..353fb21b8ed Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/carbonStorage/isothermalHystInjection/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/carbonStorage/isothermalLeakyWell/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/carbonStorage/isothermalLeakyWell/Example.doctree new file mode 100644 index 00000000000..25c37b9cf03 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/carbonStorage/isothermalLeakyWell/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/carbonStorage/spe11b/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/carbonStorage/spe11b/Example.doctree new file mode 100644 index 00000000000..9d3981f5c84 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/carbonStorage/spe11b/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/carbonStorage/thermalLeakyWell/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/carbonStorage/thermalLeakyWell/Example.doctree new file mode 100644 index 00000000000..d620b2e6377 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/carbonStorage/thermalLeakyWell/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/faultMechanics/Index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/faultMechanics/Index.doctree new file mode 100644 index 00000000000..c4252ff5cc1 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/faultMechanics/Index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/faultMechanics/faultVerification/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/faultMechanics/faultVerification/Example.doctree new file mode 100644 index 00000000000..aa4b3e61442 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/faultMechanics/faultVerification/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/faultMechanics/intersectFrac/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/faultMechanics/intersectFrac/Example.doctree new file mode 100644 index 00000000000..cab35bc17ea Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/faultMechanics/intersectFrac/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/faultMechanics/singleFracCompression/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/faultMechanics/singleFracCompression/Example.doctree new file mode 100644 index 00000000000..b7b946db27d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/faultMechanics/singleFracCompression/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/faultMechanics/sneddon/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/faultMechanics/sneddon/Example.doctree new file mode 100644 index 00000000000..0e355fe89b0 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/faultMechanics/sneddon/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/Index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/Index.doctree new file mode 100644 index 00000000000..050d492d5cd Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/Index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdToughnessDominated/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdToughnessDominated/Example.doctree new file mode 100644 index 00000000000..256169222b5 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdToughnessDominated/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdValidation/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdValidation/Example.doctree new file mode 100644 index 00000000000..15a83ad4061 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdValidation/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdViscosityDominated/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdViscosityDominated/Example.doctree new file mode 100644 index 00000000000..58c840b187b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdViscosityDominated/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracToughnessDominated/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracToughnessDominated/Example.doctree new file mode 100644 index 00000000000..1d5bc6c6041 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracToughnessDominated/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracViscosityDominated/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracViscosityDominated/Example.doctree new file mode 100644 index 00000000000..7023e567b15 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracViscosityDominated/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pknFracViscosityDominated/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pknFracViscosityDominated/Example.doctree new file mode 100644 index 00000000000..1b41efbccea Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pknFracViscosityDominated/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/proppantSlotTest/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/proppantSlotTest/Example.doctree new file mode 100644 index 00000000000..3ef66d438e3 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/proppantSlotTest/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/poromechanics/Index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/poromechanics/Index.doctree new file mode 100644 index 00000000000..8cdacd9718e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/poromechanics/Index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/poromechanics/mandel/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/poromechanics/mandel/Example.doctree new file mode 100644 index 00000000000..7a2d6010ca9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/poromechanics/mandel/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/Index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/Index.doctree new file mode 100644 index 00000000000..8c022b5ae95 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/Index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/Example.doctree new file mode 100644 index 00000000000..0e4035eaee2 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/DruckerPrager/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/DruckerPrager/Example.doctree new file mode 100644 index 00000000000..744abe0e620 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/DruckerPrager/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ExtendedDruckerPrager/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ExtendedDruckerPrager/Example.doctree new file mode 100644 index 00000000000..e1fdfb26ff1 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ExtendedDruckerPrager/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/Index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/Index.doctree new file mode 100644 index 00000000000..c373cefad58 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/Index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ModifiedCamClay/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ModifiedCamClay/Example.doctree new file mode 100644 index 00000000000..0a643caf3bb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ModifiedCamClay/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/RelaxationTest/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/RelaxationTest/Example.doctree new file mode 100644 index 00000000000..a99eee0ab42 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/RelaxationTest/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoDruckerPrager/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoDruckerPrager/Example.doctree new file mode 100644 index 00000000000..c100da4b971 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoDruckerPrager/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoExtendedDruckerPrager/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoExtendedDruckerPrager/Example.doctree new file mode 100644 index 00000000000..85004e44c09 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoExtendedDruckerPrager/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoModifiedCamClay/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoModifiedCamClay/Example.doctree new file mode 100644 index 00000000000..9fcf0bead5f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoModifiedCamClay/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/Index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/Index.doctree new file mode 100644 index 00000000000..2f5a5210caa Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/Index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactElasticWellbore/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactElasticWellbore/Example.doctree new file mode 100644 index 00000000000..f590a98ef92 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactElasticWellbore/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactThermoElasticWellbore/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactThermoElasticWellbore/Example.doctree new file mode 100644 index 00000000000..0383f4ca542 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactThermoElasticWellbore/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedElasticWellbore/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedElasticWellbore/Example.doctree new file mode 100644 index 00000000000..0f16a8997c0 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedElasticWellbore/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedThermoElasticWellbore/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedThermoElasticWellbore/Example.doctree new file mode 100644 index 00000000000..a23d309df28 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedThermoElasticWellbore/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedElasticWellbore/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedElasticWellbore/Example.doctree new file mode 100644 index 00000000000..2ecb63f8017 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedElasticWellbore/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/Example.doctree new file mode 100644 index 00000000000..2398142d84d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/Example2.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/Example2.doctree new file mode 100644 index 00000000000..2ebf9fefc92 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/Example2.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/dpWellbore/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/dpWellbore/Example.doctree new file mode 100644 index 00000000000..2cfe55a572c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/dpWellbore/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/edpWellbore/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/edpWellbore/Example.doctree new file mode 100644 index 00000000000..1692bca0bdb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/edpWellbore/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/kirschWellbore/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/kirschWellbore/Example.doctree new file mode 100644 index 00000000000..cf37531161a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/kirschWellbore/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/linearThermalDiffusion/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/linearThermalDiffusion/Example.doctree new file mode 100644 index 00000000000..674bd7f0f5b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/linearThermalDiffusion/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/mccWellbore/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/mccWellbore/Example.doctree new file mode 100644 index 00000000000..2c7027dbf4e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/mccWellbore/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentSinglePhaseThermalConductivity/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentSinglePhaseThermalConductivity/Example.doctree new file mode 100644 index 00000000000..d73edf7d5fd Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentSinglePhaseThermalConductivity/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentVolumetricHeatCapacity/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentVolumetricHeatCapacity/Example.doctree new file mode 100644 index 00000000000..914f98f5549 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentVolumetricHeatCapacity/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/thermoPoroElasticWellbore/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/thermoPoroElasticWellbore/Example.doctree new file mode 100644 index 00000000000..b3c73b1849f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/thermoPoroElasticWellbore/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/verticalPoroElastoPlasticWellbore/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/verticalPoroElastoPlasticWellbore/Example.doctree new file mode 100644 index 00000000000..f4aea6d5ab0 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/verticalPoroElastoPlasticWellbore/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/Index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/Index.doctree new file mode 100644 index 00000000000..7b53724f833 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/Index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/co2Injection/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/co2Injection/Example.doctree new file mode 100644 index 00000000000..467ac9351b3 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/co2Injection/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/hydraulicFracturing/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/hydraulicFracturing/Example.doctree new file mode 100644 index 00000000000..21b5dcbe72a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/hydraulicFracturing/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/multiphaseFlow/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/multiphaseFlow/Example.doctree new file mode 100644 index 00000000000..a2e7d971c2b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/multiphaseFlow/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/multiphaseFlowWithWells/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/multiphaseFlowWithWells/Example.doctree new file mode 100644 index 00000000000..9c9dbdb6813 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/multiphaseFlowWithWells/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/poromechanics/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/poromechanics/Example.doctree new file mode 100644 index 00000000000..4d0c89b568b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/poromechanics/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/stressPathDriven/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/stressPathDriven/Example.doctree new file mode 100644 index 00000000000..961ec55e8fc Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/stressPathDriven/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/triaxialDriver/Example.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/triaxialDriver/Example.doctree new file mode 100644 index 00000000000..22cb432d33c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/basicExamples/triaxialDriver/Example.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/AppleMacOS.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/AppleMacOS.doctree new file mode 100644 index 00000000000..6acdf24c696 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/AppleMacOS.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/BuildProcess.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/BuildProcess.doctree new file mode 100644 index 00000000000..ee90425856f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/BuildProcess.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/ContinuousIntegration.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/ContinuousIntegration.doctree new file mode 100644 index 00000000000..244d3870c6e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/ContinuousIntegration.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/Dependencies.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/Dependencies.doctree new file mode 100644 index 00000000000..171d98510b6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/Dependencies.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/Index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/Index.doctree new file mode 100644 index 00000000000..4d2b09422ad Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/Index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/Prerequisites.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/Prerequisites.doctree new file mode 100644 index 00000000000..8d9d47e99eb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/Prerequisites.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/SpackUberenv.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/SpackUberenv.doctree new file mode 100644 index 00000000000..de6c21d8f14 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/buildGuide/SpackUberenv.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticDG.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticDG.doctree new file mode 100644 index 00000000000..14b45a85922 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticDG.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticDG_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticDG_other.doctree new file mode 100644 index 00000000000..be27c6dd5dd Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticDG_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticElasticSEM.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticElasticSEM.doctree new file mode 100644 index 00000000000..fe7b563d2b9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticElasticSEM.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticElasticSEM_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticElasticSEM_other.doctree new file mode 100644 index 00000000000..58155b3ffb8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticElasticSEM_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticFirstOrderSEM.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticFirstOrderSEM.doctree new file mode 100644 index 00000000000..794a79fde75 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticFirstOrderSEM.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticFirstOrderSEM_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticFirstOrderSEM_other.doctree new file mode 100644 index 00000000000..fe5dd9c8e8a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticFirstOrderSEM_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticSEM.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticSEM.doctree new file mode 100644 index 00000000000..f3f575c1b5b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticSEM.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticSEM_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticSEM_other.doctree new file mode 100644 index 00000000000..86da2432807 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticSEM_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticVTISEM.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticVTISEM.doctree new file mode 100644 index 00000000000..fba4e3c3d51 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticVTISEM.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticVTISEM_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticVTISEM_other.doctree new file mode 100644 index 00000000000..32a01124021 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/AcousticVTISEM_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Aquifer.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Aquifer.doctree new file mode 100644 index 00000000000..9b6f66f3b18 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Aquifer.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Aquifer_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Aquifer_other.doctree new file mode 100644 index 00000000000..ab42f27b731 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Aquifer_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BartonBandis.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BartonBandis.doctree new file mode 100644 index 00000000000..1cc9f8233b3 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BartonBandis.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BartonBandisStressPathDriven.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BartonBandisStressPathDriven.doctree new file mode 100644 index 00000000000..ae77c1f9f72 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BartonBandisStressPathDriven.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BartonBandisStressPathDriven_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BartonBandisStressPathDriven_other.doctree new file mode 100644 index 00000000000..209f33a87bb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BartonBandisStressPathDriven_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BartonBandis_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BartonBandis_other.doctree new file mode 100644 index 00000000000..54422659e9e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BartonBandis_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Benchmarks.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Benchmarks.doctree new file mode 100644 index 00000000000..205373a26b5 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Benchmarks.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Benchmarks_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Benchmarks_other.doctree new file mode 100644 index 00000000000..92b9c4248cb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Benchmarks_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BiotPorosity.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BiotPorosity.doctree new file mode 100644 index 00000000000..28dce8a1f20 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BiotPorosity.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BiotPorosity_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BiotPorosity_other.doctree new file mode 100644 index 00000000000..0ca85ecad13 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BiotPorosity_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BlackOilFluid.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BlackOilFluid.doctree new file mode 100644 index 00000000000..98b9283d0c8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BlackOilFluid.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BlackOilFluid_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BlackOilFluid_other.doctree new file mode 100644 index 00000000000..b1edb8097a6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BlackOilFluid_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Block.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Block.doctree new file mode 100644 index 00000000000..b27ebad7030 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Block.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Block_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Block_other.doctree new file mode 100644 index 00000000000..472818c95c7 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Block_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Blueprint.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Blueprint.doctree new file mode 100644 index 00000000000..9dbf26f3c8e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Blueprint.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Blueprint_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Blueprint_other.doctree new file mode 100644 index 00000000000..25207cb9c51 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Blueprint_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Box.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Box.doctree new file mode 100644 index 00000000000..b3972e07c26 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Box.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Box_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Box_other.doctree new file mode 100644 index 00000000000..f79204d706a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Box_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyBakerRelativePermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyBakerRelativePermeability.doctree new file mode 100644 index 00000000000..73ba7be260c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyBakerRelativePermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyBakerRelativePermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyBakerRelativePermeability_other.doctree new file mode 100644 index 00000000000..2197088ccc2 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyBakerRelativePermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyCapillaryPressure.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyCapillaryPressure.doctree new file mode 100644 index 00000000000..a6844cb0b1a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyCapillaryPressure.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyCapillaryPressure_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyCapillaryPressure_other.doctree new file mode 100644 index 00000000000..a2e53243ec2 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyCapillaryPressure_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyRelativePermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyRelativePermeability.doctree new file mode 100644 index 00000000000..09d4bd1fb1d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyRelativePermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyRelativePermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyRelativePermeability_other.doctree new file mode 100644 index 00000000000..d933284a67a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyRelativePermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyStone2RelativePermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyStone2RelativePermeability.doctree new file mode 100644 index 00000000000..4c8e928e41d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyStone2RelativePermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyStone2RelativePermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyStone2RelativePermeability_other.doctree new file mode 100644 index 00000000000..25b4142c6f2 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/BrooksCoreyStone2RelativePermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrineEzrokhiFluid.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrineEzrokhiFluid.doctree new file mode 100644 index 00000000000..d794e159144 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrineEzrokhiFluid.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrineEzrokhiFluid_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrineEzrokhiFluid_other.doctree new file mode 100644 index 00000000000..81c112f94a1 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrineEzrokhiFluid_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrineEzrokhiThermalFluid.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrineEzrokhiThermalFluid.doctree new file mode 100644 index 00000000000..2839a3f34cd Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrineEzrokhiThermalFluid.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrineEzrokhiThermalFluid_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrineEzrokhiThermalFluid_other.doctree new file mode 100644 index 00000000000..ed4ac539063 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrineEzrokhiThermalFluid_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrinePhillipsFluid.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrinePhillipsFluid.doctree new file mode 100644 index 00000000000..80d387d4b19 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrinePhillipsFluid.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrinePhillipsFluid_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrinePhillipsFluid_other.doctree new file mode 100644 index 00000000000..50b1c5f3fa2 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrinePhillipsFluid_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrinePhillipsThermalFluid.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrinePhillipsThermalFluid.doctree new file mode 100644 index 00000000000..755b850259c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrinePhillipsThermalFluid.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrinePhillipsThermalFluid_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrinePhillipsThermalFluid_other.doctree new file mode 100644 index 00000000000..4dde17d5ebd Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CO2BrinePhillipsThermalFluid_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CarmanKozenyPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CarmanKozenyPermeability.doctree new file mode 100644 index 00000000000..1519b66be87 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CarmanKozenyPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CarmanKozenyPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CarmanKozenyPermeability_other.doctree new file mode 100644 index 00000000000..595e6ae8e05 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CarmanKozenyPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CellElementRegion.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CellElementRegion.doctree new file mode 100644 index 00000000000..26979781b13 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CellElementRegion.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CellElementRegion_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CellElementRegion_other.doctree new file mode 100644 index 00000000000..c924e1c75fc Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CellElementRegion_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CellToCellDataCollection.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CellToCellDataCollection.doctree new file mode 100644 index 00000000000..75d2925f57d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CellToCellDataCollection.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CellToCellDataCollection_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CellToCellDataCollection_other.doctree new file mode 100644 index 00000000000..31dee4f601c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CellToCellDataCollection_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CeramicDamage.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CeramicDamage.doctree new file mode 100644 index 00000000000..3438714aae3 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CeramicDamage.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CeramicDamage_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CeramicDamage_other.doctree new file mode 100644 index 00000000000..a70482fed9e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CeramicDamage_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ChomboIO.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ChomboIO.doctree new file mode 100644 index 00000000000..c38fd4f67dd Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ChomboIO.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ChomboIO_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ChomboIO_other.doctree new file mode 100644 index 00000000000..69e365c96ce Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ChomboIO_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Coarsening.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Coarsening.doctree new file mode 100644 index 00000000000..27dd64966e2 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Coarsening.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Coarsening_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Coarsening_other.doctree new file mode 100644 index 00000000000..3ad271f2b3e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Coarsening_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompleteXMLSchema.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompleteXMLSchema.doctree new file mode 100644 index 00000000000..2ae8f823b28 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompleteXMLSchema.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseFVM.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseFVM.doctree new file mode 100644 index 00000000000..1094212799d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseFVM.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseFVM_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseFVM_other.doctree new file mode 100644 index 00000000000..c3f7eced1ea Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseFVM_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseFluid.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseFluid.doctree new file mode 100644 index 00000000000..178550a74e1 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseFluid.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseFluid_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseFluid_other.doctree new file mode 100644 index 00000000000..3a5963a94ee Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseFluid_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseHybridFVM.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseHybridFVM.doctree new file mode 100644 index 00000000000..2c5cd8cb731 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseHybridFVM.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseHybridFVM_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseHybridFVM_other.doctree new file mode 100644 index 00000000000..86e3b2a73c0 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseHybridFVM_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseReservoir.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseReservoir.doctree new file mode 100644 index 00000000000..131bf63265b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseReservoir.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseReservoirPoromechanics.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseReservoirPoromechanics.doctree new file mode 100644 index 00000000000..da424f19c72 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseReservoirPoromechanics.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseReservoirPoromechanicsInitialization.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseReservoirPoromechanicsInitialization.doctree new file mode 100644 index 00000000000..1f1601d294d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseReservoirPoromechanicsInitialization.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseReservoirPoromechanicsInitialization_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseReservoirPoromechanicsInitialization_other.doctree new file mode 100644 index 00000000000..2252e2f14e9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseReservoirPoromechanicsInitialization_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseReservoirPoromechanics_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseReservoirPoromechanics_other.doctree new file mode 100644 index 00000000000..16b5d6b7e13 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseReservoirPoromechanics_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseReservoir_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseReservoir_other.doctree new file mode 100644 index 00000000000..583e8d1ae41 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseReservoir_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseStatistics.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseStatistics.doctree new file mode 100644 index 00000000000..536b431b030 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseStatistics.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseStatistics_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseStatistics_other.doctree new file mode 100644 index 00000000000..844dd4a8ce9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseStatistics_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseWell.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseWell.doctree new file mode 100644 index 00000000000..507c98c8557 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseWell.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseWell_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseWell_other.doctree new file mode 100644 index 00000000000..f7e4d07ebc4 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalMultiphaseWell_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalThreePhaseFluidLohrenzBrayClark.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalThreePhaseFluidLohrenzBrayClark.doctree new file mode 100644 index 00000000000..6e1bcaf2332 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalThreePhaseFluidLohrenzBrayClark.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalThreePhaseFluidLohrenzBrayClark_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalThreePhaseFluidLohrenzBrayClark_other.doctree new file mode 100644 index 00000000000..9bf2d1c1748 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalThreePhaseFluidLohrenzBrayClark_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalTwoPhaseFluid.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalTwoPhaseFluid.doctree new file mode 100644 index 00000000000..04056dd913f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalTwoPhaseFluid.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalTwoPhaseFluidLohrenzBrayClark.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalTwoPhaseFluidLohrenzBrayClark.doctree new file mode 100644 index 00000000000..20215372a5b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalTwoPhaseFluidLohrenzBrayClark.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalTwoPhaseFluidLohrenzBrayClark_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalTwoPhaseFluidLohrenzBrayClark_other.doctree new file mode 100644 index 00000000000..6bffc2b1323 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalTwoPhaseFluidLohrenzBrayClark_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalTwoPhaseFluidPhillipsBrine.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalTwoPhaseFluidPhillipsBrine.doctree new file mode 100644 index 00000000000..b7960e6e020 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalTwoPhaseFluidPhillipsBrine.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalTwoPhaseFluidPhillipsBrine_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalTwoPhaseFluidPhillipsBrine_other.doctree new file mode 100644 index 00000000000..afb7b6817b6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalTwoPhaseFluidPhillipsBrine_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalTwoPhaseFluid_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalTwoPhaseFluid_other.doctree new file mode 100644 index 00000000000..6adf5e87fd7 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompositionalTwoPhaseFluid_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSinglePhaseFluid.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSinglePhaseFluid.doctree new file mode 100644 index 00000000000..6d51aa19e91 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSinglePhaseFluid.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSinglePhaseFluid_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSinglePhaseFluid_other.doctree new file mode 100644 index 00000000000..5a666078c37 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSinglePhaseFluid_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidCarmanKozenyPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidCarmanKozenyPermeability.doctree new file mode 100644 index 00000000000..ae1f7020e3f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidCarmanKozenyPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidCarmanKozenyPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidCarmanKozenyPermeability_other.doctree new file mode 100644 index 00000000000..05167948440 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidCarmanKozenyPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidConstantPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidConstantPermeability.doctree new file mode 100644 index 00000000000..2ec70f69978 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidConstantPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidConstantPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidConstantPermeability_other.doctree new file mode 100644 index 00000000000..3ead553641e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidConstantPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidExponentialDecayPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidExponentialDecayPermeability.doctree new file mode 100644 index 00000000000..b879a3dd558 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidExponentialDecayPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidExponentialDecayPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidExponentialDecayPermeability_other.doctree new file mode 100644 index 00000000000..f5836ad91ff Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidExponentialDecayPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidParallelPlatesPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidParallelPlatesPermeability.doctree new file mode 100644 index 00000000000..9251fb3c92a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidParallelPlatesPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidParallelPlatesPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidParallelPlatesPermeability_other.doctree new file mode 100644 index 00000000000..5354765a69e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidParallelPlatesPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidPressurePermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidPressurePermeability.doctree new file mode 100644 index 00000000000..d9c1eb1a242 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidPressurePermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidPressurePermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidPressurePermeability_other.doctree new file mode 100644 index 00000000000..f513f69efa5 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidPressurePermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidSlipDependentPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidSlipDependentPermeability.doctree new file mode 100644 index 00000000000..e2bb655367f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidSlipDependentPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidSlipDependentPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidSlipDependentPermeability_other.doctree new file mode 100644 index 00000000000..0cea88a0381 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidSlipDependentPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidWillisRichardsPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidWillisRichardsPermeability.doctree new file mode 100644 index 00000000000..4d9374c317f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidWillisRichardsPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidWillisRichardsPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidWillisRichardsPermeability_other.doctree new file mode 100644 index 00000000000..067407b01d1 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CompressibleSolidWillisRichardsPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ConstantDiffusion.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ConstantDiffusion.doctree new file mode 100644 index 00000000000..6ebf9086710 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ConstantDiffusion.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ConstantDiffusion_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ConstantDiffusion_other.doctree new file mode 100644 index 00000000000..f0820d8019e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ConstantDiffusion_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ConstantPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ConstantPermeability.doctree new file mode 100644 index 00000000000..a862f34ee25 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ConstantPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ConstantPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ConstantPermeability_other.doctree new file mode 100644 index 00000000000..194cde593f6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ConstantPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Constitutive.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Constitutive.doctree new file mode 100644 index 00000000000..87474e0cf79 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Constitutive.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ConstitutiveModels_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ConstitutiveModels_other.doctree new file mode 100644 index 00000000000..83cde70fe2b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ConstitutiveModels_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Constitutive_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Constitutive_other.doctree new file mode 100644 index 00000000000..6d5da18ecf9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Constitutive_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Coulomb.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Coulomb.doctree new file mode 100644 index 00000000000..9ee51ca4219 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Coulomb.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Coulomb_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Coulomb_other.doctree new file mode 100644 index 00000000000..49306a54169 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Coulomb_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Coupled.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Coupled.doctree new file mode 100644 index 00000000000..8e56c503283 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Coupled.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Coupled_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Coupled_other.doctree new file mode 100644 index 00000000000..9ba5aba4d7a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Coupled_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CustomPolarObject.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CustomPolarObject.doctree new file mode 100644 index 00000000000..eafea08bfd2 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CustomPolarObject.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CustomPolarObject_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CustomPolarObject_other.doctree new file mode 100644 index 00000000000..aa0e3db4834 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/CustomPolarObject_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Cylinder.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Cylinder.doctree new file mode 100644 index 00000000000..6ad4fd882d5 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Cylinder.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Cylinder_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Cylinder_other.doctree new file mode 100644 index 00000000000..b7d588317eb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Cylinder_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamageElasticIsotropic.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamageElasticIsotropic.doctree new file mode 100644 index 00000000000..df3b6cd3ced Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamageElasticIsotropic.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamageElasticIsotropic_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamageElasticIsotropic_other.doctree new file mode 100644 index 00000000000..a81dc1e083e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamageElasticIsotropic_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamagePermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamagePermeability.doctree new file mode 100644 index 00000000000..c326ae3b652 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamagePermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamagePermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamagePermeability_other.doctree new file mode 100644 index 00000000000..3a3bcfafc41 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamagePermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamageSpectralElasticIsotropic.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamageSpectralElasticIsotropic.doctree new file mode 100644 index 00000000000..b9f3fc73e1b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamageSpectralElasticIsotropic.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamageSpectralElasticIsotropic_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamageSpectralElasticIsotropic_other.doctree new file mode 100644 index 00000000000..77abbac5f53 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamageSpectralElasticIsotropic_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamageVolDevElasticIsotropic.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamageVolDevElasticIsotropic.doctree new file mode 100644 index 00000000000..e8857e1f0a7 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamageVolDevElasticIsotropic.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamageVolDevElasticIsotropic_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamageVolDevElasticIsotropic_other.doctree new file mode 100644 index 00000000000..90e7567df0c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DamageVolDevElasticIsotropic_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DeadOilFluid.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DeadOilFluid.doctree new file mode 100644 index 00000000000..40de10c90d6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DeadOilFluid.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DeadOilFluid_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DeadOilFluid_other.doctree new file mode 100644 index 00000000000..81948d1973d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DeadOilFluid_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DelftEgg.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DelftEgg.doctree new file mode 100644 index 00000000000..dd9a3d16079 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DelftEgg.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DelftEgg_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DelftEgg_other.doctree new file mode 100644 index 00000000000..89db4396589 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DelftEgg_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Dirichlet.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Dirichlet.doctree new file mode 100644 index 00000000000..e5bc892f51c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Dirichlet.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Dirichlet_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Dirichlet_other.doctree new file mode 100644 index 00000000000..67f9ccc8068 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Dirichlet_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Disc.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Disc.doctree new file mode 100644 index 00000000000..ae7ba9a28eb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Disc.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Disc_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Disc_other.doctree new file mode 100644 index 00000000000..970d274e302 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Disc_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DruckerPrager.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DruckerPrager.doctree new file mode 100644 index 00000000000..ce80ec4c5ca Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DruckerPrager.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DruckerPrager_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DruckerPrager_other.doctree new file mode 100644 index 00000000000..ef6ff8f227b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/DruckerPrager_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticFirstOrderSEM.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticFirstOrderSEM.doctree new file mode 100644 index 00000000000..a94e0313fb8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticFirstOrderSEM.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticFirstOrderSEM_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticFirstOrderSEM_other.doctree new file mode 100644 index 00000000000..563805dec63 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticFirstOrderSEM_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticIsotropic.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticIsotropic.doctree new file mode 100644 index 00000000000..76a8b576592 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticIsotropic.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticIsotropicPressureDependent.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticIsotropicPressureDependent.doctree new file mode 100644 index 00000000000..1bdf2c6ef97 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticIsotropicPressureDependent.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticIsotropicPressureDependent_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticIsotropicPressureDependent_other.doctree new file mode 100644 index 00000000000..b8b64703799 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticIsotropicPressureDependent_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticIsotropic_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticIsotropic_other.doctree new file mode 100644 index 00000000000..bf416d9a034 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticIsotropic_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticOrthotropic.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticOrthotropic.doctree new file mode 100644 index 00000000000..85edfa3607c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticOrthotropic.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticOrthotropic_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticOrthotropic_other.doctree new file mode 100644 index 00000000000..22e742bdb40 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticOrthotropic_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticSEM.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticSEM.doctree new file mode 100644 index 00000000000..d0e3cb653e6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticSEM.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticSEM_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticSEM_other.doctree new file mode 100644 index 00000000000..d39ded2f430 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticSEM_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticTransverseIsotropic.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticTransverseIsotropic.doctree new file mode 100644 index 00000000000..e601c93087d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticTransverseIsotropic.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticTransverseIsotropic_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticTransverseIsotropic_other.doctree new file mode 100644 index 00000000000..a45f61da1d4 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElasticTransverseIsotropic_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElementRegions.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElementRegions.doctree new file mode 100644 index 00000000000..1dc081a8aa8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElementRegions.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElementRegions_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElementRegions_other.doctree new file mode 100644 index 00000000000..9b4942a6e6a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ElementRegions_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/EmbeddedSurfaceGenerator.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/EmbeddedSurfaceGenerator.doctree new file mode 100644 index 00000000000..3529a722866 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/EmbeddedSurfaceGenerator.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/EmbeddedSurfaceGenerator_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/EmbeddedSurfaceGenerator_other.doctree new file mode 100644 index 00000000000..d4ab6eac5c5 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/EmbeddedSurfaceGenerator_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Events.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Events.doctree new file mode 100644 index 00000000000..4abfbe03658 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Events.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Events_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Events_other.doctree new file mode 100644 index 00000000000..f3c685ff80e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Events_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExplicitQuasiDynamicEQ.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExplicitQuasiDynamicEQ.doctree new file mode 100644 index 00000000000..cfaaaa8f585 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExplicitQuasiDynamicEQ.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExplicitQuasiDynamicEQ_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExplicitQuasiDynamicEQ_other.doctree new file mode 100644 index 00000000000..930e6c70287 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExplicitQuasiDynamicEQ_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExplicitSpringSlider.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExplicitSpringSlider.doctree new file mode 100644 index 00000000000..c86743a705d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExplicitSpringSlider.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExplicitSpringSlider_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExplicitSpringSlider_other.doctree new file mode 100644 index 00000000000..3c34c74b637 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExplicitSpringSlider_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExponentialDecayPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExponentialDecayPermeability.doctree new file mode 100644 index 00000000000..53266e143be Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExponentialDecayPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExponentialDecayPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExponentialDecayPermeability_other.doctree new file mode 100644 index 00000000000..9937f9d79fd Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExponentialDecayPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExtendedDruckerPrager.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExtendedDruckerPrager.doctree new file mode 100644 index 00000000000..f0d9af780dc Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExtendedDruckerPrager.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExtendedDruckerPrager_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExtendedDruckerPrager_other.doctree new file mode 100644 index 00000000000..660fb1692f4 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExtendedDruckerPrager_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExternalDataSource.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExternalDataSource.doctree new file mode 100644 index 00000000000..ff1e10c6c87 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExternalDataSource.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExternalDataSource_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExternalDataSource_other.doctree new file mode 100644 index 00000000000..e78cbc9fa35 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ExternalDataSource_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FieldSpecification.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FieldSpecification.doctree new file mode 100644 index 00000000000..93858aa2565 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FieldSpecification.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FieldSpecification_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FieldSpecification_other.doctree new file mode 100644 index 00000000000..8b4f6091bfe Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FieldSpecification_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FieldSpecifications.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FieldSpecifications.doctree new file mode 100644 index 00000000000..1fe144435fd Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FieldSpecifications.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FieldSpecifications_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FieldSpecifications_other.doctree new file mode 100644 index 00000000000..f3f272bb64a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FieldSpecifications_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/File.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/File.doctree new file mode 100644 index 00000000000..d3eb1e37843 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/File.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/File_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/File_other.doctree new file mode 100644 index 00000000000..784f8ca67fb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/File_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FiniteElementSpace.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FiniteElementSpace.doctree new file mode 100644 index 00000000000..e090b32ecb8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FiniteElementSpace.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FiniteElementSpace_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FiniteElementSpace_other.doctree new file mode 100644 index 00000000000..0694fda85c0 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FiniteElementSpace_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FiniteElements.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FiniteElements.doctree new file mode 100644 index 00000000000..a8556cce84c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FiniteElements.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FiniteElements_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FiniteElements_other.doctree new file mode 100644 index 00000000000..35f5c946cd9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FiniteElements_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FiniteVolume.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FiniteVolume.doctree new file mode 100644 index 00000000000..2dc330b2eb3 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FiniteVolume.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FiniteVolume_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FiniteVolume_other.doctree new file mode 100644 index 00000000000..a1f4f2507e0 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FiniteVolume_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FlowProppantTransport.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FlowProppantTransport.doctree new file mode 100644 index 00000000000..318bfedb437 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FlowProppantTransport.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FlowProppantTransport_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FlowProppantTransport_other.doctree new file mode 100644 index 00000000000..562d79e6144 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FlowProppantTransport_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FrictionlessContact.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FrictionlessContact.doctree new file mode 100644 index 00000000000..62b8012c570 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FrictionlessContact.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FrictionlessContact_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FrictionlessContact_other.doctree new file mode 100644 index 00000000000..3a7b99e2e5a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/FrictionlessContact_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Functions.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Functions.doctree new file mode 100644 index 00000000000..ae676aa9409 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Functions.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Functions_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Functions_other.doctree new file mode 100644 index 00000000000..5cd8fc9bfbd Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Functions_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Geometry.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Geometry.doctree new file mode 100644 index 00000000000..ad060f98205 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Geometry.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Geometry_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Geometry_other.doctree new file mode 100644 index 00000000000..eecfc1b183f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Geometry_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Graph.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Graph.doctree new file mode 100644 index 00000000000..8b8be8eada7 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Graph.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Graph_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Graph_other.doctree new file mode 100644 index 00000000000..4bb27ddd4ac Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Graph_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HaltEvent.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HaltEvent.doctree new file mode 100644 index 00000000000..7c3b8c7c426 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HaltEvent.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HaltEvent_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HaltEvent_other.doctree new file mode 100644 index 00000000000..b70f4e0dbd8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HaltEvent_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HybridMimeticDiscretization.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HybridMimeticDiscretization.doctree new file mode 100644 index 00000000000..8a211b199e4 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HybridMimeticDiscretization.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HybridMimeticDiscretization_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HybridMimeticDiscretization_other.doctree new file mode 100644 index 00000000000..8c7cbddf4dd Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HybridMimeticDiscretization_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HydraulicApertureTable.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HydraulicApertureTable.doctree new file mode 100644 index 00000000000..5fb9378cc70 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HydraulicApertureTable.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HydraulicApertureTable_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HydraulicApertureTable_other.doctree new file mode 100644 index 00000000000..c8f60723297 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HydraulicApertureTable_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Hydrofracture.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Hydrofracture.doctree new file mode 100644 index 00000000000..0891ebeef90 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Hydrofracture.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HydrofractureInitialization.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HydrofractureInitialization.doctree new file mode 100644 index 00000000000..be151b96f4d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HydrofractureInitialization.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HydrofractureInitialization_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HydrofractureInitialization_other.doctree new file mode 100644 index 00000000000..9bdb552d763 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HydrofractureInitialization_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Hydrofracture_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Hydrofracture_other.doctree new file mode 100644 index 00000000000..5cbf528259d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Hydrofracture_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HydrostaticEquilibrium.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HydrostaticEquilibrium.doctree new file mode 100644 index 00000000000..bd35b1a37e9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HydrostaticEquilibrium.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HydrostaticEquilibrium_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HydrostaticEquilibrium_other.doctree new file mode 100644 index 00000000000..33af3e3ab98 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/HydrostaticEquilibrium_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ImmiscibleMultiphaseFlow.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ImmiscibleMultiphaseFlow.doctree new file mode 100644 index 00000000000..265ba7701fa Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ImmiscibleMultiphaseFlow.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ImmiscibleMultiphaseFlow_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ImmiscibleMultiphaseFlow_other.doctree new file mode 100644 index 00000000000..4f44cc809a8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ImmiscibleMultiphaseFlow_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ImplicitQuasiDynamicEQ.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ImplicitQuasiDynamicEQ.doctree new file mode 100644 index 00000000000..84562ddc5bc Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ImplicitQuasiDynamicEQ.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ImplicitQuasiDynamicEQ_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ImplicitQuasiDynamicEQ_other.doctree new file mode 100644 index 00000000000..f7430101da7 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ImplicitQuasiDynamicEQ_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ImplicitSpringSlider.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ImplicitSpringSlider.doctree new file mode 100644 index 00000000000..cd02b19833e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ImplicitSpringSlider.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ImplicitSpringSlider_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ImplicitSpringSlider_other.doctree new file mode 100644 index 00000000000..0f149cde2eb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ImplicitSpringSlider_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Included.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Included.doctree new file mode 100644 index 00000000000..20f3030482c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Included.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Included_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Included_other.doctree new file mode 100644 index 00000000000..376a3b030ca Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Included_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InternalMesh.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InternalMesh.doctree new file mode 100644 index 00000000000..073aacdc73c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InternalMesh.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InternalMesh_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InternalMesh_other.doctree new file mode 100644 index 00000000000..b29ffb1015d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InternalMesh_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InternalWell.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InternalWell.doctree new file mode 100644 index 00000000000..941dc1777da Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InternalWell.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InternalWell_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InternalWell_other.doctree new file mode 100644 index 00000000000..0f2cc44b87c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InternalWell_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InternalWellbore.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InternalWellbore.doctree new file mode 100644 index 00000000000..8bbc6c0d809 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InternalWellbore.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InternalWellbore_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InternalWellbore_other.doctree new file mode 100644 index 00000000000..673f3950570 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InternalWellbore_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InvariantImmiscibleFluid.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InvariantImmiscibleFluid.doctree new file mode 100644 index 00000000000..962382a7894 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InvariantImmiscibleFluid.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InvariantImmiscibleFluid_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InvariantImmiscibleFluid_other.doctree new file mode 100644 index 00000000000..99656d7204b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/InvariantImmiscibleFluid_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/JFunctionCapillaryPressure.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/JFunctionCapillaryPressure.doctree new file mode 100644 index 00000000000..771985e9df1 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/JFunctionCapillaryPressure.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/JFunctionCapillaryPressure_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/JFunctionCapillaryPressure_other.doctree new file mode 100644 index 00000000000..e87409f70df Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/JFunctionCapillaryPressure_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/LaplaceFEM.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/LaplaceFEM.doctree new file mode 100644 index 00000000000..294bb1ee58d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/LaplaceFEM.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/LaplaceFEM_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/LaplaceFEM_other.doctree new file mode 100644 index 00000000000..28e438d55fb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/LaplaceFEM_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Level0_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Level0_other.doctree new file mode 100644 index 00000000000..c1ca4f90023 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Level0_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/LinearIsotropicDispersion.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/LinearIsotropicDispersion.doctree new file mode 100644 index 00000000000..cddbb6c2743 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/LinearIsotropicDispersion.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/LinearIsotropicDispersion_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/LinearIsotropicDispersion_other.doctree new file mode 100644 index 00000000000..eb435f855e9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/LinearIsotropicDispersion_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/LinearSolverParameters.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/LinearSolverParameters.doctree new file mode 100644 index 00000000000..91f9f0a5d18 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/LinearSolverParameters.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/LinearSolverParameters_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/LinearSolverParameters_other.doctree new file mode 100644 index 00000000000..8f1f11d280a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/LinearSolverParameters_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MemoryStats.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MemoryStats.doctree new file mode 100644 index 00000000000..3bbb5b43dde Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MemoryStats.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MemoryStats_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MemoryStats_other.doctree new file mode 100644 index 00000000000..7ac38384bcc Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MemoryStats_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Mesh.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Mesh.doctree new file mode 100644 index 00000000000..588407e2dc3 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Mesh.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MeshBodies_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MeshBodies_other.doctree new file mode 100644 index 00000000000..eadbe7c65f8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MeshBodies_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Mesh_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Mesh_other.doctree new file mode 100644 index 00000000000..1a24e8c4d6d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Mesh_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Metis.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Metis.doctree new file mode 100644 index 00000000000..d2ae085e3c6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Metis.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Metis_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Metis_other.doctree new file mode 100644 index 00000000000..785faf8d6ea Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Metis_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ModifiedCamClay.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ModifiedCamClay.doctree new file mode 100644 index 00000000000..29766368013 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ModifiedCamClay.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ModifiedCamClay_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ModifiedCamClay_other.doctree new file mode 100644 index 00000000000..c1af66bfaec Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ModifiedCamClay_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MsRSB.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MsRSB.doctree new file mode 100644 index 00000000000..42ef4439542 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MsRSB.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MsRSB_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MsRSB_other.doctree new file mode 100644 index 00000000000..55680d50b11 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MsRSB_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiPhaseConstantThermalConductivity.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiPhaseConstantThermalConductivity.doctree new file mode 100644 index 00000000000..f58cc962568 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiPhaseConstantThermalConductivity.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiPhaseConstantThermalConductivity_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiPhaseConstantThermalConductivity_other.doctree new file mode 100644 index 00000000000..69cbc6001f0 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiPhaseConstantThermalConductivity_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiPhaseVolumeWeightedThermalConductivity.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiPhaseVolumeWeightedThermalConductivity.doctree new file mode 100644 index 00000000000..c633a8eef09 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiPhaseVolumeWeightedThermalConductivity.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiPhaseVolumeWeightedThermalConductivity_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiPhaseVolumeWeightedThermalConductivity_other.doctree new file mode 100644 index 00000000000..68830330e67 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiPhaseVolumeWeightedThermalConductivity_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanics.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanics.doctree new file mode 100644 index 00000000000..2346a680798 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanics.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsConformingFractures.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsConformingFractures.doctree new file mode 100644 index 00000000000..34e260b3535 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsConformingFractures.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsConformingFracturesInitialization.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsConformingFracturesInitialization.doctree new file mode 100644 index 00000000000..b86e8570369 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsConformingFracturesInitialization.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsConformingFracturesInitialization_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsConformingFracturesInitialization_other.doctree new file mode 100644 index 00000000000..39d81cd4f42 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsConformingFracturesInitialization_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsConformingFractures_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsConformingFractures_other.doctree new file mode 100644 index 00000000000..711dc6910c8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsConformingFractures_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsInitialization.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsInitialization.doctree new file mode 100644 index 00000000000..39a1bef146d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsInitialization.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsInitialization_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsInitialization_other.doctree new file mode 100644 index 00000000000..320994d3cd6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsInitialization_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsReservoir.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsReservoir.doctree new file mode 100644 index 00000000000..e2c9053a5bc Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsReservoir.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsReservoir_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsReservoir_other.doctree new file mode 100644 index 00000000000..06ea5891de9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanicsReservoir_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanics_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanics_other.doctree new file mode 100644 index 00000000000..1413778d571 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultiphasePoromechanics_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Multiscale.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Multiscale.doctree new file mode 100644 index 00000000000..03330991ced Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Multiscale.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Multiscale_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Multiscale_other.doctree new file mode 100644 index 00000000000..41e1729b65e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Multiscale_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultivariableTableFunction.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultivariableTableFunction.doctree new file mode 100644 index 00000000000..38e428ec7a4 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultivariableTableFunction.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultivariableTableFunction_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultivariableTableFunction_other.doctree new file mode 100644 index 00000000000..c953314e8c0 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/MultivariableTableFunction_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/NonlinearSolverParameters.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/NonlinearSolverParameters.doctree new file mode 100644 index 00000000000..769aedf1d8a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/NonlinearSolverParameters.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/NonlinearSolverParameters_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/NonlinearSolverParameters_other.doctree new file mode 100644 index 00000000000..8e89d694d03 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/NonlinearSolverParameters_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/NullModel.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/NullModel.doctree new file mode 100644 index 00000000000..88cf440b35a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/NullModel.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/NullModel_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/NullModel_other.doctree new file mode 100644 index 00000000000..e269f3f9e27 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/NullModel_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/NumericalMethods.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/NumericalMethods.doctree new file mode 100644 index 00000000000..3b383cb6bd9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/NumericalMethods.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/NumericalMethods_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/NumericalMethods_other.doctree new file mode 100644 index 00000000000..add5df172b6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/NumericalMethods_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/OneWayCoupledFractureFlowContactMechanics.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/OneWayCoupledFractureFlowContactMechanics.doctree new file mode 100644 index 00000000000..05634a57455 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/OneWayCoupledFractureFlowContactMechanics.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/OneWayCoupledFractureFlowContactMechanics_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/OneWayCoupledFractureFlowContactMechanics_other.doctree new file mode 100644 index 00000000000..e6995d76645 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/OneWayCoupledFractureFlowContactMechanics_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Outputs.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Outputs.doctree new file mode 100644 index 00000000000..090f424c3d1 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Outputs.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Outputs_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Outputs_other.doctree new file mode 100644 index 00000000000..f146ccdbaa7 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Outputs_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PML.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PML.doctree new file mode 100644 index 00000000000..8672d373704 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PML.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PML_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PML_other.doctree new file mode 100644 index 00000000000..318c43b368a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PML_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PVTDriver.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PVTDriver.doctree new file mode 100644 index 00000000000..e680a24fb63 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PVTDriver.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PVTDriver_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PVTDriver_other.doctree new file mode 100644 index 00000000000..3fa795ab810 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PVTDriver_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PackCollection.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PackCollection.doctree new file mode 100644 index 00000000000..b9543d6c7f1 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PackCollection.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PackCollection_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PackCollection_other.doctree new file mode 100644 index 00000000000..76ae4ba8d92 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PackCollection_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParallelPlatesPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParallelPlatesPermeability.doctree new file mode 100644 index 00000000000..52b0e839421 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParallelPlatesPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParallelPlatesPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParallelPlatesPermeability_other.doctree new file mode 100644 index 00000000000..213f6d2c81f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParallelPlatesPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Parameter.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Parameter.doctree new file mode 100644 index 00000000000..7437920cb61 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Parameter.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Parameter_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Parameter_other.doctree new file mode 100644 index 00000000000..6aa85ccbe59 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Parameter_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Parameters.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Parameters.doctree new file mode 100644 index 00000000000..d938023c2b0 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Parameters.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Parameters_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Parameters_other.doctree new file mode 100644 index 00000000000..e2593ef7809 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Parameters_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleFluid.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleFluid.doctree new file mode 100644 index 00000000000..f11d08903f7 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleFluid.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleFluid_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleFluid_other.doctree new file mode 100644 index 00000000000..0b313d009bc Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleFluid_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleMesh.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleMesh.doctree new file mode 100644 index 00000000000..87c5e7733cb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleMesh.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleMesh_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleMesh_other.doctree new file mode 100644 index 00000000000..8ff9074daff Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleMesh_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleRegion.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleRegion.doctree new file mode 100644 index 00000000000..d70506186b9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleRegion.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleRegion_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleRegion_other.doctree new file mode 100644 index 00000000000..8f53744ea13 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleRegion_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleRegions.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleRegions.doctree new file mode 100644 index 00000000000..65263a51dff Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleRegions.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleRegions_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleRegions_other.doctree new file mode 100644 index 00000000000..1b00ca960a8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ParticleRegions_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PerfectlyPlastic.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PerfectlyPlastic.doctree new file mode 100644 index 00000000000..5b779dd4963 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PerfectlyPlastic.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PerfectlyPlastic_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PerfectlyPlastic_other.doctree new file mode 100644 index 00000000000..b860a76d3ae Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PerfectlyPlastic_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Perforation.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Perforation.doctree new file mode 100644 index 00000000000..b72351aa6bf Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Perforation.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Perforation_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Perforation_other.doctree new file mode 100644 index 00000000000..a0f34a109a7 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Perforation_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PeriodicEvent.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PeriodicEvent.doctree new file mode 100644 index 00000000000..7efe9a14579 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PeriodicEvent.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PeriodicEvent_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PeriodicEvent_other.doctree new file mode 100644 index 00000000000..ec987c78c8b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PeriodicEvent_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PhaseFieldDamageFEM.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PhaseFieldDamageFEM.doctree new file mode 100644 index 00000000000..083ef2ad6f2 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PhaseFieldDamageFEM.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PhaseFieldDamageFEM_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PhaseFieldDamageFEM_other.doctree new file mode 100644 index 00000000000..17a8e4b2160 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PhaseFieldDamageFEM_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PhaseFieldFracture.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PhaseFieldFracture.doctree new file mode 100644 index 00000000000..21d45febc44 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PhaseFieldFracture.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PhaseFieldFracture_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PhaseFieldFracture_other.doctree new file mode 100644 index 00000000000..0af6fc43001 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PhaseFieldFracture_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PhaseFieldPoromechanics.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PhaseFieldPoromechanics.doctree new file mode 100644 index 00000000000..d79a5b2f1e8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PhaseFieldPoromechanics.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PhaseFieldPoromechanics_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PhaseFieldPoromechanics_other.doctree new file mode 100644 index 00000000000..953b6e94374 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PhaseFieldPoromechanics_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDamageElasticIsotropic.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDamageElasticIsotropic.doctree new file mode 100644 index 00000000000..35f1913e8d5 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDamageElasticIsotropic.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDamageElasticIsotropic_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDamageElasticIsotropic_other.doctree new file mode 100644 index 00000000000..cbacaf84aba Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDamageElasticIsotropic_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDamageSpectralElasticIsotropic.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDamageSpectralElasticIsotropic.doctree new file mode 100644 index 00000000000..b2bc72d1b56 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDamageSpectralElasticIsotropic.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDamageSpectralElasticIsotropic_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDamageSpectralElasticIsotropic_other.doctree new file mode 100644 index 00000000000..7493a2bcf0c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDamageSpectralElasticIsotropic_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDamageVolDevElasticIsotropic.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDamageVolDevElasticIsotropic.doctree new file mode 100644 index 00000000000..c41544a5d39 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDamageVolDevElasticIsotropic.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDamageVolDevElasticIsotropic_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDamageVolDevElasticIsotropic_other.doctree new file mode 100644 index 00000000000..65ee9a93499 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDamageVolDevElasticIsotropic_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDelftEgg.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDelftEgg.doctree new file mode 100644 index 00000000000..f3f5e7306fd Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDelftEgg.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDelftEggCarmanKozenyPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDelftEggCarmanKozenyPermeability.doctree new file mode 100644 index 00000000000..039d25ad18a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDelftEggCarmanKozenyPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDelftEggCarmanKozenyPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDelftEggCarmanKozenyPermeability_other.doctree new file mode 100644 index 00000000000..1fc18cc8210 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDelftEggCarmanKozenyPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDelftEgg_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDelftEgg_other.doctree new file mode 100644 index 00000000000..d79f8cb9302 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDelftEgg_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDruckerPrager.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDruckerPrager.doctree new file mode 100644 index 00000000000..229b5fe77ca Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDruckerPrager.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDruckerPragerCarmanKozenyPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDruckerPragerCarmanKozenyPermeability.doctree new file mode 100644 index 00000000000..ecbc07005a8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDruckerPragerCarmanKozenyPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDruckerPragerCarmanKozenyPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDruckerPragerCarmanKozenyPermeability_other.doctree new file mode 100644 index 00000000000..c1bfbf50d0f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDruckerPragerCarmanKozenyPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDruckerPrager_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDruckerPrager_other.doctree new file mode 100644 index 00000000000..c9f27b55732 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousDruckerPrager_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticIsotropic.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticIsotropic.doctree new file mode 100644 index 00000000000..f9a33f96b49 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticIsotropic.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticIsotropicCarmanKozenyPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticIsotropicCarmanKozenyPermeability.doctree new file mode 100644 index 00000000000..3b329085814 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticIsotropicCarmanKozenyPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticIsotropicCarmanKozenyPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticIsotropicCarmanKozenyPermeability_other.doctree new file mode 100644 index 00000000000..dc83ab8cf16 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticIsotropicCarmanKozenyPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticIsotropic_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticIsotropic_other.doctree new file mode 100644 index 00000000000..5482da2c86e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticIsotropic_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticOrthotropic.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticOrthotropic.doctree new file mode 100644 index 00000000000..457a62aff50 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticOrthotropic.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticOrthotropicCarmanKozenyPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticOrthotropicCarmanKozenyPermeability.doctree new file mode 100644 index 00000000000..84048807b5e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticOrthotropicCarmanKozenyPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticOrthotropicCarmanKozenyPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticOrthotropicCarmanKozenyPermeability_other.doctree new file mode 100644 index 00000000000..3273384823f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticOrthotropicCarmanKozenyPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticOrthotropic_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticOrthotropic_other.doctree new file mode 100644 index 00000000000..33d7798248e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticOrthotropic_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticTransverseIsotropic.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticTransverseIsotropic.doctree new file mode 100644 index 00000000000..d1c31865525 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticTransverseIsotropic.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticTransverseIsotropicCarmanKozenyPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticTransverseIsotropicCarmanKozenyPermeability.doctree new file mode 100644 index 00000000000..5eacf266f56 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticTransverseIsotropicCarmanKozenyPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticTransverseIsotropicCarmanKozenyPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticTransverseIsotropicCarmanKozenyPermeability_other.doctree new file mode 100644 index 00000000000..60fd09bb170 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticTransverseIsotropicCarmanKozenyPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticTransverseIsotropic_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticTransverseIsotropic_other.doctree new file mode 100644 index 00000000000..e96c04da4d2 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousElasticTransverseIsotropic_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousExtendedDruckerPrager.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousExtendedDruckerPrager.doctree new file mode 100644 index 00000000000..c82bbe0d729 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousExtendedDruckerPrager.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousExtendedDruckerPragerCarmanKozenyPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousExtendedDruckerPragerCarmanKozenyPermeability.doctree new file mode 100644 index 00000000000..b6577836e3f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousExtendedDruckerPragerCarmanKozenyPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousExtendedDruckerPragerCarmanKozenyPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousExtendedDruckerPragerCarmanKozenyPermeability_other.doctree new file mode 100644 index 00000000000..d7dc169a7e3 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousExtendedDruckerPragerCarmanKozenyPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousExtendedDruckerPrager_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousExtendedDruckerPrager_other.doctree new file mode 100644 index 00000000000..8a94837b460 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousExtendedDruckerPrager_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousModifiedCamClay.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousModifiedCamClay.doctree new file mode 100644 index 00000000000..7fee5539ab1 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousModifiedCamClay.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousModifiedCamClayCarmanKozenyPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousModifiedCamClayCarmanKozenyPermeability.doctree new file mode 100644 index 00000000000..43883978bdf Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousModifiedCamClayCarmanKozenyPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousModifiedCamClayCarmanKozenyPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousModifiedCamClayCarmanKozenyPermeability_other.doctree new file mode 100644 index 00000000000..7cad172708e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousModifiedCamClayCarmanKozenyPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousModifiedCamClay_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousModifiedCamClay_other.doctree new file mode 100644 index 00000000000..725a488d94e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousModifiedCamClay_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoDruckerPrager.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoDruckerPrager.doctree new file mode 100644 index 00000000000..624ec3ca367 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoDruckerPrager.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoDruckerPragerCarmanKozenyPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoDruckerPragerCarmanKozenyPermeability.doctree new file mode 100644 index 00000000000..d4095005366 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoDruckerPragerCarmanKozenyPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoDruckerPragerCarmanKozenyPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoDruckerPragerCarmanKozenyPermeability_other.doctree new file mode 100644 index 00000000000..717619bd2d5 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoDruckerPragerCarmanKozenyPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoDruckerPrager_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoDruckerPrager_other.doctree new file mode 100644 index 00000000000..19cf71c576d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoDruckerPrager_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoExtendedDruckerPrager.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoExtendedDruckerPrager.doctree new file mode 100644 index 00000000000..33be6a4eecf Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoExtendedDruckerPrager.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoExtendedDruckerPragerCarmanKozenyPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoExtendedDruckerPragerCarmanKozenyPermeability.doctree new file mode 100644 index 00000000000..5d171dff973 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoExtendedDruckerPragerCarmanKozenyPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoExtendedDruckerPragerCarmanKozenyPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoExtendedDruckerPragerCarmanKozenyPermeability_other.doctree new file mode 100644 index 00000000000..32734b2c9e4 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoExtendedDruckerPragerCarmanKozenyPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoExtendedDruckerPrager_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoExtendedDruckerPrager_other.doctree new file mode 100644 index 00000000000..944a0fdf8f6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoExtendedDruckerPrager_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoModifiedCamClay.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoModifiedCamClay.doctree new file mode 100644 index 00000000000..530a6f1d81b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoModifiedCamClay.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoModifiedCamClayCarmanKozenyPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoModifiedCamClayCarmanKozenyPermeability.doctree new file mode 100644 index 00000000000..fb18d0bac3e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoModifiedCamClayCarmanKozenyPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoModifiedCamClayCarmanKozenyPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoModifiedCamClayCarmanKozenyPermeability_other.doctree new file mode 100644 index 00000000000..76987fe8015 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoModifiedCamClayCarmanKozenyPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoModifiedCamClay_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoModifiedCamClay_other.doctree new file mode 100644 index 00000000000..4abbc22bc3f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PorousViscoModifiedCamClay_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PressurePermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PressurePermeability.doctree new file mode 100644 index 00000000000..9d0526ad395 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PressurePermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PressurePermeabilityBartonBandis.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PressurePermeabilityBartonBandis.doctree new file mode 100644 index 00000000000..ad463e55368 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PressurePermeabilityBartonBandis.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PressurePermeabilityBartonBandis_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PressurePermeabilityBartonBandis_other.doctree new file mode 100644 index 00000000000..eb6d714094c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PressurePermeabilityBartonBandis_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PressurePermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PressurePermeability_other.doctree new file mode 100644 index 00000000000..78996035413 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PressurePermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PressurePorosity.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PressurePorosity.doctree new file mode 100644 index 00000000000..82a138b2e93 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PressurePorosity.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PressurePorosity_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PressurePorosity_other.doctree new file mode 100644 index 00000000000..c9204225f0e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/PressurePorosity_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Problem.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Problem.doctree new file mode 100644 index 00000000000..de47ce57239 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Problem.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Problem_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Problem_other.doctree new file mode 100644 index 00000000000..7e0e448ccff Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Problem_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantPermeability.doctree new file mode 100644 index 00000000000..51fcf4597ca Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantPermeability_other.doctree new file mode 100644 index 00000000000..59f8f1492bf Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantPorosity.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantPorosity.doctree new file mode 100644 index 00000000000..42733200286 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantPorosity.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantPorosity_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantPorosity_other.doctree new file mode 100644 index 00000000000..5c1bcd0ac2f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantPorosity_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantSlurryFluid.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantSlurryFluid.doctree new file mode 100644 index 00000000000..74a8ced661f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantSlurryFluid.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantSlurryFluid_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantSlurryFluid_other.doctree new file mode 100644 index 00000000000..7ef38a5e029 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantSlurryFluid_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantSolidProppantPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantSolidProppantPermeability.doctree new file mode 100644 index 00000000000..f566ca52ebf Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantSolidProppantPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantSolidProppantPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantSolidProppantPermeability_other.doctree new file mode 100644 index 00000000000..35d681a4c80 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantSolidProppantPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantTransport.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantTransport.doctree new file mode 100644 index 00000000000..45afa5a7804 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantTransport.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantTransport_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantTransport_other.doctree new file mode 100644 index 00000000000..aa20759f93e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ProppantTransport_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Python.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Python.doctree new file mode 100644 index 00000000000..4901768b07c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Python.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Python_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Python_other.doctree new file mode 100644 index 00000000000..61213981203 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Python_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/RateAndStateFrictionAgingLaw.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/RateAndStateFrictionAgingLaw.doctree new file mode 100644 index 00000000000..180e008b2d9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/RateAndStateFrictionAgingLaw.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/RateAndStateFrictionAgingLaw_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/RateAndStateFrictionAgingLaw_other.doctree new file mode 100644 index 00000000000..0c4d00e53a9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/RateAndStateFrictionAgingLaw_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/RateAndStateFrictionSlipLaw.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/RateAndStateFrictionSlipLaw.doctree new file mode 100644 index 00000000000..f7baec9a0a4 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/RateAndStateFrictionSlipLaw.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/RateAndStateFrictionSlipLaw_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/RateAndStateFrictionSlipLaw_other.doctree new file mode 100644 index 00000000000..edc94bb5849 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/RateAndStateFrictionSlipLaw_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveBrine.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveBrine.doctree new file mode 100644 index 00000000000..345dfc9a7c9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveBrine.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveBrineThermal.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveBrineThermal.doctree new file mode 100644 index 00000000000..9839c7479f4 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveBrineThermal.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveBrineThermal_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveBrineThermal_other.doctree new file mode 100644 index 00000000000..94224cc3944 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveBrineThermal_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveBrine_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveBrine_other.doctree new file mode 100644 index 00000000000..5dbf2c27676 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveBrine_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveCompositionalMultiphaseOBL.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveCompositionalMultiphaseOBL.doctree new file mode 100644 index 00000000000..2fa61ebce6a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveCompositionalMultiphaseOBL.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveCompositionalMultiphaseOBL_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveCompositionalMultiphaseOBL_other.doctree new file mode 100644 index 00000000000..dd2c211bb39 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveCompositionalMultiphaseOBL_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveFluidDriver.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveFluidDriver.doctree new file mode 100644 index 00000000000..4142d86f6c8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveFluidDriver.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveFluidDriver_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveFluidDriver_other.doctree new file mode 100644 index 00000000000..a9fda1d0ca5 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ReactiveFluidDriver_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Rectangle.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Rectangle.doctree new file mode 100644 index 00000000000..072a0892ad0 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Rectangle.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Rectangle_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Rectangle_other.doctree new file mode 100644 index 00000000000..2678fe750dc Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Rectangle_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Region.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Region.doctree new file mode 100644 index 00000000000..ffe9d85f228 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Region.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Region_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Region_other.doctree new file mode 100644 index 00000000000..c649f5917ff Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Region_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/RelpermDriver.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/RelpermDriver.doctree new file mode 100644 index 00000000000..4e1f0d006f8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/RelpermDriver.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/RelpermDriver_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/RelpermDriver_other.doctree new file mode 100644 index 00000000000..7e71a2683b8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/RelpermDriver_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Restart.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Restart.doctree new file mode 100644 index 00000000000..9e42247e9b5 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Restart.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Restart_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Restart_other.doctree new file mode 100644 index 00000000000..2b10f8531b6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Restart_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Run.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Run.doctree new file mode 100644 index 00000000000..7658002c5b3 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Run.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Run_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Run_other.doctree new file mode 100644 index 00000000000..c87f93249af Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Run_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SeismicityRate.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SeismicityRate.doctree new file mode 100644 index 00000000000..5580182bc75 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SeismicityRate.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SeismicityRate_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SeismicityRate_other.doctree new file mode 100644 index 00000000000..a498a85e997 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SeismicityRate_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Silo.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Silo.doctree new file mode 100644 index 00000000000..b0ec265a792 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Silo.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Silo_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Silo_other.doctree new file mode 100644 index 00000000000..d7e0fe36089 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Silo_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseFVM.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseFVM.doctree new file mode 100644 index 00000000000..96af381c996 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseFVM.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseFVM_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseFVM_other.doctree new file mode 100644 index 00000000000..6de2a04bc54 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseFVM_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseHybridFVM.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseHybridFVM.doctree new file mode 100644 index 00000000000..98e5987eb3b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseHybridFVM.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseHybridFVM_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseHybridFVM_other.doctree new file mode 100644 index 00000000000..fcfcdd565a0 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseHybridFVM_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanics.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanics.doctree new file mode 100644 index 00000000000..41b17da1277 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanics.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsConformingFractures.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsConformingFractures.doctree new file mode 100644 index 00000000000..ad5cd7d922f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsConformingFractures.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsConformingFracturesInitialization.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsConformingFracturesInitialization.doctree new file mode 100644 index 00000000000..6411c8c2e57 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsConformingFracturesInitialization.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsConformingFracturesInitialization_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsConformingFracturesInitialization_other.doctree new file mode 100644 index 00000000000..40ce789a0d7 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsConformingFracturesInitialization_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsConformingFracturesReservoir.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsConformingFracturesReservoir.doctree new file mode 100644 index 00000000000..9cbd2333fb4 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsConformingFracturesReservoir.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsConformingFracturesReservoir_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsConformingFracturesReservoir_other.doctree new file mode 100644 index 00000000000..2ec2ba17f3f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsConformingFracturesReservoir_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsConformingFractures_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsConformingFractures_other.doctree new file mode 100644 index 00000000000..8a95517fb81 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsConformingFractures_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsEmbeddedFractures.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsEmbeddedFractures.doctree new file mode 100644 index 00000000000..1ad05f734bb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsEmbeddedFractures.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsEmbeddedFracturesInitialization.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsEmbeddedFracturesInitialization.doctree new file mode 100644 index 00000000000..c4ee985db4b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsEmbeddedFracturesInitialization.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsEmbeddedFracturesInitialization_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsEmbeddedFracturesInitialization_other.doctree new file mode 100644 index 00000000000..e330de1643c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsEmbeddedFracturesInitialization_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsEmbeddedFractures_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsEmbeddedFractures_other.doctree new file mode 100644 index 00000000000..4b0e417f147 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsEmbeddedFractures_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsInitialization.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsInitialization.doctree new file mode 100644 index 00000000000..aa517b5c5d6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsInitialization.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsInitialization_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsInitialization_other.doctree new file mode 100644 index 00000000000..b0ccf582b7a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsInitialization_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsReservoir.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsReservoir.doctree new file mode 100644 index 00000000000..32c0bda2490 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsReservoir.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsReservoir_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsReservoir_other.doctree new file mode 100644 index 00000000000..2cabe761647 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanicsReservoir_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanics_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanics_other.doctree new file mode 100644 index 00000000000..8b9d077b52e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhasePoromechanics_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseProppantFVM.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseProppantFVM.doctree new file mode 100644 index 00000000000..24c53d0d815 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseProppantFVM.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseProppantFVM_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseProppantFVM_other.doctree new file mode 100644 index 00000000000..fac9a0a3cec Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseProppantFVM_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoir.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoir.doctree new file mode 100644 index 00000000000..2988e1911dc Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoir.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanics.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanics.doctree new file mode 100644 index 00000000000..550f392e0d6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanics.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanicsConformingFractures.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanicsConformingFractures.doctree new file mode 100644 index 00000000000..2dbe3ec32a2 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanicsConformingFractures.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanicsConformingFracturesInitialization.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanicsConformingFracturesInitialization.doctree new file mode 100644 index 00000000000..03095693d90 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanicsConformingFracturesInitialization.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanicsConformingFracturesInitialization_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanicsConformingFracturesInitialization_other.doctree new file mode 100644 index 00000000000..3ca50ec53e1 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanicsConformingFracturesInitialization_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanicsConformingFractures_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanicsConformingFractures_other.doctree new file mode 100644 index 00000000000..48e3cd79539 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanicsConformingFractures_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanicsInitialization.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanicsInitialization.doctree new file mode 100644 index 00000000000..5adb1834cb5 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanicsInitialization.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanicsInitialization_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanicsInitialization_other.doctree new file mode 100644 index 00000000000..8245d5bf7dd Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanicsInitialization_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanics_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanics_other.doctree new file mode 100644 index 00000000000..bd93ca74d4c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoirPoromechanics_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoir_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoir_other.doctree new file mode 100644 index 00000000000..66b3314e622 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseReservoir_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseStatistics.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseStatistics.doctree new file mode 100644 index 00000000000..a9163f75c4e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseStatistics.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseStatistics_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseStatistics_other.doctree new file mode 100644 index 00000000000..1f90e829c97 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseStatistics_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseStressPathDrivenFVM.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseStressPathDrivenFVM.doctree new file mode 100644 index 00000000000..d4d776f3d73 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseStressPathDrivenFVM.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseStressPathDrivenFVM_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseStressPathDrivenFVM_other.doctree new file mode 100644 index 00000000000..c3272c0c605 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseStressPathDrivenFVM_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseThermalConductivity.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseThermalConductivity.doctree new file mode 100644 index 00000000000..f8742a6b331 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseThermalConductivity.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseThermalConductivity_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseThermalConductivity_other.doctree new file mode 100644 index 00000000000..4e2679c8baf Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseThermalConductivity_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseWell.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseWell.doctree new file mode 100644 index 00000000000..4b7f6aa7a58 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseWell.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseWell_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseWell_other.doctree new file mode 100644 index 00000000000..64f286d7159 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SinglePhaseWell_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SlipDependentPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SlipDependentPermeability.doctree new file mode 100644 index 00000000000..91e65ac9f46 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SlipDependentPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SlipDependentPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SlipDependentPermeability_other.doctree new file mode 100644 index 00000000000..9b44a1f6859 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SlipDependentPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Smoother.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Smoother.doctree new file mode 100644 index 00000000000..bb1527188c6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Smoother.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Smoother_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Smoother_other.doctree new file mode 100644 index 00000000000..421080aad62 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Smoother_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidInternalEnergy.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidInternalEnergy.doctree new file mode 100644 index 00000000000..10ae66b1b29 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidInternalEnergy.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidInternalEnergy_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidInternalEnergy_other.doctree new file mode 100644 index 00000000000..15e27e28be6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidInternalEnergy_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsAugmentedLagrangianContact.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsAugmentedLagrangianContact.doctree new file mode 100644 index 00000000000..7408aa29645 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsAugmentedLagrangianContact.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsAugmentedLagrangianContact_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsAugmentedLagrangianContact_other.doctree new file mode 100644 index 00000000000..e90c4c9b28d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsAugmentedLagrangianContact_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsEmbeddedFractures.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsEmbeddedFractures.doctree new file mode 100644 index 00000000000..b6a3b1d8477 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsEmbeddedFractures.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsEmbeddedFractures_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsEmbeddedFractures_other.doctree new file mode 100644 index 00000000000..69ab5cba905 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsEmbeddedFractures_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsLagrangeContact.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsLagrangeContact.doctree new file mode 100644 index 00000000000..86aa2112063 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsLagrangeContact.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsLagrangeContactBubbleStab.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsLagrangeContactBubbleStab.doctree new file mode 100644 index 00000000000..a4b37a4a0bc Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsLagrangeContactBubbleStab.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsLagrangeContactBubbleStab_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsLagrangeContactBubbleStab_other.doctree new file mode 100644 index 00000000000..4d4776e4abb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsLagrangeContactBubbleStab_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsLagrangeContact_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsLagrangeContact_other.doctree new file mode 100644 index 00000000000..9dbe4f088dd Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsLagrangeContact_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsLagrangianFEM.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsLagrangianFEM.doctree new file mode 100644 index 00000000000..6632b630ba1 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsLagrangianFEM.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsLagrangianFEM_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsLagrangianFEM_other.doctree new file mode 100644 index 00000000000..ed1926985e9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsLagrangianFEM_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsStateReset.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsStateReset.doctree new file mode 100644 index 00000000000..1af03d063d0 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsStateReset.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsStateReset_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsStateReset_other.doctree new file mode 100644 index 00000000000..2dd5ba04694 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsStateReset_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsStatistics.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsStatistics.doctree new file mode 100644 index 00000000000..3f1afde8fbc Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsStatistics.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsStatistics_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsStatistics_other.doctree new file mode 100644 index 00000000000..f570fbb2e21 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanicsStatistics_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanics_MPM.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanics_MPM.doctree new file mode 100644 index 00000000000..ddeff7690e4 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanics_MPM.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanics_MPM_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanics_MPM_other.doctree new file mode 100644 index 00000000000..a0b751f1a5a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolidMechanics_MPM_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SoloEvent.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SoloEvent.doctree new file mode 100644 index 00000000000..14bdfd297b4 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SoloEvent.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SoloEvent_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SoloEvent_other.doctree new file mode 100644 index 00000000000..64f20e854ab Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SoloEvent_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolverStatistics_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolverStatistics_other.doctree new file mode 100644 index 00000000000..655f591f285 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SolverStatistics_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Solvers.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Solvers.doctree new file mode 100644 index 00000000000..c2c494fff7a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Solvers.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Solvers_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Solvers_other.doctree new file mode 100644 index 00000000000..af8276fe4de Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Solvers_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SourceFlux.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SourceFlux.doctree new file mode 100644 index 00000000000..529a0cbe483 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SourceFlux.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SourceFluxStatistics.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SourceFluxStatistics.doctree new file mode 100644 index 00000000000..070d473813d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SourceFluxStatistics.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SourceFluxStatistics_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SourceFluxStatistics_other.doctree new file mode 100644 index 00000000000..811858e2528 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SourceFluxStatistics_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SourceFlux_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SourceFlux_other.doctree new file mode 100644 index 00000000000..8d0f1ff779f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SourceFlux_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Structured.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Structured.doctree new file mode 100644 index 00000000000..37d9ee2bfd9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Structured.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Structured_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Structured_other.doctree new file mode 100644 index 00000000000..bf579406254 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Structured_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SurfaceElementRegion.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SurfaceElementRegion.doctree new file mode 100644 index 00000000000..0bf5c480429 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SurfaceElementRegion.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SurfaceElementRegion_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SurfaceElementRegion_other.doctree new file mode 100644 index 00000000000..6319dfce63a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SurfaceElementRegion_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SurfaceGenerator.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SurfaceGenerator.doctree new file mode 100644 index 00000000000..f597fd80e90 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SurfaceGenerator.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SurfaceGenerator_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SurfaceGenerator_other.doctree new file mode 100644 index 00000000000..35f65f04dfb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/SurfaceGenerator_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableCapillaryPressure.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableCapillaryPressure.doctree new file mode 100644 index 00000000000..f32141755c3 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableCapillaryPressure.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableCapillaryPressure_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableCapillaryPressure_other.doctree new file mode 100644 index 00000000000..b269ee59fe8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableCapillaryPressure_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableFunction.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableFunction.doctree new file mode 100644 index 00000000000..757f5fb3242 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableFunction.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableFunction_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableFunction_other.doctree new file mode 100644 index 00000000000..a5f36037b79 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableFunction_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableRelativePermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableRelativePermeability.doctree new file mode 100644 index 00000000000..5f4f805bcac Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableRelativePermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableRelativePermeabilityHysteresis.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableRelativePermeabilityHysteresis.doctree new file mode 100644 index 00000000000..e070eb6a150 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableRelativePermeabilityHysteresis.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableRelativePermeabilityHysteresis_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableRelativePermeabilityHysteresis_other.doctree new file mode 100644 index 00000000000..2a274df2768 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableRelativePermeabilityHysteresis_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableRelativePermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableRelativePermeability_other.doctree new file mode 100644 index 00000000000..48b99f90fdc Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TableRelativePermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Tasks.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Tasks.doctree new file mode 100644 index 00000000000..868ba226ec0 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Tasks.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Tasks_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Tasks_other.doctree new file mode 100644 index 00000000000..10536b449d2 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Tasks_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ThermalCompressibleSinglePhaseFluid.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ThermalCompressibleSinglePhaseFluid.doctree new file mode 100644 index 00000000000..71519b0feb1 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ThermalCompressibleSinglePhaseFluid.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ThermalCompressibleSinglePhaseFluid_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ThermalCompressibleSinglePhaseFluid_other.doctree new file mode 100644 index 00000000000..b5d7e310b5e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ThermalCompressibleSinglePhaseFluid_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ThickPlane.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ThickPlane.doctree new file mode 100644 index 00000000000..58133a6ef96 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ThickPlane.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ThickPlane_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ThickPlane_other.doctree new file mode 100644 index 00000000000..054c8f9a99c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ThickPlane_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TimeHistory.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TimeHistory.doctree new file mode 100644 index 00000000000..c63f8fc9c2c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TimeHistory.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TimeHistory_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TimeHistory_other.doctree new file mode 100644 index 00000000000..ec698c8eddb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TimeHistory_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Traction.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Traction.doctree new file mode 100644 index 00000000000..9afbe8d63fb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Traction.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Traction_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Traction_other.doctree new file mode 100644 index 00000000000..7993da62f88 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/Traction_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TriaxialDriver.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TriaxialDriver.doctree new file mode 100644 index 00000000000..76c644aa50d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TriaxialDriver.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TriaxialDriver_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TriaxialDriver_other.doctree new file mode 100644 index 00000000000..829ab92855f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TriaxialDriver_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TwoPhaseImmiscibleFluid.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TwoPhaseImmiscibleFluid.doctree new file mode 100644 index 00000000000..c5f5aeab7a6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TwoPhaseImmiscibleFluid.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TwoPhaseImmiscibleFluid_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TwoPhaseImmiscibleFluid_other.doctree new file mode 100644 index 00000000000..9aa1be803d2 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TwoPhaseImmiscibleFluid_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TwoPointFluxApproximation.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TwoPointFluxApproximation.doctree new file mode 100644 index 00000000000..643ecc60653 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TwoPointFluxApproximation.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TwoPointFluxApproximation_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TwoPointFluxApproximation_other.doctree new file mode 100644 index 00000000000..b3b66378749 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/TwoPointFluxApproximation_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTK.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTK.doctree new file mode 100644 index 00000000000..7f61b008e4e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTK.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTKHierarchicalDataSource.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTKHierarchicalDataSource.doctree new file mode 100644 index 00000000000..729395ea058 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTKHierarchicalDataSource.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTKHierarchicalDataSource_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTKHierarchicalDataSource_other.doctree new file mode 100644 index 00000000000..f37fe2df79c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTKHierarchicalDataSource_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTKMesh.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTKMesh.doctree new file mode 100644 index 00000000000..7dd59969c93 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTKMesh.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTKMesh_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTKMesh_other.doctree new file mode 100644 index 00000000000..28bdd2861ec Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTKMesh_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTKWell.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTKWell.doctree new file mode 100644 index 00000000000..2b366d16f1e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTKWell.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTKWell_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTKWell_other.doctree new file mode 100644 index 00000000000..b430a4d8dc7 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTKWell_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTK_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTK_other.doctree new file mode 100644 index 00000000000..12b0d0301d4 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VTK_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VanGenuchtenBakerRelativePermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VanGenuchtenBakerRelativePermeability.doctree new file mode 100644 index 00000000000..c134f5e2386 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VanGenuchtenBakerRelativePermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VanGenuchtenBakerRelativePermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VanGenuchtenBakerRelativePermeability_other.doctree new file mode 100644 index 00000000000..a7e89774a60 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VanGenuchtenBakerRelativePermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VanGenuchtenCapillaryPressure.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VanGenuchtenCapillaryPressure.doctree new file mode 100644 index 00000000000..de3332b2761 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VanGenuchtenCapillaryPressure.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VanGenuchtenCapillaryPressure_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VanGenuchtenCapillaryPressure_other.doctree new file mode 100644 index 00000000000..08efe91f061 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VanGenuchtenCapillaryPressure_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VanGenuchtenStone2RelativePermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VanGenuchtenStone2RelativePermeability.doctree new file mode 100644 index 00000000000..bfc7f9aaebb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VanGenuchtenStone2RelativePermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VanGenuchtenStone2RelativePermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VanGenuchtenStone2RelativePermeability_other.doctree new file mode 100644 index 00000000000..89e1b0f9d00 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/VanGenuchtenStone2RelativePermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ViscoDruckerPrager.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ViscoDruckerPrager.doctree new file mode 100644 index 00000000000..cba97f27a90 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ViscoDruckerPrager.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ViscoDruckerPrager_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ViscoDruckerPrager_other.doctree new file mode 100644 index 00000000000..d1d6f9e0d5c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ViscoDruckerPrager_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ViscoExtendedDruckerPrager.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ViscoExtendedDruckerPrager.doctree new file mode 100644 index 00000000000..81ce613536a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ViscoExtendedDruckerPrager.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ViscoExtendedDruckerPrager_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ViscoExtendedDruckerPrager_other.doctree new file mode 100644 index 00000000000..4dd95d013b8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ViscoExtendedDruckerPrager_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ViscoModifiedCamClay.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ViscoModifiedCamClay.doctree new file mode 100644 index 00000000000..26afc296fe1 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ViscoModifiedCamClay.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ViscoModifiedCamClay_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ViscoModifiedCamClay_other.doctree new file mode 100644 index 00000000000..2995803fea2 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/ViscoModifiedCamClay_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WellControls.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WellControls.doctree new file mode 100644 index 00000000000..0ea1e6cdc3a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WellControls.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WellControls_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WellControls_other.doctree new file mode 100644 index 00000000000..6a8182fd836 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WellControls_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WellElementRegion.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WellElementRegion.doctree new file mode 100644 index 00000000000..74e07d13c53 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WellElementRegion.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WellElementRegionUniqueSubRegion_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WellElementRegionUniqueSubRegion_other.doctree new file mode 100644 index 00000000000..73e27de1fef Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WellElementRegionUniqueSubRegion_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WellElementRegion_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WellElementRegion_other.doctree new file mode 100644 index 00000000000..bd94d09ff00 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WellElementRegion_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WillisRichardsPermeability.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WillisRichardsPermeability.doctree new file mode 100644 index 00000000000..d51b5eacefe Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WillisRichardsPermeability.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WillisRichardsPermeability_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WillisRichardsPermeability_other.doctree new file mode 100644 index 00000000000..f34084e7285 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/WillisRichardsPermeability_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/commandLine_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/commandLine_other.doctree new file mode 100644 index 00000000000..9f8727c0c9d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/commandLine_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/crusher.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/crusher.doctree new file mode 100644 index 00000000000..d0a67122d00 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/crusher.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/crusher_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/crusher_other.doctree new file mode 100644 index 00000000000..10a70ce1203 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/crusher_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/domain_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/domain_other.doctree new file mode 100644 index 00000000000..c985c94e64a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/domain_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/edgeManager_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/edgeManager_other.doctree new file mode 100644 index 00000000000..0a5fb9a2682 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/edgeManager_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/elementRegionsGroup_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/elementRegionsGroup_other.doctree new file mode 100644 index 00000000000..e7d20f4b00e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/elementRegionsGroup_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/elementSubRegions_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/elementSubRegions_other.doctree new file mode 100644 index 00000000000..041e58331b9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/elementSubRegions_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/embeddedSurfacesEdgeManager_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/embeddedSurfacesEdgeManager_other.doctree new file mode 100644 index 00000000000..4d611d2f55d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/embeddedSurfacesEdgeManager_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/embeddedSurfacesNodeManager_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/embeddedSurfacesNodeManager_other.doctree new file mode 100644 index 00000000000..9285b01ff99 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/embeddedSurfacesNodeManager_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/faceManager_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/faceManager_other.doctree new file mode 100644 index 00000000000..cf086fba130 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/faceManager_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/lassen.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/lassen.doctree new file mode 100644 index 00000000000..11fac2d1191 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/lassen.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/lassen_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/lassen_other.doctree new file mode 100644 index 00000000000..d93bc8a68a6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/lassen_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/meshLevels_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/meshLevels_other.doctree new file mode 100644 index 00000000000..84be64db7c8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/meshLevels_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/neighborData_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/neighborData_other.doctree new file mode 100644 index 00000000000..dbeebe7e8fd Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/neighborData_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/nodeManager_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/nodeManager_other.doctree new file mode 100644 index 00000000000..1f5a2dd1c69 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/nodeManager_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/particleRegionsGroup_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/particleRegionsGroup_other.doctree new file mode 100644 index 00000000000..4879f401d20 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/particleRegionsGroup_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/particleSubRegions_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/particleSubRegions_other.doctree new file mode 100644 index 00000000000..6e8fec05c52 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/particleSubRegions_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/quartz.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/quartz.doctree new file mode 100644 index 00000000000..7e1af9435a6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/quartz.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/quartz_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/quartz_other.doctree new file mode 100644 index 00000000000..e909d5d642d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/quartz_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/sets_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/sets_other.doctree new file mode 100644 index 00000000000..2ef3784da7a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/sets_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/wellElementSubRegion_other.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/wellElementSubRegion_other.doctree new file mode 100644 index 00000000000..c3b9ed4847f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/datastructure/wellElementSubRegion_other.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/Benchmarks.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/Benchmarks.doctree new file mode 100644 index 00000000000..2ba427dfeea Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/Benchmarks.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/Caliper.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/Caliper.doctree new file mode 100644 index 00000000000..98cfd4a2f10 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/Caliper.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/CodeStyle.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/CodeStyle.doctree new file mode 100644 index 00000000000..b85fe0e5440 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/CodeStyle.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/Doxygen.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/Doxygen.doctree new file mode 100644 index 00000000000..8c6c464a014 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/Doxygen.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/GitWorkflow.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/GitWorkflow.doctree new file mode 100644 index 00000000000..601ff7e604a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/GitWorkflow.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/InputFiles.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/InputFiles.doctree new file mode 100644 index 00000000000..cae184e26fc Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/InputFiles.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/InstallWin.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/InstallWin.doctree new file mode 100644 index 00000000000..6ca8b747091 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/InstallWin.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/IntegratedTests.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/IntegratedTests.doctree new file mode 100644 index 00000000000..dbb9a4fb04b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/IntegratedTests.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/Sphinx.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/Sphinx.doctree new file mode 100644 index 00000000000..8df9fd7a20d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/Sphinx.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/UnitTests.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/UnitTests.doctree new file mode 100644 index 00000000000..062045c1d47 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/UnitTests.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/UsingDocker.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/UsingDocker.doctree new file mode 100644 index 00000000000..f909a092975 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/UsingDocker.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/WorkInteractivelyOnCI.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/WorkInteractivelyOnCI.doctree new file mode 100644 index 00000000000..debc8b501d3 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/WorkInteractivelyOnCI.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/index_contributing.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/index_contributing.doctree new file mode 100644 index 00000000000..80b3d97ce32 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Contributing/index_contributing.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Index.doctree new file mode 100644 index 00000000000..16f8a7c2990 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/Index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/KeyComponents/AddingNewSolver.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/KeyComponents/AddingNewSolver.doctree new file mode 100644 index 00000000000..e775c65e5d6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/KeyComponents/AddingNewSolver.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/KeyComponents/LvArray.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/KeyComponents/LvArray.doctree new file mode 100644 index 00000000000..65adb57c25c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/KeyComponents/LvArray.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/KeyComponents/WorkingWithData.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/KeyComponents/WorkingWithData.doctree new file mode 100644 index 00000000000..e2ac00520af Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/KeyComponents/WorkingWithData.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/KeyComponents/XML.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/KeyComponents/XML.doctree new file mode 100644 index 00000000000..3fb40a3888a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/KeyComponents/XML.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/KeyComponents/index_KeyComponents.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/KeyComponents/index_KeyComponents.doctree new file mode 100644 index 00000000000..d9ea2233fb9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/developerGuide/KeyComponents/index_KeyComponents.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/tutorials/Index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/tutorials/Index.doctree new file mode 100644 index 00000000000..1c8d70068d3 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/tutorials/Index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/tutorials/step01/Tutorial.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/tutorials/step01/Tutorial.doctree new file mode 100644 index 00000000000..c3aa118ff3c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/tutorials/step01/Tutorial.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/tutorials/step02/Tutorial.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/tutorials/step02/Tutorial.doctree new file mode 100644 index 00000000000..33f7a4217cf Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/tutorials/step02/Tutorial.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/tutorials/step03/Tutorial.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/tutorials/step03/Tutorial.doctree new file mode 100644 index 00000000000..3291b5d5b6b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/tutorials/step03/Tutorial.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/tutorials/step04/Tutorial.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/tutorials/step04/Tutorial.doctree new file mode 100644 index 00000000000..1e3ec7bfc55 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/tutorials/step04/Tutorial.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/userGuide/Index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/userGuide/Index.doctree new file mode 100644 index 00000000000..10317e7213f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/docs/sphinx/userGuide/Index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/environment.pickle b/src/imgmath_latex=/usr/bin/tex/doctrees/environment.pickle new file mode 100644 index 00000000000..98830e1eb89 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/environment.pickle differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/index.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/index.doctree new file mode 100644 index 00000000000..718b946eff6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/index.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/doctrees/pygeosx/pygeosx_documentation.doctree b/src/imgmath_latex=/usr/bin/tex/doctrees/pygeosx/pygeosx_documentation.doctree new file mode 100644 index 00000000000..de515b2db7c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/doctrees/pygeosx/pygeosx_documentation.doctree differ diff --git a/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/include/plotAllKrPc.hires.png b/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/include/plotAllKrPc.hires.png new file mode 100644 index 00000000000..dcda0c2d1c1 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/include/plotAllKrPc.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/include/plotAllKrPc.pdf b/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/include/plotAllKrPc.pdf new file mode 100644 index 00000000000..b162181c438 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/include/plotAllKrPc.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/include/plotAllKrPc.png b/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/include/plotAllKrPc.png new file mode 100644 index 00000000000..b7ed8b0e1bc Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/include/plotAllKrPc.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/include/plotAllKrPc.py b/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/include/plotAllKrPc.py new file mode 100644 index 00000000000..b2df22c07f3 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/include/plotAllKrPc.py @@ -0,0 +1,50 @@ +import matplotlib.pyplot as plt +import numpy as np +import argparse + +def main(): + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--outputDir', help='Path to output directory', default='..') + + # Parse the command-line arguments + args = parser.parse_args() + + # File path + base = args.outputDir + + fsize = 30 + msize = 12 + lw = 4 + fig, ax = plt.subplots(1, 2, figsize=(32, 18)) + cmap = plt.get_cmap("tab10") + + for i in range(1, 7): + s = np.loadtxt(f'{base}/tables/gasSaturation_spe11b_{i}.txt') + sn = np.loadtxt(f'{base}/tables/waterSaturation_spe11b_{i}.txt') + spc = np.loadtxt(f'{base}/tables/waterPCSaturation_spe11b_{i}.txt') + kr = np.loadtxt(f'{base}/tables/gasRelperm_spe11b_{i}.txt') + krn = np.loadtxt(f'{base}/tables/waterRelperm_spe11b_{i}.txt') + pc = np.loadtxt(f'{base}/tables/waterCapPres_spe11b_{i}.txt') + if not i == 5: + ax[0].plot(s, kr, color=cmap(-1), label=f'facies {i}', lw=lw) + ax[0].plot(sn[::-1], krn, color=cmap(-1), lw=lw, ls=':') + ax[1].plot(spc, pc, color=cmap(-1), label=f'facies {i}', lw=lw) + else: + ax[0].plot(s, kr, label=f'facies {i}', lw=lw, ls='-', color='red') + ax[0].plot(sn[::-1], krn, lw=lw, ls='-',color='red') + ax[1].plot(spc, pc, label=f'facies {i}', lw=lw, ls='-',color='red') + + ax[0].set_xlabel('Relative Permeability [-]', size=fsize, weight="bold") + ax[0].set_ylabel('Wetting saturation [-]', size=fsize, weight="bold") + ax[0].legend(loc='upper left') + ax[1].set_xlabel('Capillary pressure [Pa]', size=fsize, weight="bold") + ax[1].set_ylabel('Wetting saturation [-]', size=fsize, weight="bold") + ax[1].legend(loc='upper left') + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/tables/plotNIST.hires.png b/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/tables/plotNIST.hires.png new file mode 100644 index 00000000000..bb2c60ae48b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/tables/plotNIST.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/tables/plotNIST.pdf b/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/tables/plotNIST.pdf new file mode 100644 index 00000000000..e813eca0bb2 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/tables/plotNIST.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/tables/plotNIST.png b/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/tables/plotNIST.png new file mode 100644 index 00000000000..299b2a88fdd Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/tables/plotNIST.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/tables/plotNIST.py b/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/tables/plotNIST.py new file mode 100644 index 00000000000..d4485312c56 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/inputFiles/compositionalMultiphaseFlow/benchmarks/SPE11/b/tables/plotNIST.py @@ -0,0 +1,148 @@ +import urllib +from io import StringIO + +import matplotlib.pyplot as plt +import numpy as np +import argparse + +import requests + + +class NISTData: + # Adapted from Bernd's script + code = {'H2O': "C7732185", 'CO2': "C124389"} + + def __init__(self): + + self.query = { + "Action": "Data", + "Wide": "on", + "Type": "IsoTherm", + "Digits": "12", + "PLow": "2e7", + "PHigh": "3e7", + "PInc": "1e6", + "RefState": "IIR", + "TUnit": "K", + "PUnit": "Pa", + "DUnit": "kg/m3", + "HUnit": "kJ/kg", + "WUnit": "m/s", + "VisUnit": "uPas", + "STUnit": "N/m", + } + + def getdata_(self, code, temperature): + + self.query["ID"] = code + self.query["T"] = temperature + response = requests.get( + "https://webbook.nist.gov/cgi/fluid.cgi?" + urllib.parse.urlencode(self.query) + ) + response.encoding = "utf-8" + + text = response.text + phase = np.genfromtxt(StringIO(text), delimiter="\t", dtype=str, usecols=[-1], skip_header=1) + values = np.genfromtxt(StringIO(text), delimiter="\t", names=True) + + # NIST provides additional samples at the transition points (if there is a + # phase transition within the requested data range). Since the code which + # uses the tables generated by this script can't deal with these additional + # sample points, they are removed. + phaseBoundaryIndices = [] + for j in range(1, len(phase) - 1): + if phase[j] != phase[j + 1]: + phaseBoundaryIndices += [j, j + 1] + + pressure = np.delete(values["Pressure_Pa"], phaseBoundaryIndices) + density = np.delete(values["Density_kgm3"], phaseBoundaryIndices) + viscosity = np.delete(values["Viscosity_uPas"], phaseBoundaryIndices) + # transform unit (1e-6.Pa.s -> Pa.s) + viscosity *= 1e-6 + enthalpy = np.delete(values["Enthalpy_kJkg"], phaseBoundaryIndices) + # transform unit (kJ/kg -> J/kg) + + cv = np.delete(values["Cv_JgK"], phaseBoundaryIndices) + cp = np.delete(values["Cp_JgK"], phaseBoundaryIndices) + thermCond = np.delete(values["Therm_Cond_WmK"], phaseBoundaryIndices) + # transform unit (kJ/kg -> J/kg) + enthalpy *= 1000 + cv *= 1000 + cp *= 1000 + return np.vstack([pressure, density, viscosity, enthalpy, thermCond, cv, cp]).transpose() + + def getCO2Data(self,temperature): + return self.getdata_(self.code['CO2'],temperature) + + def getH2OData(self,temperature): + return self.getdata_(self.code['H2O'],temperature) + +def main(): + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + # File path + base = args.outputDir + + fsize = 25 + msize = 12 + lw = 4 + fig, ax = plt.subplots(2, 2, figsize=(32, 18)) + cmap = plt.get_cmap("tab10") + + # On one hand data queried from NIST data base thanks to Bernd's script + # On the other, data produce from input files with PVTDriver + # NIST data goes T,P,rho,mu,H,KCP,cv,cp for each phase + # geos is produced temperature-wise , none, temp ,total dens, gas dens, water dens, gas visc, water visc + geos_data = 8 * [None] + te = [283, 293, 303, 313, 323, 333, 343, 353] + for i, ti in enumerate(te): + geos_data[i] = np.loadtxt(f'{base}/geos_pvt_{ti}.txt', skiprows=7) + + for i in range(7): + ax[0, 0].plot(geos_data[i][:, 1], geos_data[i][:, 6], label=f'T={te[i]}', ls=':', lw=lw) + for i in range(7): + nist_co2 = NISTData().getCO2Data(te[i]) + ax[0, 0].plot(nist_co2[:, 0], nist_co2[:, 1], marker='*',markersize=lw) + ax[0, 0].legend() + ax[0, 0].set_xlabel('Pressure [Pa]', size=fsize) + ax[0, 0].set_ylabel('Gas densities [kg / m3]', size=fsize) + + for i in range(7): + ax[0, 1].plot(geos_data[i][:, 1], geos_data[i][:, 7], label=f'T={te[i]}', ls=':', lw=lw) + for i in range(7): + nist_h2o = NISTData().getH2OData(te[i]) + ax[0, 1].plot(nist_h2o[:, 0], nist_h2o[:, 1], marker='*', markersize=lw) + ax[0, 1].legend() + ax[0, 1].set_xlabel('Pressure [Pa]', size=fsize) + ax[0, 1].set_ylabel('Water densities [kg / m3]', size=fsize) + + for i in range(7): + ax[1, 0].plot(geos_data[i][:, 1], geos_data[i][:, 8], label=f'T={te[i]}', ls=':', lw=lw) + for i in range(7): + nist_co2 = NISTData().getCO2Data(te[i]) + ax[1, 0].plot(nist_co2[:, 0], nist_co2[:, 2], marker='*',markersize=lw) + ax[1, 0].legend() + ax[1, 0].set_xlabel('Pressure [Pa]', size=fsize) + ax[1, 0].set_ylabel('Gas viscosity [Pa s]', size=fsize) + + for i in range(7): + ax[1, 1].plot(geos_data[i][:, 1], geos_data[i][:, 9], label=f'T={te[i]}', ls=':', lw=lw) + for i in range(7): + nist_h2o = NISTData().getH2OData(te[i]) + ax[1, 1].plot(nist_h2o[:, 0], nist_h2o[:, 2], marker='*',markersize=lw) + ax[1, 1].legend() + ax[1, 1].set_xlabel('Pressure [Pa]', size=fsize) + ax[1, 1].set_ylabel('Water viscosity [Pa s]', size=fsize) + + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/gravityInitializationFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/gravityInitializationFigure.hires.png new file mode 100644 index 00000000000..3b3861a4f9d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/gravityInitializationFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/gravityInitializationFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/gravityInitializationFigure.pdf new file mode 100644 index 00000000000..2ed69c3f360 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/gravityInitializationFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/gravityInitializationFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/gravityInitializationFigure.png new file mode 100644 index 00000000000..a6c5dd25b4f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/gravityInitializationFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/gravityInitializationFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/gravityInitializationFigure.py new file mode 100644 index 00000000000..17d26c5174f --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/gravityInducedStressInitialization/gravityInitializationFigure.py @@ -0,0 +1,155 @@ +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import h5py +import xml.etree.ElementTree as ElementTree +import math +from math import sin,cos,tan,exp,atan,asin +import csv +import os +import argparse + + +def getHydromechanicalParametersFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + param1 = tree.find('Constitutive/ElasticIsotropic') + param2 = tree.find('Constitutive/BiotPorosity') + param3 = tree.find('Constitutive/CompressibleSinglePhaseFluid') + + hydromechanicalParameters = dict.fromkeys([ + "bulkModulus", "shearModulus", "youngModulus", "poissonRatio", "rockDensity", "poissonRatio", "biotCoefficient", "porosity", "fluidDensity", "traction"]) + + hydromechanicalParameters["rockDensity"] = float(param1.get("defaultDensity")) + hydromechanicalParameters["poissonRatio"] = float(param1.get("defaultPoissonRatio")) + hydromechanicalParameters["youngModulus"] = float(param1.get("defaultYoungModulus")) + + E = hydromechanicalParameters["youngModulus"] + nu = hydromechanicalParameters["poissonRatio"] + K = E / (3 * (1 - 2 * nu)) + G = E / (2 * (1 + nu)) + + hydromechanicalParameters["poissonRatio"] = nu + hydromechanicalParameters["bulkModulus"] = K + hydromechanicalParameters["shearModulus"] = G + + Ks = float(param2.get("defaultGrainBulkModulus")) + hydromechanicalParameters["biotCoefficient"] = 1.0 - K / Ks + + hydromechanicalParameters["porosity"] = float(param2.get("defaultReferencePorosity")) + + hydromechanicalParameters["fluidDensity"] = float(param3.get("defaultDensity")) + + param4 = tree.findall('FieldSpecifications/Traction') + found_stress = False + for elem in param4: + if elem.get("name") == "tractionTop" and elem.get("tractionType") == "normal": + traction = float(elem.get("scale")) * (-1) + found_stress = True + if found_stress: break + + return hydromechanicalParameters + + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + # File path + outputDir = args.outputDir + geosDir = args.geosDir + xmlFile1Path = geosDir + "/inputFiles/initialization/gravityInducedStress_initialization_base.xml" + xmlFile2Path = geosDir + "/inputFiles/initialization/gravityInducedStress_initialization_benchmark.xml" + + hydromechanicalParameters = getHydromechanicalParametersFromXML(xmlFile1Path) + + BiotCoefficient = hydromechanicalParameters["biotCoefficient"] + nu = hydromechanicalParameters["poissonRatio"] + rhoF = hydromechanicalParameters["fluidDensity"] + rhoR = hydromechanicalParameters["rockDensity"] + phi = hydromechanicalParameters["porosity"] + rhoB = (1-phi)*rhoR + phi*rhoF + + traction = hydromechanicalParameters["traction"] + gravity = 9.81 + + # rename this file to the name of your Paraview output file + file = open(outputDir + "/simulation_result_0.csv") + csvreader = csv.reader(file) + header = next(csvreader) + header_index = {column_name: index for index, column_name in enumerate(header)} + + rows = [] + for row in csvreader: + rows.append(row) + file.close() + + zloc_index = header_index["elementCenter:2"] + pressure_index = header_index["pressure"] + tsxx_index = header_index["rockSolid_stress:0"] # the solidModelName="rockSolid" has been defined in the gravityInducedStress_initialization_base.xml file, please change if you have a different solidModelName + tsyy_index = header_index["rockSolid_stress:1"] + tszz_index = header_index["rockSolid_stress:2"] + + + rows = np.array(rows) + zloc_0 = np.empty(len(rows[:,1])) + pressure_0 = np.empty(len(rows[:,1])) + tsxx_0 = np.empty(len(rows[:,1])) + tsyy_0 = np.empty(len(rows[:,1])) + tszz_0 = np.empty(len(rows[:,1])) + for i in range(0,len(rows[:,1])): + zloc_0[i]=-(float(rows[i,zloc_index])) + pressure_0[i]=float(rows[i,pressure_index]) + tsxx_0[i]=-(float(rows[i,tsxx_index])-BiotCoefficient*pressure_0[i])/1.0e6 + tsyy_0[i]=-(float(rows[i,tsyy_index])-BiotCoefficient*pressure_0[i])/1.0e6 + tszz_0[i]=-(float(rows[i,tszz_index])-BiotCoefficient*pressure_0[i])/1.0e6 + + + z_analytical= np.linspace(0, 1000, 100) + pp_analytical= rhoF*gravity*z_analytical/1.0e6 + szz_analtyical= rhoB*gravity*z_analytical/1.0e6 + + sxx_analtyical=nu/(1-nu)*(szz_analtyical-BiotCoefficient*pp_analytical)+BiotCoefficient*pp_analytical + + fsize = 20 + msize = 12 + lw = 6 + mew = 2 + malpha = 0.6 + lalpha = 0.8 + N1=1 + + fig = plt.figure(figsize=(10,8)) + cmap = plt.get_cmap("tab10") + + + plt.plot(tsxx_0[::N1], zloc_0[::N1], 'o', color=cmap(0), markersize=msize, alpha=malpha, mec=cmap(0), fillstyle='none', mew=mew, label= 'Sxx_Total_GEOS') + plt.plot(sxx_analtyical, z_analytical, lw=lw, alpha=0.8, color='orange', linestyle= ':', label='Sxx_Total_Analytical') + plt.plot(tsyy_0[::N1], zloc_0[::N1], 's', color=cmap(1), markersize=msize, alpha=malpha, mec=cmap(1), fillstyle='none', mew=mew, label= 'Syy_Total_GEOS') + plt.plot(tszz_0[::N1], zloc_0[::N1], 'd', color=cmap(2), markersize=msize, alpha=malpha, mec=cmap(2), fillstyle='none', mew=mew, label= 'Szz_Total_GEOS') + plt.plot(szz_analtyical, z_analytical, lw=lw, alpha=0.8, color='g', linestyle= ':', label='Szz_Total_Analytical') + plt.plot(pressure_0[::N1]/1.0e6, zloc_0[::N1], 'x', color=cmap(3), markersize=msize, alpha=malpha, mec=cmap(3), fillstyle='none', mew=mew, label= 'Pore Pressure_GEOS') + plt.plot(pp_analytical, z_analytical, lw=lw, alpha=0.8, color='r', linestyle= ':', label='Pore Pressure_Analytical') + plt.xlabel('Total Stresses [MPa]', size=fsize, weight="bold") + plt.ylabel('Depth [m]', size=fsize, weight="bold") + plt.legend(loc='upper right',fontsize=fsize*0.5) + plt.grid(True) + ax = plt.gca() + ax.xaxis.set_tick_params(labelsize=fsize) + ax.yaxis.set_tick_params(labelsize=fsize) + ax.invert_yaxis() + + plt.show() + + +if __name__ == "__main__": + main() + diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/tableInitializationFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/tableInitializationFigure.hires.png new file mode 100644 index 00000000000..043fde609d5 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/tableInitializationFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/tableInitializationFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/tableInitializationFigure.pdf new file mode 100644 index 00000000000..443de111bc7 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/tableInitializationFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/tableInitializationFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/tableInitializationFigure.png new file mode 100644 index 00000000000..4348e1cc3f8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/tableInitializationFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/tableInitializationFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/tableInitializationFigure.py new file mode 100644 index 00000000000..6dbd1fa0e30 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/coreComponents/physicsSolvers/multiphysics/docs/userTableStressInitialization/tableInitializationFigure.py @@ -0,0 +1,168 @@ +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import h5py +import xml.etree.ElementTree as ElementTree +from mpmath import * +import math +from math import sin,cos,tan,exp,atan,asin +import csv +import os +import argparse + +def getHydromechanicalParametersFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + param1 = tree.find('Constitutive/ElasticIsotropic') + param2 = tree.find('Constitutive/BiotPorosity') + param3 = tree.find('Constitutive/CompressibleSinglePhaseFluid') + + hydromechanicalParameters = dict.fromkeys([ + "bulkModulus", "shearModulus", "youngModulus", "poissonRatio", "rockDensity", "poissonRatio", "biotCoefficient", "porosity", "fluidDensity", "traction"]) + + hydromechanicalParameters["rockDensity"] = float(param1.get("defaultDensity")) + hydromechanicalParameters["poissonRatio"] = float(param1.get("defaultPoissonRatio")) + hydromechanicalParameters["youngModulus"] = float(param1.get("defaultYoungModulus")) + + E = hydromechanicalParameters["youngModulus"] + nu = hydromechanicalParameters["poissonRatio"] + K = E / (3 * (1 - 2 * nu)) + G = E / (2 * (1 + nu)) + + hydromechanicalParameters["poissonRatio"] = nu + hydromechanicalParameters["bulkModulus"] = K + hydromechanicalParameters["shearModulus"] = G + + Ks = float(param2.get("defaultGrainBulkModulus")) + hydromechanicalParameters["biotCoefficient"] = 1.0 - K / Ks + + hydromechanicalParameters["porosity"] = float(param2.get("defaultReferencePorosity")) + + hydromechanicalParameters["fluidDensity"] = float(param3.get("defaultDensity")) + + param4 = tree.findall('FieldSpecifications/Traction') + found_stress = False + for elem in param4: + if elem.get("name") == "tractionTop" and elem.get("tractionType") == "normal": + traction = float(elem.get("scale")) * (-1) + found_stress = True + if found_stress: break + + return hydromechanicalParameters + +def inputStressGradientsMPa(stressXX=None, stressYY=None, stressZZ=None,porePressure=None): + stress_gradients = { + 'stressXX': stressXX, + 'stressYY': stressYY, + 'stressZZ': stressZZ, + 'porePressure': porePressure + } + return stress_gradients + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + # File path + outputDir = args.outputDir + geosDir = args.geosDir + xmlFile1Path = geosDir + "/inputFiles/initialization/userdefinedStress_initialization_base.xml" + xmlFile2Path = geosDir + "/inputFiles/initialization/userdefinedStress_initialization_benchmark.xml" + + + hydromechanicalParameters = getHydromechanicalParametersFromXML(xmlFile1Path) + stress_gradients = inputStressGradientsMPa(0.17,0.27,0.24,0.1) + sxx_grad = stress_gradients["stressXX"] + syy_grad = stress_gradients["stressYY"] + szz_grad = stress_gradients["stressZZ"] + pp_grad = stress_gradients["porePressure"] + BiotCoefficient = hydromechanicalParameters["biotCoefficient"] + nu = hydromechanicalParameters["poissonRatio"] + rhoF = hydromechanicalParameters["fluidDensity"] + rhoR = hydromechanicalParameters["rockDensity"] + phi = hydromechanicalParameters["porosity"] + rhoB = (1-phi)*rhoR + phi*rhoF + + traction = hydromechanicalParameters["traction"] + gravity = 9.81 + + # rename this file to the name of your Paraview output file + file = open(outputDir + "/simulation_result_0.csv") + csvreader = csv.reader(file) + header = next(csvreader) + header_index = {column_name: index for index, column_name in enumerate(header)} + + rows = [] + for row in csvreader: + rows.append(row) + file.close() + + zloc_index = header_index["elementCenter:2"] + pressure_index = header_index["pressure"] + tsxx_index = header_index["rockSolid_stress:0"] # the solidModelName="rockSolid" has been defined in the gravityInducedStress_initialization_base.xml file, please change if you have a different solidModelName + tsyy_index = header_index["rockSolid_stress:1"] + tszz_index = header_index["rockSolid_stress:2"] + + + rows = np.array(rows) + zloc_0 = np.empty(len(rows[:,1])) + pressure_0 = np.empty(len(rows[:,1])) + tsxx_0 = np.empty(len(rows[:,1])) + tsyy_0 = np.empty(len(rows[:,1])) + tszz_0 = np.empty(len(rows[:,1])) + for i in range(0,len(rows[:,1])): + zloc_0[i]=-(float(rows[i,zloc_index])) + pressure_0[i]=float(rows[i,pressure_index]) + tsxx_0[i]=-(float(rows[i,tsxx_index])-BiotCoefficient*pressure_0[i])/1.0e6 + tsyy_0[i]=-(float(rows[i,tsyy_index])-BiotCoefficient*pressure_0[i])/1.0e6 + tszz_0[i]=-(float(rows[i,tszz_index])-BiotCoefficient*pressure_0[i])/1.0e6 + + + z_analytical= np.linspace(0, 1000, 100) + + pp_analytical= pp_grad*100000*z_analytical/1.0e6 + szz_analtyical= szz_grad*100000*z_analytical/1.0e6 + sxx_analtyical = sxx_grad*100000*z_analytical/1.0e6 + syy_analtyical = syy_grad*100000*z_analytical/1.0e6 + + fsize = 20 + msize = 12 + lw = 6 + mew = 2 + malpha = 0.6 + lalpha = 0.8 + N1=1 + + fig = plt.figure(figsize=(10,8)) + cmap = plt.get_cmap("tab10") + + + plt.plot(tsxx_0[::N1], zloc_0[::N1], 'o', color=cmap(0), markersize=msize, alpha=malpha, mec=cmap(0), fillstyle='none', mew=mew, label= 'Sxx_Total_GEOS') + plt.plot(sxx_analtyical, z_analytical, lw=lw, alpha=0.8, color='b', linestyle= ':', label='Sxx_Total_Reference') + plt.plot(tsyy_0[::N1], zloc_0[::N1], 's', color=cmap(1), markersize=msize, alpha=malpha, mec=cmap(1), fillstyle='none', mew=mew, label= 'Syy_Total_GEOS') + plt.plot(syy_analtyical, z_analytical, lw=lw, alpha=0.8, color='orange', linestyle= ':', label='Syy_Total_Reference') + plt.plot(tszz_0[::N1], zloc_0[::N1], 'd', color=cmap(2), markersize=msize, alpha=malpha, mec=cmap(2), fillstyle='none', mew=mew, label= 'Szz_Total_GEOS') + plt.plot(szz_analtyical, z_analytical, lw=lw, alpha=0.8, color='y', linestyle= ':', label='Szz_Total_Reference') + plt.plot(pressure_0[::N1]/1.0e6, zloc_0[::N1], 'x', color=cmap(3), markersize=msize, alpha=malpha, mec=cmap(3), fillstyle='none', mew=mew, label= 'Pore Pressure_GEOS') + plt.plot(pp_analytical, z_analytical, lw=lw, alpha=0.8, color='r', linestyle= ':', label='Pore Pressure_Reference') + plt.xlabel('Total Stresses [MPa]', size=fsize, weight="bold") + plt.ylabel('Depth [m]', size=fsize, weight="bold") + plt.legend(loc='upper right',fontsize=fsize*0.5) + plt.grid(True) + ax = plt.gca() + ax.xaxis.set_tick_params(labelsize=fsize) + ax.yaxis.set_tick_params(labelsize=fsize) + ax.invert_yaxis() + + plt.show() + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/buckleyLeverett/buckleyLeverettFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/buckleyLeverett/buckleyLeverettFigure.hires.png new file mode 100644 index 00000000000..e34807f16d6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/buckleyLeverett/buckleyLeverettFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/buckleyLeverett/buckleyLeverettFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/buckleyLeverett/buckleyLeverettFigure.pdf new file mode 100644 index 00000000000..125b4c78980 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/buckleyLeverett/buckleyLeverettFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/buckleyLeverett/buckleyLeverettFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/buckleyLeverett/buckleyLeverettFigure.png new file mode 100644 index 00000000000..0518ccb5417 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/buckleyLeverett/buckleyLeverettFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/buckleyLeverett/buckleyLeverettFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/buckleyLeverett/buckleyLeverettFigure.py new file mode 100644 index 00000000000..f4faa2eaeae --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/buckleyLeverett/buckleyLeverettFigure.py @@ -0,0 +1,248 @@ +import matplotlib +import matplotlib.pyplot as plt +import xml.etree.ElementTree as ElementTree +import numpy as np +import h5py +import os +import argparse + + +def getMaxTime(xmlFilePath): + + tree = ElementTree.parse(xmlFilePath) + eventElement = tree.find('Events') + + return float(eventElement.get('maxTime')) + + +def getDomainMaxMinCoords(xmlFilePath): + + tree = ElementTree.parse(xmlFilePath) + meshElement = tree.find('Mesh/InternalMesh') + + nodeXCoords = meshElement.get("xCoords") + nodeYCoords = meshElement.get("yCoords") + nodeZCoords = meshElement.get("zCoords") + + nodeXCoords = [float(i) for i in nodeXCoords[1:-1].split(",")] + nodeYCoords = [float(i) for i in nodeYCoords[1:-1].split(",")] + nodeZCoords = [float(i) for i in nodeZCoords[1:-1].split(",")] + + xMin = nodeXCoords[0] + xMax = nodeXCoords[-1] + yMin = nodeYCoords[0] + yMax = nodeYCoords[-1] + zMin = nodeZCoords[0] + zMax = nodeZCoords[-1] + + return xMin, xMax, yMin, yMax, zMin, zMax + + +def getPorosity(xmlFilePath): + + tree = ElementTree.parse(xmlFilePath) + refPorosity = 0 + porosityElement = tree.find('Constitutive/PressurePorosity') + refPorosity = porosityElement.get('defaultReferencePorosity') + return float(refPorosity) + + +def getInjectionRate(xmlFilePath): + + tree = ElementTree.parse(xmlFilePath) + sourceFluxElement = tree.find('FieldSpecifications/SourceFlux') + + return abs(float(sourceFluxElement.get("scale"))) + + +def getBrooksCoreyRelperm(xmlFilePath): + + tree = ElementTree.parse(xmlFilePath) + brooksCoreyElement = tree.find('Constitutive/BrooksCoreyRelativePermeability') + phaseMinVolFrac = brooksCoreyElement.get("phaseMinVolumeFraction") + phaseRelPermExp = brooksCoreyElement.get("phaseRelPermExponent") + phaseRelPermMaxValue = brooksCoreyElement.get("phaseRelPermMaxValue") + + phaseMinVolFrac = [float(i) for i in phaseMinVolFrac[1:-1].split(",")] + phaseRelPermExp = [float(i) for i in phaseRelPermExp[1:-1].split(",")] + phaseRelPermMaxValue = [float(i) for i in phaseRelPermMaxValue[1:-1].split(",")] + + return phaseMinVolFrac, phaseRelPermExp, phaseRelPermMaxValue + +def getViscosity( pvdgFilePath, \ + pvtwFilePath ): + + pvdgFile = open(pvdgFilePath, 'r') + pvtwFile = open(pvtwFilePath, 'r') + + for i, line in enumerate(pvdgFile): + if i == 1: + visco = float(line.split(" ")[2]) + for i, line in enumerate(pvtwFile): + if i == 1: + viscw = float(line.split(" ")[3]) + + return [visco, viscw] + + +def getDensity(xmlFilePath): + + tree = ElementTree.parse(xmlFilePath) + brooksCoreyElement = tree.find('Constitutive/DeadOilFluid') + surfaceDensities = brooksCoreyElement.get("surfaceDensities") + + surfaceDensities = [float(i) for i in surfaceDensities[1:-1].split(",")] + + return surfaceDensities + +def computeFractionalFlow( phaseVolFrac, \ + phaseMinVolFrac, \ + phaseRelPermExp, \ + phaseRelPermMaxValue, \ + phaseVisc ): + + scale = 1 - phaseMinVolFrac[0] - phaseMinVolFrac[1] + phaseMob = [0, 0] + dPhaseMob_dS = [0, 0] + + for i in range(0, 2): + scaledPhaseVolFrac = (phaseVolFrac[i] - phaseMinVolFrac[i]) / scale + phaseMob[i] = phaseRelPermMaxValue[i] / phaseVisc[i] * scaledPhaseVolFrac**phaseRelPermExp[i] + dPhaseMob_dS[i] = phaseRelPermExp[i] * phaseRelPermMaxValue[i] / phaseVisc[i] * (scaledPhaseVolFrac**( + phaseRelPermExp[i] - 1)) / scale + + fractionalFlow = phaseMob[0] / (phaseMob[0] + phaseMob[1]) + dFractionalFlow_dS = (dPhaseMob_dS[0] * phaseMob[1] + phaseMob[0] * dPhaseMob_dS[1]) / ( + (phaseMob[0] + phaseMob[1])**2) + + return fractionalFlow, dFractionalFlow_dS + + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + + # File paths + outputDir = args.outputDir + geosDir = args.geosDir + hdf5FilePath = outputDir + "/saturationHistory.hdf5" + pvdgFilePath = geosDir + "/inputFiles/compositionalMultiphaseFlow/benchmarks/buckleyLeverettProblem/buckleyLeverett_table/pvdg.txt" + pvtwFilePath = geosDir + "/inputFiles/compositionalMultiphaseFlow/benchmarks/buckleyLeverettProblem/buckleyLeverett_table/pvtw.txt" + xmlFile1Path = geosDir + "/inputFiles/compositionalMultiphaseFlow/benchmarks/buckleyLeverettProblem/buckleyLeverett_base.xml" + xmlFile2Path = geosDir + "/inputFiles/compositionalMultiphaseFlow/benchmarks/buckleyLeverettProblem/buckleyLeverett_benchmark.xml" + + # Read simulation parameters from XML file + xMin, xMax, yMin, yMax, zMin, zMax = getDomainMaxMinCoords(xmlFile2Path) + maxTime = getMaxTime(xmlFile2Path) + porosity = getPorosity(xmlFile1Path) + phaseMinVolFrac, phaseRelPermExp, phaseRelPermMaxValue = getBrooksCoreyRelperm(xmlFile1Path) + phaseVisc = getViscosity(pvdgFilePath, pvtwFilePath) + phaseDens = getDensity(xmlFile1Path) + area = (yMax - yMin) * (zMax - zMin) + q = getInjectionRate(xmlFile1Path) / phaseDens[0] + + # Read simulation output from HDF5 file + hf = h5py.File(hdf5FilePath, 'r') + time = hf.get('phaseVolumeFraction Time') + time = np.asarray(time) + center = hf.get('phaseVolumeFraction elementCenter') + center = np.asarray(center) + phaseVolFracFromGEOSX = hf.get('phaseVolumeFraction') + phaseVolFracFromGEOSX = np.asarray(phaseVolFracFromGEOSX) + + n = 100000 # sampling value, will decide the accuracy of front detection in the BL analytical solution + minDiff = 1e99 + iShock = n - 1 + volFrac = np.linspace(0, 1, num=n) + dFractionalFlow_dS = np.zeros((n, )) + + for i in range(0, len(volFrac), 1): + + # step 1: compute the fractional flow and its derivative + fractionalFlow, \ + dFractionalFlow_dS[i] = computeFractionalFlow( [ volFrac[i], (1-volFrac[i]) ], \ + phaseMinVolFrac, \ + phaseRelPermExp, \ + phaseRelPermMaxValue, \ + phaseVisc ) + + # step 2: compute the location of the shock by matching the slope of the tangent to dfw_dS + if (volFrac[i] > 0 and dFractionalFlow_dS[i]): + slopeFromOrigin = fractionalFlow / volFrac[i] + if (abs((slopeFromOrigin - dFractionalFlow_dS[i]) / dFractionalFlow_dS[i]) < minDiff): + minDiff = abs((slopeFromOrigin - dFractionalFlow_dS[i]) / dFractionalFlow_dS[i]) + iShock = i + + # step 3: beyond the shock, constant dfw_dS as a function of saturation + for i in range(0, iShock, 1): + dFractionalFlow_dS[i] = dFractionalFlow_dS[iShock] + + fsize = 30 + lw = 6 + fig, ax = plt.subplots(1, 2, figsize=(24, 10)) + cmap = plt.get_cmap("tab10") + iplt = -1 + # loop over the report times + for iRptTime in range(1, time.shape[0], 1): + + iplt += 1 + + # plot analytical solution + td = q / area * (time[iRptTime, 0]) / porosity / xMax + ax[0].plot( (time[iRptTime,0])*q*dFractionalFlow_dS/(area*porosity)/xMax, \ + volFrac, \ + lw=lw, linestyle='-', alpha=0.5, \ + color=cmap(iplt), label='Analytical_t*='+str(round(td, 3)) ) + + # plot numerical solution + ax[0].plot( center[0,:,0]/xMax, \ + phaseVolFracFromGEOSX[iRptTime,:,0], \ + lw=lw, linestyle=':', \ + color=cmap(iplt), label='Numerical_t*='+str(round(td, 3)) ) + + # plot analytical solution + ax[1].plot( (time[iRptTime,0])*q*dFractionalFlow_dS/(area*porosity)/xMax, \ + 1.0-volFrac, \ + lw=lw, linestyle='-', alpha=0.5, \ + color=cmap(iplt), label='Analytical_t*='+str(round(td, 3)) ) + + # plot numerical solution + ax[1].plot( center[0,:,0]/xMax, \ + phaseVolFracFromGEOSX[iRptTime,:,1], \ + lw=lw, linestyle=':', \ + color=cmap(iplt), label='Numerical_t*='+str(round(td, 3)) ) + + ax[0].set_xlim((0, 1)) + ax[0].set_ylim((0, 1)) + ax[0].set_xlabel('$x_d$', size=fsize, weight="bold") + ax[0].set_ylabel('$S_g$', size=fsize, weight="bold") + ax[0].legend(loc='upper right', fontsize=fsize * 0.5) + ax[0].grid(True, which="both", ls="-") + ax[0].xaxis.set_tick_params(labelsize=fsize) + ax[0].yaxis.set_tick_params(labelsize=fsize) + + ax[1].set_xlim((0, 1)) + ax[1].set_ylim((0, 1)) + ax[1].set_xlabel('$x_d$', size=fsize, weight="bold") + ax[1].set_ylabel('$S_w$', size=fsize, weight="bold") + ax[1].legend(loc='lower right', fontsize=fsize * 0.5) + ax[1].grid(True, which="both", ls="-") + ax[1].xaxis.set_tick_params(labelsize=fsize) + ax[1].yaxis.set_tick_params(labelsize=fsize) + + plt.subplots_adjust(left=0.1, bottom=0.1, right=0.9, top=0.9, wspace=0.3, hspace=0.3) + + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/isothermalLeakyWell/isothermalLeakyWellFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/isothermalLeakyWell/isothermalLeakyWellFigure.hires.png new file mode 100644 index 00000000000..cfa412f7748 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/isothermalLeakyWell/isothermalLeakyWellFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/isothermalLeakyWell/isothermalLeakyWellFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/isothermalLeakyWell/isothermalLeakyWellFigure.pdf new file mode 100644 index 00000000000..8f499039c11 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/isothermalLeakyWell/isothermalLeakyWellFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/isothermalLeakyWell/isothermalLeakyWellFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/isothermalLeakyWell/isothermalLeakyWellFigure.png new file mode 100644 index 00000000000..29363fec44d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/isothermalLeakyWell/isothermalLeakyWellFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/isothermalLeakyWell/isothermalLeakyWellFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/isothermalLeakyWell/isothermalLeakyWellFigure.py new file mode 100644 index 00000000000..a116c42d825 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/isothermalLeakyWell/isothermalLeakyWellFigure.py @@ -0,0 +1,81 @@ +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import h5py + +#from matplotlib.ticker import AutoMinorLocator + + +def main(): + + # File path + hdf5FilePath = 'phaseOutfluxHistory.hdf5' + + # Read HDF5 + hf = h5py.File(hdf5FilePath, 'r') + time = hf.get('phaseOutflux Time') + phaseOutflux = hf.get('phaseOutflux') + + time = np.asarray(time) + phaseOutflux = np.asarray(phaseOutflux) + + # Conversions + inKilograms = 479.0 + inDays = 1.0 / 86400.0 + + # Data from the benchmark + timeStepSize = 10000 + injectionRate = 8.87 + + eclipse_time = np.array([ + 0, 1.389076824194035, 9.674909509150552, 33.72052704576976, 41.7991610567978, 44.5308007171611, + 48.681117012279685, 52.84834748486179, 61.195494063123704, 82.05278914786373, 114.02058455397315, + 166.8033896011637, 223.73862521565576, 337.562582456615, 477.71979973613884, 624.7906870538886, + 789.8772876425018, 914.7250600453298, 999.3424613511044 + ]) + eclipse_leakage = np.array([ + 0, -0.00038109756097565173, 0.0060975609756097615, 0.171875, 0.21570121951219512, 0.22332317073170732, + 0.22522865853658536, 0.2240853658536585, 0.2195121951219512, 0.20998475609756095, 0.19778963414634143, + 0.18368902439024387, 0.17111280487804875, 0.15434451219512196, 0.1410060975609756, 0.13147865853658536, + 0.12461890243902438, 0.1208079268292683, 0.11852134146341461 + ]) + + tough2_time = np.array([ + 0.0021201488344502195, 11.162583613369634, 16.906066805889736, 22.73859624945672, 28.524482418665798, + 40.079293566408325, 45.68072678702043, 56.7987872748667, 72.06385888289353, 119.2668525330478, + 173.42817465786098, 294.31906119809605, 424.97959356746844, 632.1393361814, 808.737133346761, 915.8131300817319, + 999.2494673126054 + ]) + tough2_leakage = np.array([ + 0, 0.006093307750204058, 0.03848441160569471, 0.08688157908685187, 0.12689461800218374, 0.20387192180891095, + 0.21072954321393358, 0.20920091590429646, 0.20309753744712877, 0.18783564606235353, 0.1733332979975194, + 0.15347015360478303, 0.13970084699945934, 0.12666458185364607, 0.12011862232728732, 0.11702903543828769, + 0.11471065268781863 + ]) + + # Plot HDF5 content + plt.plot(eclipse_time[:], eclipse_leakage[:], 'r--', label="ECLIPSE") + plt.plot(tough2_time[:], tough2_leakage[:], 'b--', label="TOUGH2") + plt.plot(time[:, 0] * inDays, + 100 * abs(phaseOutflux[:, 14, 0] / timeStepSize) * inKilograms / injectionRate, + 'k-', + label="GEOSX") + + values = 100 * abs(phaseOutflux[:, 14, 0] / timeStepSize) * inKilograms / injectionRate + argmax = np.argmax(values) + + plt.xlim(0, 1000) + plt.ylim(0, 0.25) + #ax = plt.axes() + #ax.xaxis.set_minor_locator(AutoMinorLocator()) + #ax.yaxis.set_minor_locator(AutoMinorLocator()) + + plt.grid() + plt.xlabel('Time [days]', fontweight='bold') + plt.ylabel('Leakage value [%]', fontweight='bold') + plt.legend(loc="upper right") + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/thermalLeakyWell/thermalLeakyWell.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/thermalLeakyWell/thermalLeakyWell.hires.png new file mode 100644 index 00000000000..af8c711af1d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/thermalLeakyWell/thermalLeakyWell.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/thermalLeakyWell/thermalLeakyWell.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/thermalLeakyWell/thermalLeakyWell.pdf new file mode 100644 index 00000000000..7fb3746e5a5 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/thermalLeakyWell/thermalLeakyWell.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/thermalLeakyWell/thermalLeakyWell.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/thermalLeakyWell/thermalLeakyWell.png new file mode 100644 index 00000000000..fe54e40dc09 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/thermalLeakyWell/thermalLeakyWell.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/thermalLeakyWell/thermalLeakyWell.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/thermalLeakyWell/thermalLeakyWell.py new file mode 100644 index 00000000000..95e6ddac052 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/carbonStorage/thermalLeakyWell/thermalLeakyWell.py @@ -0,0 +1,248 @@ +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import h5py + +#from matplotlib.ticker import AutoMinorLocator + + +def main(): + + # File path + hdf5FilePathRefined = 'compOutfluxHistoryRefined.hdf5' + hdf5FilePathCoarse = 'compOutfluxHistoryCoarse.hdf5' + + # Read HDF5 + hf = h5py.File(hdf5FilePathRefined, 'r') + timeRefined = hf.get('componentOutflux Time') + timeRefined = np.asarray(timeRefined) + compOutfluxRefined = hf.get('componentOutflux') + compOutfluxRefined = np.asarray(compOutfluxRefined) + + hf = h5py.File(hdf5FilePathCoarse, 'r') + timeCoarse = hf.get('componentOutflux Time') + timeCoarse = np.asarray(timeCoarse) + compOutfluxCoarse = hf.get('componentOutflux') + compOutfluxCoarse = np.asarray(compOutfluxCoarse) + + # Conversions + inDays = 1.0 / 86400.0 + + # Data from the benchmark + timeStepSize = 10000 + injectionRate = 8.87 + + cooresTime = np.array([ + 32.804787597143445, 35.61571229783658, 39.36361189876067, 37.48966209829865, 38.89512444864522, + 37.48966209829865, 44.79806632010076, 45.922436200378, 43.111511499684866, 50.41991572148703, + 52.247016776937585, 56.0417651228733, 61.38252205419025, 67.00437145557652, 71.78294344675481, + 77.96697778827973, 83.86991965973533, 89.49176906112154, 92.30269376181468, 102.14093021424065, + 119.00647841839947, 131.65563957151858, 142.89933837429106, 154.1430371770636, 165.38673597983615, + 176.63043478260863, 187.87413358538117, 200.52329473850023, 221.6052299936988, 249.71447700063004, + 277.8237240075614, 307.33843336483926, 341.42089536074354, 369.17877678008824, 400.0989484877126, + 431.0191201953371, 461.9392919029616, 492.859463610586, 532.2124094202899, 563.1325811279142, 594.0527528355387, + 624.9729245431632, 655.8930962507876, 686.8132679584122, 717.7334396660366, 748.653611373661, 779.5737830812856, + 810.49395478891, 841.4141264965343, 872.3342982041589, 903.2544699117833, 934.1746416194077, 965.094813327032, + 996.0149850346567, 1026.935156742281, 1057.8553284499053, 1088.7755001575301, 1119.6956718651545, + 1150.6158435727789, 1181.5360152804033, 1212.4561869880276, 1243.376358695652, 1274.2965304032768, + 1305.2167021109012, 1336.1368738185256, 1367.05704552615, 1397.9772172337744, 1428.8973889413987, + 1459.8175606490236, 1490.737732356648, 1521.6579040642723, 1552.5780757718967, 1583.498247479521, + 1614.4184191871454, 1645.3385908947703, 1676.2587626023947, 1707.178934310019, 1738.0991060176434, + 1769.0192777252682, 1799.9394494328926, 1830.859621140517, 1861.7797928481414, 1892.6999645557657, + 1923.6201362633901, 1954.5403079710145, 1981.2440926275995 + ]) + cooresLeakage = np.array([ + 0.0023648852657005004, 0.007429234601449286, 0.02962616998792271, 0.025531589673913044, 0.01324784873188406, + 0.00570520078502415, 0.03507842693236715, 0.03774349587359099, 0.032319972826086965, 0.04065075051759834, + 0.0436878208031401, 0.0468449577294686, 0.05097904715177133, 0.055055668780193245, 0.05839598429951691, + 0.06199490489130435, 0.06507661533816425, 0.06756389329206924, 0.0696022041062802, 0.07247559380032206, + 0.077274154589372, 0.07997334503321256, 0.08264020984299517, 0.08522626056763286, 0.08783924932065218, + 0.09050611413043479, 0.09319991696859903, 0.09587216938405797, 0.09812418855676328, 0.1005270606884058, + 0.10292993282004831, 0.10476857570267897, 0.10466204804498792, 0.10445511500878349, 0.10415144996157225, + 0.10360289374725516, 0.10297597235946421, 0.10242741614514712, 0.10081113444224857, 0.0995670873133509, + 0.09824467501097936, 0.09695164964866052, 0.09567821557971015, 0.09438519021739131, 0.09319991696859903, + 0.0920538263065437, 0.09093712258454106, 0.08996735356280194, 0.08932084088164252, 0.08868412384716734, + 0.08808658939942907, 0.08767517223869126, 0.08727355072463769, 0.08687192921058409, 0.0864017381697409, + 0.08591195583552921, 0.08544176479468599, 0.0849519824604743, 0.0844524044795784, 0.08397241779205095, + 0.08350222675120773, 0.08306142265041722, 0.08260102725625823, 0.08216022315546773, 0.08170962340799298, + 0.08126881930720246, 0.08081821955972772, 0.08046557627909531, 0.0801423199385156, 0.07978967665788318, + 0.07948601161067194, 0.07911377703667105, 0.07880031634277558, 0.07848685564888011, 0.07823216883509003, + 0.07797748202129996, 0.07772279520750988, 0.07745831274703557, 0.07719383028656127, 0.07695873476613965, + 0.07680200441919192, 0.07660609148550725, 0.07642976984519105, 0.07628283514492754, 0.07613590044466403, + 0.07595957880434782 + ]) + + tough2Time = np.array([ + 47.608991020793894, 54.756770973985, 65.19734843370236, 72.62622085696279, 79.65353260869563, 90.49567073994058, + 103.34561222882343, 117.6010160680529, 131.65563957151858, 147.11572542533077, 162.37503094337916, + 176.63043478260863, 190.6850582860743, 210.36153119092626, 237.065315847511, 265.17456285444234, + 293.2838098613736, 341.0695297731569, 371.9897014807814, 402.90987318840575, 461.9392919029616, + 478.8048401071203, 526.5905600189036, 544.8615705734089, 594.0527528355387, 612.3237633900441, + 655.8930962507876, 686.8132679584122, 717.7334396660366, 734.5989878701954, 782.3847077819786, 800.655718336484, + 849.8469005986138, 868.117911153119, 917.3090934152489, 935.5801039697543, 984.7712862318841, + 1003.0422967863896, 1055.0444037492125, 1073.3154143037177, 1125.3175212665406, 1143.5885318210462, + 1195.590638783869, 1212.4561869880276, 1265.863756301197, 1282.7293045053561, 1336.1368738185256, + 1353.0024220226842, 1403.5990666351609, 1421.870077189666, 1476.6831088531821, 1494.9541194076874, + 1546.9562263705106, 1565.2272369250159, 1617.2293438878387, 1635.5003544423444, 1687.5024614051672, + 1705.7734719596724, 1757.7755789224957, 1776.046589477001, 1828.0486964398237, 1846.319706994329, + 1898.3218139571522, 1916.5928245116575, 1971.4058561751735, 1988.2714043793321 + ]) + tough2Leakage = np.array([ + 0.0034855072463768344, 0.009091695781573483, 0.01464862620772947, 0.0198386863425926, 0.025369961503623195, + 0.03093458850931677, 0.03636837366287095, 0.04150584050422705, 0.04675875603864735, 0.05229003119967794, + 0.05771868530020703, 0.06285422799667875, 0.0680802055027174, 0.0737237224486715, 0.07862259532436162, + 0.08368694466011042, 0.08868972135955831, 0.092318308767018, 0.09384642964975845, 0.09511986371870883, + 0.09303339097496706, 0.0925534042874396, 0.09088814435111989, 0.09050611413043479, 0.08906615406785244, + 0.0886743282004831, 0.08614705135595081, 0.0846875, 0.08343365722441809, 0.08317897041062802, + 0.08173901034804568, 0.08140106053743962, 0.07997579394488362, 0.07962315066425121, 0.07834971659530084, + 0.07811462107487922, 0.07703709993961352, 0.07671384359903381, 0.0758616223375055, 0.07558244640700483, + 0.07471553167545016, 0.07450492527173913, 0.07356944101339483, 0.07337352807971015, 0.0726584458717611, + 0.07240375905797101, 0.07179642896354853, 0.07154174214975846, 0.07097359464207291, 0.07084135341183576, + 0.07049360795454546, 0.07046422101449276, 0.07003321256038647, 0.0699254604468599, 0.06950424763943787, + 0.06933282382246377, 0.06880875672485727, 0.06863243508454106, 0.06809367451690822, 0.06798592240338165, + 0.06751573136253843, 0.0674471618357488, 0.06709451855511639, 0.06701615338164252, 0.06667330574769434, + 0.06658514492753624 + ]) + + eclipseTime = np.array([ + 23.435038594832974, 37.05721214434584, 36.36529221802135, 38.426636998529716, 43.111511499684866, + 46.54708613386538, 46.177974809531975, 49.93804291565391, 50.98210066162568, 52.94974795211084, 54.917395242596, + 48.73336090107114, 58.77237768926096, 58.10310990338161, 63.842081167296726, 68.0082731343955, + 72.62622085696279, 79.25197193716804, 84.47226066702672, 96.00800359454655, 90.89723141146811, + 106.35731726528036, 119.1821612121928, 119.00647841839947, 134.46656427221166, 149.9266501260239, + 164.54345856962817, 176.63043478260863, 187.87413358538117, 200.52329473850023, 215.98338059231253, + 235.65985349716448, 260.9581758034026, 290.47288516068045, 319.9875945179584, 349.5023038752363, + 380.42247558286067, 411.34264729048516, 442.26281899810965, 461.9392919029616, 515.3468612161311, + 542.5191333228314, 578.3115745116571, 608.1073763390044, 639.0275480466289, 669.9477197542533, + 700.8678914618778, 731.7880631695022, 762.7082348771268, 793.6284065847511, 824.5485782923755, + 855.4687500000001, 886.3889217076245, 917.3090934152489, 948.2292651228735, 979.1494368304978, + 1010.0696085381222, 1040.9897802457467, 1071.909951953371, 1102.8301236609955, 1122.5065965658478, + 1167.4813917769375, 1199.2046848276173, 1230.446105072464, 1260.241906899811, 1291.1620786074354, + 1322.0822503150598, 1353.0024220226842, 1383.922593730309, 1414.8427654379334, 1445.7629371455578, + 1476.6831088531821, 1507.6032805608065, 1538.523452268431, 1569.4436239760557, 1600.36379568368, + 1631.2839673913045, 1662.2041390989289, 1693.1243108065532, 1724.044482514178, 1754.9646542218024, + 1816.8049976370512, 1847.7251693446756, 1878.6453410523, 1909.5655127599248, 1940.4856844675492, + 1971.4058561751735, 1989.6768667296787 + ]) + eclipseLeakage = np.array([ + 0.0014460536067193719, 0.007021434294871842, 0.0034898173309178826, 0.010985054347826095, 0.014465447614734311, + 0.019569306058776187, 0.02393489926438297, 0.02936448628364391, 0.026359125905797087, 0.03201467517109502, + 0.03453966636473431, 0.021329257246376812, 0.03722423330745342, 0.039711767814009674, 0.042451365300422705, + 0.04629564185275559, 0.0498296912741546, 0.0537626434178744, 0.057535677742312705, 0.06377575345849804, + 0.06015593548711756, 0.06890908436014302, 0.07426248301630434, 0.07132623792270532, 0.07660609148550725, + 0.08109576288244766, 0.08445044535024154, 0.08743517889492754, 0.08983266342089372, 0.09223014794685991, + 0.09458273575885667, 0.09691736488526576, 0.0992986865942029, 0.10160458182367149, 0.10393202747584541, + 0.10612037494510321, 0.10769747406126481, 0.10839296497584541, 0.10851051273605622, 0.10846479971819646, + 0.10744278724747475, 0.10702810487117552, 0.10623792270531401, 0.10586568813131314, 0.1055620230841019, + 0.10508203639657443, 0.10444531936209925, 0.10363228068730787, 0.10284862895256917, 0.10173192523056654, + 0.10057603892182695, 0.09974340895366711, 0.09878343557861222, 0.09783325785024155, 0.096971240942029, + 0.0961288153271849, 0.09530598100570928, 0.09461049009112868, 0.09418507914941339, 0.0934252168423364, + 0.09276890851449276, 0.09264156510759772, 0.09256879744651483, 0.09213317104468599, 0.0919068916062802, + 0.09163261349912165, 0.09127997021848924, 0.09102528340469918, 0.09069223141743522, 0.09041795331027669, + 0.09016326649648661, 0.08982041886253843, 0.08946777558190602, 0.08916411053469478, 0.08883105854743084, + 0.08854698479358805, 0.08829229797979798, 0.08800822422595521, 0.08770455917874397, 0.08744987236495388, + 0.08720498119784806, 0.08670540321695214, 0.0864605120498463, 0.08627439476284585, 0.08608827747584541, + 0.08590216018884497, 0.0857062472551603, 0.08565726902173913 + ]) + + eclipseRefinedTime = np.array([ + 23.435038594832974, 37.05721214434584, 38.426636998529716, 37.08810142677106, 43.111511499684866, + 46.54708613386538, 46.177974809531975, 49.93804291565391, 50.98210066162568, 52.94974795211084, 54.917395242596, + 48.73336090107114, 58.77237768926096, 58.10310990338161, 63.842081167296726, 68.0082731343955, + 72.62622085696279, 79.25197193716804, 84.47226066702672, 96.00800359454655, 90.89723141146811, + 106.35731726528036, 119.1821612121928, 129.2280227845563, 141.21278355387523, 151.53289281213432, + 168.39844101629308, 190.6850582860743, 218.79430529300566, 252.52540170132318, 287.6619604599874, + 335.4476803717706, 397.2880237870195, 415.5590343415249, 467.56114130434787, 485.8321518588532, + 537.8342588216761, 556.1052693761815, 605.2964516383113, 622.1619998424701, 667.1367950535601, + 685.4078056080656, 728.9771384688091, 745.842686672968, 793.6284065847511, 810.49395478891, 858.2796747006931, + 875.145222904852, 925.7418675173284, 942.6074157214872, 990.3931356332704, 1008.6641461877756, + 1060.6662531505985, 1077.5318013547576, 1128.1284459672338, 1146.399456521739, 1195.590638783869, + 1213.8616493383743, 1265.863756301197, 1282.7293045053561, 1333.3259491178324, 1351.596959672338, + 1403.5990666351609, 1420.4646148393194, 1473.872184152489, 1490.737732356648, 1561.010849873976, + 1611.6074944864527, 1629.8785050409579, 1684.691536704474, 1701.5570849086325, 1754.9646542218024, + 1771.830202425961, 1825.2377717391305, 1843.5087822936362, 1895.510889256459, 1913.7818998109642, + 1968.5949314744803, 1985.4604796786393 + ]) + eclipseRefinedLeakage = np.array([ + 0.0014460536067193719, 0.007004857046636975, 0.00346395682367151, 0.011185165415804, 0.01447622282608696, + 0.019581278515834688, 0.02393489926438297, 0.02936448628364391, 0.026382831370772963, 0.03201467517109502, + 0.03453966636473431, 0.021329257246376812, 0.03722423330745342, 0.039711767814009674, 0.04246483431461352, + 0.046311035011830815, 0.04990152601650563, 0.053793429736024856, 0.057535677742312705, 0.06377575345849804, + 0.06015593548711756, 0.06890908436014302, 0.07427595203049517, 0.07966233325098815, 0.08485990338164251, + 0.09081397731193927, 0.09607843771566599, 0.10153274708132046, 0.1064803649607488, 0.11143696218297101, + 0.11604336503623189, 0.1199518280632411, 0.12194034434014053, 0.12207748339371981, 0.12251828749451033, + 0.12250849184782608, 0.12180320528656127, 0.12148484676932367, 0.11981468900966183, 0.11938368055555555, + 0.11740495992534036, 0.11690538194444444, 0.11475033967391304, 0.11421157910628019, 0.11213490200922266, + 0.11173328049516909, 0.11010720314558631, 0.10979374245169082, 0.10840276062252964, 0.1080697086352657, + 0.10663954421936758, 0.1062917987620773, 0.10502326251646904, 0.10462164100241546, 0.10354411986714976, + 0.10322086352657005, 0.10199640769104085, 0.10171233393719807, 0.10063481280193237, 0.10031155646135266, + 0.09938097002635046, 0.0991262832125604, 0.09817610548418973, 0.09804876207729468, 0.0972944972826087, + 0.09707899305555556, 0.09632472826086957, 0.09576637639986825, 0.09578596769323672, 0.09539414182586736, + 0.09535495923913043, 0.09501211160518225, 0.09492395078502416, 0.09463987703118137, 0.09449294233091787, + 0.09427743810386474, 0.09427743810386474, 0.09395418176328502, 0.09373867753623188 + ]) + + rockflowTime = np.array([ + 27.651425645872678, 34.05408746411814, 36.78693092312534, 39.24649003623182, 38.54375886105856, + 39.24649003623182, 38.54375886105856, 38.89512444864522, 37.48966209829865, 41.706049149338355, 45.922436200378, + 50.138823251417705, 58.57159735349711, 65.19734843370236, 75.43714555765592, 85.2753820100819, + 99.33000551354752, 114.79009136735976, 135.87202662255822, 166.7921983301827, 204.73968178954, + 228.63254174543158, 273.60733695652175, 290.47288516068045, 341.0695297731569, 359.3405403276622, + 414.1535719911783, 431.0191201953371, 481.61576480781343, 499.8867753623189, 549.0779576244487, + 567.348968178954, 616.5401504410838, 634.8111609955891, 686.8132679584122, 703.6788161625708, 757.0863854757405, + 773.9519336798993, 824.5485782923755, 842.819588846881, 894.8216958097038, 911.6872440138626, 965.094813327032, + 981.9603615311909, 1035.3679308443607, 1052.2334790485193, 1105.6410483616887, 1122.5065965658478, + 1175.9141658790172, 1192.7797140831758, 1246.1872833963453, 1263.0528316005043, 1316.4604009136738, + 1333.3259491178324, 1386.7335184310018, 1403.5990666351609, 1457.0066359483303, 1475.2776465028355, + 1527.2797534656584, 1545.550764020164, 1597.5528709829869, 1615.823881537492, 1670.6369132010082, + 1687.5024614051672, 1740.9100307183367, 1757.7755789224957, 1811.1831482356652, 1829.4541587901704, + 1881.4562657529932, 1899.7272763074989, 1954.5403079710145, 1971.4058561751735 + ]) + rockflowLeakage = np.array([ + 0.0010718599033816556, 0.005226302502683855, 0.011025461390398561, 0.0323469108544686, 0.027013181234903386, + 0.02193536288496377, 0.016372660024154606, 0.043310688405797104, 0.03770757850241546, 0.0486982940821256, + 0.053978147644927546, 0.059419629378019326, 0.06516640876610306, 0.07054118680986887, 0.07586978537640901, + 0.0813112671095008, 0.08678866621376811, 0.09221218926127214, 0.09737146307798482, 0.10222714959071391, + 0.10596854242149759, 0.10677668327294687, 0.10903947765700484, 0.10936273399758453, 0.10966639904479578, + 0.10957823822463769, 0.10930396011747914, 0.10903947765700484, 0.10813827816205533, 0.10796195652173912, + 0.10661015727931489, 0.10623792270531401, 0.1050134668697848, 0.10467551705917874, 0.10371064586078174, + 0.10332861564009663, 0.10235884661835748, 0.10203559027777778, 0.10114418642951252, 0.10095806914251207, + 0.10003727835419411, 0.09977279589371982, 0.09891077898550725, 0.09858752264492754, 0.09797039690382081, + 0.09772550573671498, 0.0972063364624506, 0.09707899305555556, 0.09650104990118577, 0.09632472826086957, + 0.09585453722002635, 0.09578596769323672, 0.09524720712560386, 0.0951394550120773, 0.09463987703118137, + 0.09449294233091787, 0.09414029905028547, 0.09411580993357488, 0.09364072106938955, 0.09352317330917875, + 0.09316073438186209, 0.0929844127415459, 0.09278849980786122, 0.09276890851449276, 0.09253381299407115, + 0.09233790006038647, 0.09216157842007028, 0.09212239583333334, 0.0919068916062802, 0.0919068916062802, + 0.09169138737922705, 0.09169138737922705 + ]) + + # Plot HDF5 content + plt.plot(rockflowTime[:], rockflowLeakage[:], 'y--', label="ROCKFLOW") + plt.plot(eclipseRefinedTime[:], eclipseRefinedLeakage[:], 'm--', label="ECLIPSE (FINE)") + plt.plot(eclipseTime[:], eclipseLeakage[:], 'g--', label="ECLIPSE (COARSE)") + plt.plot(cooresTime[:], cooresLeakage[:], 'b--', label="COORES") + plt.plot(tough2Time[:], tough2Leakage[:], 'c--', label="TOUGH2") + plt.plot(timeRefined[:, 0] * inDays, + 100 * abs(compOutfluxRefined[:, 14, 0] / timeStepSize) / injectionRate, + 'r-', + label="GEOSX (FINE)") + plt.plot(timeCoarse[:, 0] * inDays, + 100 * abs(compOutfluxCoarse[:, 14, 0] / timeStepSize) / injectionRate, + 'k-', + label="GEOSX (COARSE)") + + plt.xlim(0, 2000) + plt.ylim(0, 0.14) + #ax = plt.axes() + #ax.xaxis.set_minor_locator(AutoMinorLocator()) + #ax.yaxis.set_minor_locator(AutoMinorLocator()) + + plt.grid() + plt.xlabel('Time [days]', fontweight='bold') + plt.ylabel('Leakage value [%]', fontweight='bold') + plt.legend(loc="lower right") + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/faultVerification/faultVerificationFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/faultVerification/faultVerificationFigure.hires.png new file mode 100644 index 00000000000..d7734f602d5 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/faultVerification/faultVerificationFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/faultVerification/faultVerificationFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/faultVerification/faultVerificationFigure.pdf new file mode 100644 index 00000000000..11b4410da05 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/faultVerification/faultVerificationFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/faultVerification/faultVerificationFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/faultVerification/faultVerificationFigure.png new file mode 100644 index 00000000000..7d60a31e88f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/faultVerification/faultVerificationFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/faultVerification/faultVerificationFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/faultVerification/faultVerificationFigure.py new file mode 100644 index 00000000000..20c937e0d34 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/faultVerification/faultVerificationFigure.py @@ -0,0 +1,206 @@ +import matplotlib +import numpy as np +import matplotlib.pyplot as plt +from matplotlib.ticker import (MultipleLocator, FormatStrFormatter, AutoMinorLocator) +import xml.etree.ElementTree as ElementTree +import csv +import os +import argparse + + +def getHydromechanicalParametersFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + param1 = tree.find('Constitutive/ElasticIsotropic') + param2 = tree.find('Constitutive/BiotPorosity') + param3 = tree.find('Constitutive/CompressibleSinglePhaseFluid') + param4 = tree.find('Constitutive/ConstantPermeability') + + hydromechanicalParameters = dict.fromkeys([ + "bulkModulus", "shearModulus", "biotCoefficient", "fluidViscosity", "fluidCompressibility", "porosity", + "permeability", "skemptonCoefficient", "poissonRatio", "undrainedPoissonRatio", "consolidationCoefficient" + ]) + + E = float(param1.get("defaultYoungModulus")) + nu = float(param1.get("defaultPoissonRatio")) + K = E / 3.0 / (1.0 - 2.0 * nu) + G = E / 2.0 / (1.0 + nu) + hydromechanicalParameters["bulkModulus"] = K + hydromechanicalParameters["shearModulus"] = G + Ks = float(param2.get("defaultGrainBulkModulus")) + + hydromechanicalParameters["biotCoefficient"] = 1.0 - K / Ks + hydromechanicalParameters["porosity"] = float(param2.get("defaultReferencePorosity")) + hydromechanicalParameters["fluidViscosity"] = float(param3.get("defaultViscosity")) + hydromechanicalParameters["fluidCompressibility"] = float(param3.get("compressibility")) + + perm = param4.get("permeabilityComponents") + perm = np.array(perm[1:-1].split(','), float) + hydromechanicalParameters["permeability"] = perm[0] + + phi = hydromechanicalParameters["porosity"] + cf = hydromechanicalParameters["fluidCompressibility"] + bBiot = hydromechanicalParameters["biotCoefficient"] + kp = hydromechanicalParameters["permeability"] + mu = hydromechanicalParameters["fluidViscosity"] + M = 1. / (phi * cf + (bBiot - phi) / Ks) + Ku = K + bBiot**2 * M + B = bBiot * M / Ku + nuu = (3. * nu + bBiot * B * (1 - 2. * nu)) / (3. - bBiot * B * (1 - 2. * nu)) + cc = 2. * kp / mu * B**2 * G * (1. - nu) * (1. + nuu)**2 / 9. / (1. - nuu) / (nuu - nu) + hydromechanicalParameters["skemptonCoefficient"] = B + hydromechanicalParameters["poissonRatio"] = nu + hydromechanicalParameters["undrainedPoissonRatio"] = nuu + hydromechanicalParameters["consolidationCoefficient"] = cc + + return hydromechanicalParameters + + +def getCompressiveStressFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + param = tree.findall('FieldSpecifications/FieldSpecification') + Stress = np.empty(3) + for elem in param: + if elem.get("name") == "stressXX" and elem.get("component") == "0": + Stress[0] = float(elem.get("scale")) + elif elem.get("name") == "stressYY" and elem.get("component") == "1": + Stress[1] = float(elem.get("scale")) + elif elem.get("name") == "stressZZ" and elem.get("component") == "2": + Stress[2] = float(elem.get("scale")) + elif elem.get("name") == "initialPressure" and elem.get("initialCondition") == "1": + Pr_i = float(elem.get("scale")) + + return Stress, Pr_i + + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + # File path + outputDir = args.outputDir + geosDir = args.geosDir + xmlFilePath = geosDir + "/inputFiles/poromechanics/faultPoroelastic_base.xml" + + # Extract info from XML + hydromechanicalParameters = getHydromechanicalParametersFromXML(xmlFilePath) + bBiot = hydromechanicalParameters["biotCoefficient"] + Stress, Pr_i = getCompressiveStressFromXML(xmlFilePath) + + # Load simulation result for case with impermeable fault + file = open(outputDir + "/result_imp.csv") + csvreader = csv.reader(file) + header = next(csvreader) + rows = [] + for row in csvreader: + rows.append(row) + file.close() + + rows = np.array(rows) + sxx_imp = np.empty(len(rows[:, 23])) + syy_imp = np.empty(len(rows[:, 23])) + sxy_imp = np.empty(len(rows[:, 23])) + pp_imp = np.empty(len(rows[:, 23])) + y_imp = np.empty(len(rows[:, 23])) + for i in range(0, len(rows[:, 23])): + pp_imp[i] = float(rows[i, 22]) + sxx_imp[i] = ((float(rows[i, 14]) - bBiot * pp_imp[i]) - (Stress[0] - bBiot * Pr_i)) / 1.0e6 + syy_imp[i] = ((float(rows[i, 15]) - bBiot * pp_imp[i]) - (Stress[1] - bBiot * Pr_i)) / 1.0e6 + sxy_imp[i] = float(rows[i, 19]) / 1.0e6 + y_imp[i] = float(rows[i, 26]) + + # Load simulation result for case with permeable fault + file = open( outputDir + "/result_per.csv") + csvreader = csv.reader(file) + header = next(csvreader) + rows = [] + for row in csvreader: + rows.append(row) + file.close() + + rows = np.array(rows) + sxx_per = np.empty(len(rows[:, 23])) + syy_per = np.empty(len(rows[:, 23])) + sxy_per = np.empty(len(rows[:, 23])) + pp_per = np.empty(len(rows[:, 23])) + y_per = np.empty(len(rows[:, 23])) + for i in range(0, len(rows[:, 23])): + pp_per[i] = float(rows[i, 22]) + sxx_per[i] = ((float(rows[i, 14]) - bBiot * pp_per[i]) - (Stress[0] - bBiot * Pr_i)) / 1.0e6 + syy_per[i] = ((float(rows[i, 15]) - bBiot * pp_per[i]) - (Stress[1] - bBiot * Pr_i)) / 1.0e6 + sxy_per[i] = float(rows[i, 19]) / 1.0e6 + y_per[i] = float(rows[i, 26]) + + # Load analytical solution + y_ana, sxx_per_ana, syy_per_ana, sxy_per_ana, sxx_imp_ana, syy_imp_ana, sxy_imp_ana = np.loadtxt( + "AnalyticalSolution.txt", skiprows=1, unpack=True) + + #Visulization + N1 = 1 + fsize = 32 + msize = 12 + lw = 8 + malpha = 0.6 + lalpha = 0.6 + + fig, ax = plt.subplots(1, 3, figsize=(32, 16)) + cmap = plt.get_cmap("tab10") + + ax[0].plot(sxx_imp_ana, y_ana, color=cmap(1), lw=lw, alpha=lalpha, label='Analytical_imp') + ax[0].plot(sxx_imp[1::N1], y_imp[1::N1], 'o', color=cmap(1), markersize=msize, alpha=malpha, label='GEOSX_imp') + ax[0].plot(sxx_per_ana, y_ana, color=cmap(2), lw=lw, alpha=lalpha, label='Analytical_per') + ax[0].plot(sxx_per[1::N1], y_per[1::N1], 'o', color=cmap(2), markersize=msize, alpha=malpha, label='GEOSX_per') + ax[0].set_xlim(-22.0, 8.00) + ax[0].set_ylim(-300.0, 300.0) + ax[0].xaxis.set_major_locator(MultipleLocator(10)) + ax[0].set_xlabel(r'$\Delta \sigma_{xx}$ (MPa)', size=fsize, weight="bold") + ax[0].set_ylabel(r'y (m)', size=fsize, weight="bold") + ax[0].legend(loc='upper left', fontsize=fsize * 0.6) + ax[0].grid(True) + ax[0].xaxis.set_tick_params(labelsize=fsize) + ax[0].yaxis.set_tick_params(labelsize=fsize) + + ax[1].plot(syy_imp_ana, y_ana, color=cmap(1), lw=lw, alpha=lalpha, label='Analytical_imp') + ax[1].plot(syy_imp[1::N1], y_imp[1::N1], 'o', color=cmap(1), markersize=msize, alpha=malpha, label='GEOSX_imp') + ax[1].plot(syy_per_ana, y_ana, color=cmap(2), lw=lw, alpha=lalpha, label='Analytical_per') + ax[1].plot(syy_per[1::N1], y_per[1::N1], 'o', color=cmap(2), markersize=msize, alpha=malpha, label='GEOSX_per') + ax[1].set_xlim(-12.0, 12.00) + ax[1].set_ylim(-300.0, 300.0) + ax[1].xaxis.set_major_locator(MultipleLocator(4)) + ax[1].set_xlabel(r'$\Delta \sigma_{yy}$ (MPa)', size=fsize, weight="bold") + ax[1].set_ylabel(r'y (m)', size=fsize, weight="bold") + #ax[1].legend(loc='upper right',fontsize=fsize*0.6) + ax[1].grid(True) + ax[1].xaxis.set_tick_params(labelsize=fsize) + ax[1].yaxis.set_tick_params(labelsize=fsize) + + ax[2].plot(sxy_imp_ana, y_ana, color=cmap(1), lw=lw, alpha=lalpha, label='Analytical_imp') + ax[2].plot(sxy_imp[1::N1], y_imp[1::N1], 'o', color=cmap(1), markersize=msize, alpha=malpha, label='GEOSX_imp') + ax[2].plot(sxy_per_ana, y_ana, color=cmap(2), lw=lw, alpha=lalpha, label='Analytical_per') + ax[2].plot(sxy_per[1::N1], y_per[1::N1], 'o', color=cmap(2), markersize=msize, alpha=malpha, label='GEOSX_per') + ax[2].set_xlim(-14.0, 14.00) + ax[2].set_ylim(-300.0, 300.0) + ax[2].xaxis.set_major_locator(MultipleLocator(7)) + ax[2].set_xlabel(r'$\Delta \sigma_{xy}$ (MPa)', size=fsize, weight="bold") + ax[2].set_ylabel(r'y (m)', size=fsize, weight="bold") + #ax[2].legend(loc='upper right',fontsize=fsize*0.6) + ax[2].grid(True) + ax[2].xaxis.set_tick_params(labelsize=fsize) + ax[2].yaxis.set_tick_params(labelsize=fsize) + + plt.subplots_adjust(left=0.1, bottom=0.1, right=0.9, top=0.9, wspace=0.4, hspace=0.4) + + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/intersectFrac/intersectFracFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/intersectFrac/intersectFracFigure.hires.png new file mode 100644 index 00000000000..12bc0f4c079 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/intersectFrac/intersectFracFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/intersectFrac/intersectFracFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/intersectFrac/intersectFracFigure.pdf new file mode 100644 index 00000000000..36d1dd636bc Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/intersectFrac/intersectFracFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/intersectFrac/intersectFracFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/intersectFrac/intersectFracFigure.png new file mode 100644 index 00000000000..23aa1df9036 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/intersectFrac/intersectFracFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/intersectFrac/intersectFracFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/intersectFrac/intersectFracFigure.py new file mode 100644 index 00000000000..26c97f1cd84 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/intersectFrac/intersectFracFigure.py @@ -0,0 +1,218 @@ +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import h5py +import xml.etree.ElementTree as ElementTree +from mpmath import * +import math +from math import sin, cos, tan, exp, atan, asin +from mpl_toolkits.mplot3d import axes3d +import os +import argparse + + +class Sneddon: + + def __init__(self, mechanicalParameters, length, pressure): + K = mechanicalParameters["bulkModulus"] + G = mechanicalParameters["shearModulus"] + E = (9 * K * G) / (3 * K + G) + nu = E / (2 * G) - 1 + + self.scaling = (4 * (1 - nu**2)) * pressure / E + self.halfLength = length + + def computeAperture(self, x): + return self.scaling * (self.halfLength**2 - x**2)**0.5 + + +def getMechanicalParametersFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + param = tree.find('Constitutive/ElasticIsotropic') + + mechanicalParameters = dict.fromkeys(["bulkModulus", "shearModulus", "frictionCoefficient"]) + mechanicalParameters["bulkModulus"] = float(param.get("defaultBulkModulus")) + mechanicalParameters["shearModulus"] = float(param.get("defaultShearModulus")) + + param = tree.find('Constitutive/Coulomb') + mechanicalParameters["frictionCoefficient"] = float(param.get("frictionCoefficient")) + return mechanicalParameters + + +def getCompressiveStressFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + param = tree.findall('FieldSpecifications/FieldSpecification') + + found_stress = False + for elem in param: + if elem.get("fieldName") == "rock_stress" and elem.get("component") == "1": + stress = float(elem.get("scale")) * (-1) + found_stress = True + if found_stress: break + + return stress + + +def getFracturePressureFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + param = tree.findall('FieldSpecifications/Traction') + + found_pressure = False + for elem in param: + if elem.get("name") == "NormalTraction" and elem.get("tractionType") == "normal": + pressure = float(elem.get("scale")) * (-1) + found_pressure = True + if found_pressure: break + + return pressure + + +def getFractureGeometryFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + param = tree.findall('Geometry/Rectangle') + + for elem in param: + if elem.get("name") == "fracture1": + dimensions = elem.get("dimensions") + dimensions = [float(i) for i in dimensions[1:-1].split(",")] + length1 = dimensions[0] / 2 + elif elem.get("name") == "fracture2": + dimensions = elem.get("dimensions") + dimensions = [float(i) for i in dimensions[1:-1].split(",")] + length2 = dimensions[0] / 2 + + return length1, length2 + + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + # File path + outputDir = args.outputDir + geosDir = args.geosDir + hdf5File1Path = outputDir + "/traction_history.hdf5" + hdf5File2Path = outputDir + "/displacementJump_history.hdf5" + xmlFilePath = geosDir + "/inputFiles/lagrangianContactMechanics/TFrac_base.xml" + + # Read HDF5 + # Global Coordinate of Fracture Element Center + hf = h5py.File(hdf5File1Path, 'r') + xl = hf.get('traction elementCenter') + xl = np.asarray(xl) + xcord = xl[0, :, 0] + ycord = xl[0, :, 1] + zcord = xl[0, :, 2] + + # Local Normal Traction + trac = hf.get('traction') + trac = np.asarray(trac) + normalTraction = trac[-1, :, 0] + + # Local Shear Displacement + hf = h5py.File(hdf5File2Path, 'r') + jump = hf.get('displacementJump') + jump = np.asarray(jump) + displacementJump = jump[-1, :, 1] + aperture = jump[-1, :, 0] + + # Extract Local Inform for The Horizontal Fracture + xlist = [] + tnlist = [] + gtlist = [] + for i in range(0, len(zcord)): + if abs(ycord[i] / 50.0 - 1.) < 0.01: + xlist.append(xcord[i]) + tnlist.append(-normalTraction[i] * 1.0e-6) + gtlist.append(displacementJump[i] * 1.e3) + + # Extract Local Inform for The Vertical Fracture + ylist = [] + apertlist = [] + for i in range(0, len(zcord)): + if abs(xcord[i] - 0.) < 0.01: + ylist.append(ycord[i]) + apertlist.append(aperture[i] * 1.e3) + + # Load numerical solutions from literature work + r1, tn_literature = np.loadtxt('NormalTraction.txt', skiprows=0, unpack=True) + r2, gt_literature = np.loadtxt('Slip.txt', skiprows=0, unpack=True) + r3, ap_literature = np.loadtxt('Aperture.txt', skiprows=0, unpack=True) + + # Extract Mechanical Properties and Fracture Geometry from XML + mechanicalParameters = getMechanicalParametersFromXML(xmlFilePath) + compressiveStress = getCompressiveStressFromXML(xmlFilePath) + length1, length2 = getFractureGeometryFromXML(xmlFilePath) + appliedPressure = getFracturePressureFromXML(xmlFilePath) + + # Initialize Sneddon's analytical solution + sneddonAnalyticalSolution = Sneddon(mechanicalParameters, length1, appliedPressure) + + # Plot analytical (continuous line) and numerical (markers) aperture solution + x_analytical = np.linspace(-length1, length1, 101, endpoint=True) + aperture_analytical = np.empty(len(x_analytical)) + i = 0 + for xCell in x_analytical: + aperture_analytical[i] = sneddonAnalyticalSolution.computeAperture(xCell) + i += 1 + + fsize = 30 + msize = 12 + lw = 6 + fig, ax = plt.subplots(2, 2, figsize=(32, 18)) + cmap = plt.get_cmap("tab10") + + ax[0, 0].plot(r1 - length2, tn_literature, color=cmap(-1), label='Phan et al.(2003)', lw=lw) + ax[0, 0].plot(xlist, tnlist, 'o', alpha=0.6, color=cmap(2), mec='k', label='GEOS Results', markersize=msize) + ax[0, 0].grid() + ax[0, 0].set_xlabel('Horizontal Frac Length [m]', size=fsize, weight="bold") + ax[0, 0].set_ylabel('Normal Traction [MPa]', size=fsize, weight="bold") + ax[0, 0].legend(loc='lower left', fontsize=fsize * 0.8) + ax[0, 0].xaxis.set_tick_params(labelsize=fsize) + ax[0, 0].yaxis.set_tick_params(labelsize=fsize) + + ax[0, 1].plot(r2 - length2, gt_literature, color=cmap(-1), label='Phan et al.(2003)', lw=lw) + ax[0, 1].plot(xlist, gtlist, 'o', alpha=0.6, color=cmap(2), mec='k', label='GEOS Results', markersize=msize) + ax[0, 1].grid() + ax[0, 1].set_xlabel('Horizontal Frac Length [m]', size=fsize, weight="bold") + ax[0, 1].set_ylabel('Slip [mm]', size=fsize, weight="bold") + ax[0, 1].legend(loc='lower left', fontsize=fsize * 0.8) + ax[0, 1].xaxis.set_tick_params(labelsize=fsize) + ax[0, 1].yaxis.set_tick_params(labelsize=fsize) + + N1 = 2 + ax[1, 0].plot(-r3 + length1, ap_literature, color=cmap(-1), label='Phan et al.(2003)', lw=lw) + ax[1, 0].plot(ylist[0::N1], + apertlist[0::N1], + 'o', + alpha=0.6, + color=cmap(2), + mec='k', + label='GEOS Results', + markersize=msize) + ax[1, 0].grid() + ax[1, 0].set_xlabel('Vertical Frac Length [m]', size=fsize, weight="bold") + ax[1, 0].set_ylabel('Aperture [mm]', size=fsize, weight="bold") + ax[1, 0].legend(loc='lower right', fontsize=fsize * 0.8) + ax[1, 0].xaxis.set_tick_params(labelsize=fsize) + ax[1, 0].yaxis.set_tick_params(labelsize=fsize) + + ax[1, 1].axis('off') + + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/singleFracCompression/singleFracCompressionFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/singleFracCompression/singleFracCompressionFigure.hires.png new file mode 100644 index 00000000000..b93b33f44db Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/singleFracCompression/singleFracCompressionFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/singleFracCompression/singleFracCompressionFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/singleFracCompression/singleFracCompressionFigure.pdf new file mode 100644 index 00000000000..349c73ba9e9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/singleFracCompression/singleFracCompressionFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/singleFracCompression/singleFracCompressionFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/singleFracCompression/singleFracCompressionFigure.png new file mode 100644 index 00000000000..6ae68bf8ef8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/singleFracCompression/singleFracCompressionFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/singleFracCompression/singleFracCompressionFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/singleFracCompression/singleFracCompressionFigure.py new file mode 100644 index 00000000000..32afe5d42b2 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/singleFracCompression/singleFracCompressionFigure.py @@ -0,0 +1,187 @@ +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import h5py +import xml.etree.ElementTree as ElementTree +from mpmath import * +import math +from math import sin, cos, tan, exp, atan, asin +from mpl_toolkits.mplot3d import axes3d +import os +import argparse + + +class Analytical: + + def __init__(self, mechanicalParameters, length, inclination, stress): + K = mechanicalParameters["bulkModulus"] + G = mechanicalParameters["shearModulus"] + E = (9 * K * G) / (3 * K + G) + nu = E / (2 * G) - 1 + + self.halfLength = length + self.inc = inclination + self.stress = stress + self.scaling = (4 * (1 - nu**2)) / E + self.frictionCoefficient = mechanicalParameters["frictionCoefficient"] + + def computeNormalTraction(self, x): + return -self.stress * pow(sin(self.inc), 2) + + def computeShearDisplacement(self, x): + return self.scaling * (self.stress * sin(self.inc) * + (cos(self.inc) - sin(self.inc) * self.frictionCoefficient)) * pow( + (self.halfLength**2 - (self.halfLength - x - 1.)**2), 0.5) + + +def getMechanicalParametersFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + param = tree.find('Constitutive/ElasticIsotropic') + + mechanicalParameters = dict.fromkeys(["bulkModulus", "shearModulus", "frictionCoefficient"]) + mechanicalParameters["bulkModulus"] = float(param.get("defaultBulkModulus")) + mechanicalParameters["shearModulus"] = float(param.get("defaultShearModulus")) + + param = tree.find('Constitutive/Coulomb') + mechanicalParameters["frictionCoefficient"] = float(param.get("frictionCoefficient")) + return mechanicalParameters + + +def getCompressiveStressFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + param = tree.findall('FieldSpecifications/FieldSpecification') + + found_stress = False + for elem in param: + if elem.get("fieldName") == "rock_stress" and elem.get("component") == "0": + stress = float(elem.get("scale")) * (-1) + found_stress = True + if found_stress: break + + return stress + + +def getFractureGeometryFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + rectangle = tree.find('Geometry/Rectangle') + dimensions = rectangle.get("dimensions") + dimensions = [float(i) for i in dimensions[1:-1].split(",")] + length = dimensions[0] / 2 + origin = rectangle.get("origin") + origin = [float(i) for i in origin[1:-1].split(",")] + direction = rectangle.get("lengthVector") + direction = [float(i) for i in direction[1:-1].split(",")] + inclination = atan(direction[1] / direction[0]) + + return length, origin[0], inclination + + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + # File path + outputDir = args.outputDir + geosDir = args.geosDir + hdf5File1Path = outputDir + "/traction_history.hdf5" + hdf5File2Path = outputDir + "/displacementJump_history.hdf5" + xmlFile1Path = geosDir + "/inputFiles/lagrangianContactMechanics/SingleFracCompression_base.xml" + xmlFile2Path = geosDir + "/inputFiles/lagrangianContactMechanics/SingleFracCompression_benchmark.xml" + + # Read HDF5 + # Global Coordinate of Fracture Element Center + hf = h5py.File(hdf5File1Path, 'r') + xl = hf.get('traction elementCenter') + xl = np.asarray(xl) + xcord = xl[0, :, 0] + ycord = xl[0, :, 1] + zcord = xl[0, :, 2] + + # Local Normal Traction + hf = h5py.File(hdf5File1Path, 'r') + trac = hf.get('traction') + trac = np.asarray(trac) + normalTraction = trac[0, :, 0] + + # Local Shear Displacement + hf = h5py.File(hdf5File2Path, 'r') + jump = hf.get('displacementJump') + jump = np.asarray(jump) + displacementJump = jump[0, :, 1] + + # Extract Local Inform for The Middle Layer + xlist = [] + ylist = [] + xloc = [] + tnlist = [] + gtlist = [] + for i in range(0, len(zcord)): + if abs(zcord[i] / 0.025 - 1.) < 0.01: + xlist.append(xcord[i]) + ylist.append(ycord[i]) + xloc.append(pow(xcord[i]**2 + ycord[i]**2, 0.5) * xcord[i] / abs(xcord[i])) + tnlist.append(normalTraction[i] / 1.0e6) + gtlist.append(displacementJump[i] * 1.e3) + + # Extract Mechanical Properties and Fracture Geometry from XML + mechanicalParameters = getMechanicalParametersFromXML(xmlFile1Path) + compressiveStress = getCompressiveStressFromXML(xmlFile1Path) + length, origin, inclination = getFractureGeometryFromXML(xmlFile2Path) + + # Initialize analytical solution + AnalyticalSolution = Analytical(mechanicalParameters, length, inclination, compressiveStress) + + # Plot Analytical (continuous line) and Numerical (markers) Solution + x_analytical = np.linspace(-length, length, 101, endpoint=True) + tn_analytical = np.empty(len(x_analytical)) + gt_analytical = np.empty(len(x_analytical)) + i = 0 + for xCell in x_analytical: + tn_analytical[i] = AnalyticalSolution.computeNormalTraction(xCell) / 1.0e6 + gt_analytical[i] = AnalyticalSolution.computeShearDisplacement(xCell) * 1.e3 + i += 1 + + fsize = 30 + msize = 10 + lw = 8 + fig, ax = plt.subplots(1, 2, figsize=(32, 12)) + cmap = plt.get_cmap("tab10") + + ax[0].plot(x_analytical, tn_analytical, color=cmap(-1), label='Analytical Solution', lw=lw) + ax[0].plot(xloc, tnlist, 'o', alpha=0.6, color=cmap(2), mec='k', label='Numerical Solution', markersize=msize) + ax[0].grid() + ax[0].set_xlim(-1, 1) + ax[0].set_ylim(-18, 2) + ax[0].set_xlabel('Length [m]', size=fsize, weight="bold") + ax[0].set_ylabel('Normal Traction [MPa]', size=fsize, weight="bold") + ax[0].legend(bbox_to_anchor=(0.5, 0.2), loc='center', borderaxespad=0., fontsize=fsize) + ax[0].xaxis.set_tick_params(labelsize=fsize) + ax[0].yaxis.set_tick_params(labelsize=fsize) + + ax[1].plot(x_analytical, gt_analytical, color=cmap(-1), label='Analytical Solution', lw=lw) + ax[1].plot(xloc, gtlist, 'o', alpha=0.6, color=cmap(2), mec='k', label='Numerical Solution', markersize=msize) + ax[1].grid() + ax[1].set_xlim(-1, 1) + ax[1].set_ylim(0, 4) + ax[1].set_xlabel('Length [m]', size=fsize, weight="bold") + ax[1].set_ylabel('Relative Shear Displacement [mm]', size=fsize, weight="bold") + ax[1].legend(bbox_to_anchor=(0.5, 0.2), loc='center', borderaxespad=0., fontsize=fsize) + ax[1].xaxis.set_tick_params(labelsize=fsize) + ax[1].yaxis.set_tick_params(labelsize=fsize) + + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/sneddon/sneddonFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/sneddon/sneddonFigure.hires.png new file mode 100644 index 00000000000..cb8161d69d6 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/sneddon/sneddonFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/sneddon/sneddonFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/sneddon/sneddonFigure.pdf new file mode 100644 index 00000000000..f4e6b4fc63b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/sneddon/sneddonFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/sneddon/sneddonFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/sneddon/sneddonFigure.png new file mode 100644 index 00000000000..68af695d015 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/sneddon/sneddonFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/sneddon/sneddonFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/sneddon/sneddonFigure.py new file mode 100644 index 00000000000..6562cfdc8e9 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/faultMechanics/sneddon/sneddonFigure.py @@ -0,0 +1,174 @@ +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import h5py +import xml.etree.ElementTree as ElementTree +from mpmath import * +import math +import os +import argparse + + +class Sneddon: + + def __init__(self, mechanicalParameters, length, pressure): + K = mechanicalParameters["bulkModulus"] + G = mechanicalParameters["shearModulus"] + E = (9 * K * G) / (3 * K + G) + nu = E / (2 * G) - 1 + + self.scaling = (4 * (1 - nu**2)) * pressure / E + self.halfLength = length + + def computeAperture(self, x): + return self.scaling * (self.halfLength**2 - x**2)**0.5 + + +def getMechanicalParametersFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + param = tree.find('Constitutive/ElasticIsotropic') + + mechanicalParameters = dict.fromkeys(["bulkModulus", "shearModulus"]) + mechanicalParameters["bulkModulus"] = float(param.get("defaultBulkModulus")) + mechanicalParameters["shearModulus"] = float(param.get("defaultShearModulus")) + return mechanicalParameters + + +def getFracturePressureFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + param = tree.findall('FieldSpecifications/FieldSpecification') + pressure = 0.0 + found_traction = False + for elem in param: + if elem.get("fieldName") == "traction" and elem.get("component") == "0": + pressure = float(elem.get("scale")) * (-1) + found_traction = True + if found_traction: break + + return pressure + + +def getFractureLengthFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + rectangle = tree.find('Geometry/Rectangle') + dimensions = rectangle.get("dimensions") + dimensions = [float(i) for i in dimensions[1:-1].split(",")] + length = dimensions[0] / 2 + origin = rectangle.get("origin") + origin = [float(i) for i in origin[1:-1].split(",")] + + return length, origin[0] + + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + #-------- EmbeddeFrac File path + outputDir = args.outputDir + geosDir = args.geosDir + hdf5File1Path = outputDir + "/displacementJump_embeddedFrac.hdf5" + + # Read HDF5 + hf = h5py.File(hdf5File1Path, 'r') + jump = hf.get('displacementJump') + jump = np.asarray(jump) + aperture_EmbeddeFrac = jump[0, :, 0] + x = hf.get('displacementJump elementCenter') + loc_EmbeddeFrac = x[0, :, 1] + + #-------- Lagrange Contact File path + hdf5File2Path = "displacementJump_contactMechanics.hdf5" + + # Read HDF5 + hf = h5py.File(hdf5File2Path, 'r') + jump = hf.get('displacementJump') + jump = np.asarray(jump) + aperture_Contact = jump[0, :, 0] + x = hf.get('displacementJump elementCenter') + loc_Contact = x[0, :, 1] + + #-------- HydroFrac File path + hdf5File3Path = "displacementJump_hydroFrac.hdf5" + + # Read HDF5 + hf = h5py.File(hdf5File3Path, 'r') + jump = hf.get('elementAperture') + jump = np.asarray(jump) + aperture_HydroFrac = jump[0, :] + x = hf.get('elementAperture elementCenter') + loc_HydroFrac = x[0, :, 1] + + #-------- Extract info from XML + xmlFilePath = geosDir + "/inputFiles/efemFractureMechanics/Sneddon_embeddedFrac" + + mechanicalParameters = getMechanicalParametersFromXML(xmlFilePath+"_base.xml") + appliedPressure = getFracturePressureFromXML(xmlFilePath+"_base.xml") + + # Get length of the fracture + length, origin = getFractureLengthFromXML(xmlFilePath+"_verification.xml") + + # Initialize Sneddon's analytical solution + sneddonAnalyticalSolution = Sneddon(mechanicalParameters, length, appliedPressure) + + # Plot analytical (continuous line) and numerical (markers) aperture solution + x_analytical = np.linspace(-length, length, 501, endpoint=True) + aperture_analytical = np.empty(len(x_analytical)) + i = 0 + for xCell in x_analytical: + aperture_analytical[i] = sneddonAnalyticalSolution.computeAperture(xCell) + i += 1 + + fsize = 30 + msize = 15 + lw = 6 + fig, ax = plt.subplots(1, figsize=(16, 12)) + cmap = plt.get_cmap("tab10") + + N1 = 1 + ax.plot(x_analytical, aperture_analytical * 1.0e3, color='k', label='Analytical Solution', lw=lw) + ax.plot(loc_EmbeddeFrac[0::N1], + aperture_EmbeddeFrac[0::N1] * 1.0e3, + 'o', + color=cmap(0), + label='Embedded Fracture', + markersize=msize * 0.6, + alpha=0.8) + ax.plot(loc_Contact[0::N1], + aperture_Contact[0::N1] * 1.0e3, + 's', + color=cmap(4), + label='Lagrange Contact', + markersize=msize * 0.6, + alpha=0.6) + ax.plot(loc_HydroFrac[0::N1], + aperture_HydroFrac[0::N1] * 1.0e3, + 'X', + color=cmap(1), + label='HydroFrac Solver', + markersize=msize * 0.6, + alpha=0.4) + + ax.grid() + ax.set_xlabel('Fracture Length [m]', size=fsize, weight="bold") + ax.set_ylabel('Fracture Aperture [mm]', size=fsize, weight="bold") + ax.legend(bbox_to_anchor=(0.5, 0.2), loc='center', borderaxespad=0., fontsize=fsize) + ax.xaxis.set_tick_params(labelsize=fsize) + ax.yaxis.set_tick_params(labelsize=fsize) + + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdToughnessDominated/kgdToughnessDominatedFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdToughnessDominated/kgdToughnessDominatedFigure.hires.png new file mode 100644 index 00000000000..cf6f3822b0d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdToughnessDominated/kgdToughnessDominatedFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdToughnessDominated/kgdToughnessDominatedFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdToughnessDominated/kgdToughnessDominatedFigure.pdf new file mode 100644 index 00000000000..665a97cbb4e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdToughnessDominated/kgdToughnessDominatedFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdToughnessDominated/kgdToughnessDominatedFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdToughnessDominated/kgdToughnessDominatedFigure.png new file mode 100644 index 00000000000..10d067ab384 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdToughnessDominated/kgdToughnessDominatedFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdToughnessDominated/kgdToughnessDominatedFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdToughnessDominated/kgdToughnessDominatedFigure.py new file mode 100644 index 00000000000..98c7e241dd7 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdToughnessDominated/kgdToughnessDominatedFigure.py @@ -0,0 +1,9 @@ +import sys +import os +import argparse + + +sys.path.append('../../../../../../../inputFiles/hydraulicFracturing/scripts') +import hydrofractureFigure + +hydrofractureFigure.main( geosDir='../../../../../../..',xmlFilePrefix='kgdToughnessDominated') diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdValidation/kgdValidationFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdValidation/kgdValidationFigure.hires.png new file mode 100644 index 00000000000..4e736001e9f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdValidation/kgdValidationFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdValidation/kgdValidationFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdValidation/kgdValidationFigure.pdf new file mode 100644 index 00000000000..433e9acde89 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdValidation/kgdValidationFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdValidation/kgdValidationFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdValidation/kgdValidationFigure.png new file mode 100644 index 00000000000..e8b70ce3baf Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdValidation/kgdValidationFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdValidation/kgdValidationFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdValidation/kgdValidationFigure.py new file mode 100644 index 00000000000..e16cbbaba83 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdValidation/kgdValidationFigure.py @@ -0,0 +1,147 @@ +import matplotlib +import numpy as np +import matplotlib.pyplot as plt +import os +import argparse + + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + outputDir = args.outputDir + + + # Experiments (Rubin, 1983) + H = 0.055 + Tinj = 3.7 + tlist = [3.7, 11.9, 12.55, 15.5, 16.05, 19.25, 24.30, 30.35, 38.50, 46.15, 53.85, 61.50, 68.90] + Pblist = [0, 5.43, 5.26, 4.20, 4.01, 3.23, 2.51, 2.03, 1.61, 1.39, 1.22, 1.07, 0.97] + lenlist = [24, 30, 31, 40, 43, 50, 60, 70, 81, 90, 97, 105, 112] + widlist = [25, 69, 78, 133, 142, 185, 236, 294, 364, 420, 470, 514, 552] + P57list = [0.371, 0.362, 0.365, 0.362, 0.359, 0.412, 0.886, 1.396, 1.279, 1.153, 1.034, 0.942, 0.861] + P58list = [1.677, 4.145, 4.134, 3.507, 3.381, 2.827, 2.292, 1.894, 1.557, 1.345, 1.172, 1.050, 0.949] + + # Load GEOSX results + GTime, GWellP, G58P, G57P, GAper, GArea = np.loadtxt(outputDir + "/model_results.txt", skiprows=1, unpack=True) + GLength = GArea / H * 1000 + GTime = GTime + Tinj + + # Visulization + N1 = 1 + fsize = 20 + msize = 15 + lw = 8 + lablelist = ['Experiment (Rubin, 1983)', 'GEOSX'] + fig, ax = plt.subplots(3, 2, figsize=(32, 18)) + cmap = plt.get_cmap("tab10") + + ax[0, 0].plot(tlist, + Pblist, + 'o', + alpha=1.0, + color=cmap(0), + mec=cmap(0), + fillstyle='none', + markersize=msize, + mew=5, + label=lablelist[0]) + ax[0, 0].plot(GTime, GWellP / 1000000, lw=lw, alpha=0.5, color=cmap(2), label=lablelist[1]) + ax[0, 0].set_xlim([0, max(GTime)]) + ax[0, 0].set_ylim(0, 10) + ax[0, 0].set_xlabel(r'Time (s)', size=fsize, weight="bold") + ax[0, 0].set_ylabel(r'Pressure @ Well (MPa)', size=fsize, weight="bold") + ax[0, 0].legend(loc='upper right', fontsize=fsize) + ax[0, 0].grid(True) + ax[0, 0].xaxis.set_tick_params(labelsize=fsize) + ax[0, 0].yaxis.set_tick_params(labelsize=fsize) + + ax[1, 0].plot(tlist, + P58list, + 'o', + alpha=1.0, + color=cmap(0), + mec=cmap(0), + fillstyle='none', + markersize=msize, + mew=5, + label=lablelist[0]) + ax[1, 0].plot(GTime[13:], G58P[13:] / 1000000, lw=lw, alpha=0.5, color=cmap(2), label=lablelist[1]) + ax[1, 0].set_xlim([0, max(GTime)]) + ax[1, 0].set_ylim(0, 5) + ax[1, 0].set_xlabel(r'Time (s)', size=fsize, weight="bold") + ax[1, 0].set_ylabel(r'Pressure @ Gage 58 (MPa)', size=fsize, weight="bold") + ax[1, 0].grid(True) + ax[1, 0].xaxis.set_tick_params(labelsize=fsize) + ax[1, 0].yaxis.set_tick_params(labelsize=fsize) + + ax[2, 0].plot(tlist, + P57list, + 'o', + alpha=1.0, + color=cmap(0), + mec=cmap(0), + fillstyle='none', + markersize=msize, + mew=5, + label=lablelist[0]) + ax[2, 0].plot(GTime, G57P / 1000000, lw=lw, alpha=0.5, color=cmap(2), label=lablelist[1]) + ax[2, 0].set_xlim([0, max(GTime)]) + ax[2, 0].set_ylim(0, 5) + ax[2, 0].set_xlabel(r'Time (s)', size=fsize, weight="bold") + ax[2, 0].set_ylabel(r'Pressure @ Gage 57 (MPa)', size=fsize, weight="bold") + ax[2, 0].grid(True) + ax[2, 0].xaxis.set_tick_params(labelsize=fsize) + ax[2, 0].yaxis.set_tick_params(labelsize=fsize) + + ax[0, 1].axis('off') + + ax[1, 1].plot(tlist, + lenlist, + 'o', + alpha=1.0, + color=cmap(0), + mec=cmap(0), + fillstyle='none', + markersize=msize, + mew=5, + label=lablelist[0]) + ax[1, 1].plot(GTime, GLength, lw=lw, alpha=0.5, color=cmap(2), label=lablelist[1]) + ax[1, 1].set_xlim([0, max(GTime)]) + ax[1, 1].set_ylim(0, 150) + ax[1, 1].set_xlabel(r'Time (s)', size=fsize, weight="bold") + ax[1, 1].set_ylabel(r'Fracture Length (mm)', size=fsize, weight="bold") + ax[1, 1].grid(True) + ax[1, 1].xaxis.set_tick_params(labelsize=fsize) + ax[1, 1].yaxis.set_tick_params(labelsize=fsize) + + ax[2, 1].plot(tlist, + widlist, + 'o', + alpha=1.0, + color=cmap(0), + mec=cmap(0), + fillstyle='none', + markersize=msize, + mew=5, + label=lablelist[0]) + ax[2, 1].plot(GTime, GAper * 1e6, lw=lw, alpha=0.5, color=cmap(2), label=lablelist[1]) + ax[2, 1].set_xlim([0, max(GTime)]) + ax[2, 1].set_ylim(0, 800) + ax[2, 1].set_xlabel(r'Time (s)', size=fsize, weight="bold") + ax[2, 1].set_ylabel(r'Aperture @ LVDT (um)', size=fsize, weight="bold") + ax[2, 1].grid(True) + ax[2, 1].xaxis.set_tick_params(labelsize=fsize) + ax[2, 1].yaxis.set_tick_params(labelsize=fsize) + + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdViscosityDominated/kgdViscosityDominatedFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdViscosityDominated/kgdViscosityDominatedFigure.hires.png new file mode 100644 index 00000000000..32685380370 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdViscosityDominated/kgdViscosityDominatedFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdViscosityDominated/kgdViscosityDominatedFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdViscosityDominated/kgdViscosityDominatedFigure.pdf new file mode 100644 index 00000000000..110ac9b87ac Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdViscosityDominated/kgdViscosityDominatedFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdViscosityDominated/kgdViscosityDominatedFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdViscosityDominated/kgdViscosityDominatedFigure.png new file mode 100644 index 00000000000..533cafa0d60 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdViscosityDominated/kgdViscosityDominatedFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdViscosityDominated/kgdViscosityDominatedFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdViscosityDominated/kgdViscosityDominatedFigure.py new file mode 100644 index 00000000000..94fca42b18e --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/kgdViscosityDominated/kgdViscosityDominatedFigure.py @@ -0,0 +1,8 @@ +import sys +import os +import argparse + +sys.path.append('../../../../../../../inputFiles/hydraulicFracturing/scripts') +import hydrofractureFigure + +hydrofractureFigure.main( geosDir='../../../../../../..',xmlFilePrefix='kgdViscosityDominated') diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracToughnessDominated/pennyShapedToughnessDominatedFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracToughnessDominated/pennyShapedToughnessDominatedFigure.hires.png new file mode 100644 index 00000000000..74135974f8a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracToughnessDominated/pennyShapedToughnessDominatedFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracToughnessDominated/pennyShapedToughnessDominatedFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracToughnessDominated/pennyShapedToughnessDominatedFigure.pdf new file mode 100644 index 00000000000..04c79cda087 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracToughnessDominated/pennyShapedToughnessDominatedFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracToughnessDominated/pennyShapedToughnessDominatedFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracToughnessDominated/pennyShapedToughnessDominatedFigure.png new file mode 100644 index 00000000000..02e2a2e2564 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracToughnessDominated/pennyShapedToughnessDominatedFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracToughnessDominated/pennyShapedToughnessDominatedFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracToughnessDominated/pennyShapedToughnessDominatedFigure.py new file mode 100644 index 00000000000..1fbe44c6ddf --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracToughnessDominated/pennyShapedToughnessDominatedFigure.py @@ -0,0 +1,8 @@ +import sys +import os +import argparse + +sys.path.append('../../../../../../../inputFiles/hydraulicFracturing/scripts') +import hydrofractureFigure + +hydrofractureFigure.main( geosDir='../../../../../../..',xmlFilePrefix='pennyShapedToughnessDominated') diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracViscosityDominated/pennyShapedViscosityDominatedFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracViscosityDominated/pennyShapedViscosityDominatedFigure.hires.png new file mode 100644 index 00000000000..e32404b95fa Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracViscosityDominated/pennyShapedViscosityDominatedFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracViscosityDominated/pennyShapedViscosityDominatedFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracViscosityDominated/pennyShapedViscosityDominatedFigure.pdf new file mode 100644 index 00000000000..e8252a10ebe Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracViscosityDominated/pennyShapedViscosityDominatedFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracViscosityDominated/pennyShapedViscosityDominatedFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracViscosityDominated/pennyShapedViscosityDominatedFigure.png new file mode 100644 index 00000000000..7c5a94a0a14 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracViscosityDominated/pennyShapedViscosityDominatedFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracViscosityDominated/pennyShapedViscosityDominatedFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracViscosityDominated/pennyShapedViscosityDominatedFigure.py new file mode 100644 index 00000000000..a2ca7bea56f --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pennyFracViscosityDominated/pennyShapedViscosityDominatedFigure.py @@ -0,0 +1,8 @@ +import sys +import os +import argparse + +sys.path.append('../../../../../../../inputFiles/hydraulicFracturing/scripts') +import hydrofractureFigure + +hydrofractureFigure.main( geosDir='../../../../../../..',xmlFilePrefix='pennyShapedViscosityDominated') diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pknFracViscosityDominated/pknViscosityDominatedFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pknFracViscosityDominated/pknViscosityDominatedFigure.hires.png new file mode 100644 index 00000000000..21f15b280f0 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pknFracViscosityDominated/pknViscosityDominatedFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pknFracViscosityDominated/pknViscosityDominatedFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pknFracViscosityDominated/pknViscosityDominatedFigure.pdf new file mode 100644 index 00000000000..903b741c205 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pknFracViscosityDominated/pknViscosityDominatedFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pknFracViscosityDominated/pknViscosityDominatedFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pknFracViscosityDominated/pknViscosityDominatedFigure.png new file mode 100644 index 00000000000..29e20148c25 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pknFracViscosityDominated/pknViscosityDominatedFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pknFracViscosityDominated/pknViscosityDominatedFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pknFracViscosityDominated/pknViscosityDominatedFigure.py new file mode 100644 index 00000000000..824b5c3dfe8 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/pknFracViscosityDominated/pknViscosityDominatedFigure.py @@ -0,0 +1,8 @@ +import sys +import os +import argparse + +sys.path.append('../../../../../../../inputFiles/hydraulicFracturing/scripts') +import hydrofractureFigure + +hydrofractureFigure.main( geosDir='../../../../../../..',xmlFilePrefix='pknViscosityDominated') diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/proppantSlotTest/proppantSlotTestFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/proppantSlotTest/proppantSlotTestFigure.hires.png new file mode 100644 index 00000000000..5934c8fe5e7 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/proppantSlotTest/proppantSlotTestFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/proppantSlotTest/proppantSlotTestFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/proppantSlotTest/proppantSlotTestFigure.pdf new file mode 100644 index 00000000000..43584fb46d0 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/proppantSlotTest/proppantSlotTestFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/proppantSlotTest/proppantSlotTestFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/proppantSlotTest/proppantSlotTestFigure.png new file mode 100644 index 00000000000..13d768a9157 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/proppantSlotTest/proppantSlotTestFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/proppantSlotTest/proppantSlotTestFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/proppantSlotTest/proppantSlotTestFigure.py new file mode 100644 index 00000000000..5a528ad123e --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/hydraulicFracture/proppantSlotTest/proppantSlotTestFigure.py @@ -0,0 +1,90 @@ +import sys +import matplotlib +import numpy as np +import matplotlib.pyplot as plt +import os +import argparse + + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + outputDir = args.outputDir + + eTime, eLength, eArea = np.loadtxt(outputDir + "/experiment-data.txt", skiprows=0, unpack=True) + esTime, esArea = np.loadtxt(outputDir + "/experiment-data2.txt", skiprows=0, unpack=True) + + dTime, dLength, dArea = np.loadtxt(outputDir + "/model-results.txt", skiprows=1, unpack=True) + sTime, sArea = np.loadtxt(outputDir + "/model-results2.txt", skiprows=1, unpack=True) + + # offSize is the size of the bounday cell which should be excluded from the model domain + offSize = 0.0127 + + # slot length 4 feet = 1.2192 m + totalLength = 1.2192 + + #total cell number of the domain (excluding the bounday cells) + totalCellNum = 96 * 24 + font = {'size': 12} + matplotlib.rc('font', **font) + + fig, ax = plt.subplots(2, 2, figsize=(12, 8)) + + ax[0, 0].plot(eTime, eLength, 'ro', label='Experiment-30/50') + ax[0, 0].plot(dTime, (dLength - offSize) / totalLength, + lw=5, + alpha=0.5, + color='lime', + label='GEOSX-30/50 mesh', + linestyle='-') + ax[0, 0].set_ylabel('Normalized Bank Length', multialignment='center', weight="bold") + ax[0, 0].set_xlabel('Time (s)', weight="bold") + ax[0, 0].set_xlim(0, 40) + ax[0, 0].set_ylim(0.0, 1.2) + ax[0, 0].legend(frameon=False, loc='lower right', fontsize=12) + ax[0, 0].text(.01, .92, '(a)', horizontalalignment='left', transform=ax[0, 0].transAxes, size=15, weight='bold') + + ax[0, 1].plot(eTime, eArea, 'ro', label='Experiment-30/50') + ax[0, 1].plot(dTime, dArea / totalCellNum, lw=5, alpha=0.5, color='lime', label='GEOSX-30/50 mesh', linestyle='-') + ax[0, 1].set_ylabel('Normalized Bank Area', multialignment='center', weight="bold") + ax[0, 1].set_xlabel('Time (s)', weight="bold") + ax[0, 1].set_xlim(0, 40) + ax[0, 1].set_ylim(0.0, 0.5) + ax[0, 1].legend(frameon=False, loc='lower right', fontsize=12) + ax[0, 1].text(.01, .92, '(b)', horizontalalignment='left', transform=ax[0, 1].transAxes, size=15, weight='bold') + + ax[1, 0].plot(esTime, esArea, 'ro', label='Experiment-30/50') + ax[1, 0].plot(sTime, sArea / totalCellNum, lw=5, alpha=0.5, color='lime', label='GEOSX-30/50 mesh', linestyle='-') + ax[1, 0].set_ylabel('Normalized Suspended Proppant Area', multialignment='center', weight="bold") + ax[1, 0].set_xlabel('Time (s)', weight="bold") + ax[1, 0].set_xlim(0, 40) + ax[1, 0].set_ylim(0.0, 0.6) + ax[1, 0].legend(frameon=False, loc='upper right', fontsize=12) + ax[1, 0].text(.01, .92, '(c)', horizontalalignment='left', transform=ax[1, 0].transAxes, size=15, weight='bold') + + ax[1, 1].plot(eTime, eArea + esArea, 'ro', label='Experiment-30/50') + ax[1, 1].plot(dTime, (dArea + sArea) / totalCellNum, + lw=5, + alpha=0.5, + color='lime', + label='GEOSX-30/50 mesh', + linestyle='-') + ax[1, 1].set_ylabel('Normalized Total Propped Area', multialignment='center', weight="bold") + ax[1, 1].set_xlabel('Time (s)', weight="bold") + ax[1, 1].set_xlim(0, 40) + ax[1, 1].set_ylim(0.0, 1.0) + ax[1, 1].legend(frameon=False, loc='upper right', fontsize=12) + ax[1, 1].text(.01, .92, '(d)', horizontalalignment='left', transform=ax[1, 1].transAxes, size=15, weight='bold') + + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/poromechanics/mandel/mandelFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/poromechanics/mandel/mandelFigure.hires.png new file mode 100644 index 00000000000..b1a0935be15 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/poromechanics/mandel/mandelFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/poromechanics/mandel/mandelFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/poromechanics/mandel/mandelFigure.pdf new file mode 100644 index 00000000000..4419b58d0ea Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/poromechanics/mandel/mandelFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/poromechanics/mandel/mandelFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/poromechanics/mandel/mandelFigure.png new file mode 100644 index 00000000000..50b10d61722 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/poromechanics/mandel/mandelFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/poromechanics/mandel/mandelFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/poromechanics/mandel/mandelFigure.py new file mode 100644 index 00000000000..737c8680836 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/poromechanics/mandel/mandelFigure.py @@ -0,0 +1,277 @@ +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import h5py +import xml.etree.ElementTree as ElementTree +from mpmath import * +import math +from math import sin, cos, tan, exp, atan, asin +from scipy.optimize import newton +import os +import argparse + +class Mandel: + + def __init__(self, hydromechanicalParameters, alen, blen, appliedTraction): + F = appliedTraction + B = hydromechanicalParameters["skemptonCoefficient"] + nu = hydromechanicalParameters["poissonRatio"] + nuu = hydromechanicalParameters["undrainedPoissonRatio"] + p0 = 1. / 3. / alen * B * (1. + nuu) * F + + alpha_n = [] + eps = np.finfo(np.float64).eps + coef = (1 - nu) / (nuu - nu) + + n = 1 + while True: + root = newton(func=lambda xi: tan(xi) - coef * xi, + x0=-math.pi / 2 + n * math.pi - 100 * eps, + fprime=lambda xi: 1 + pow(tan(xi), 2) - coef, + tol=eps) + if root < 50: + alpha_n.append(root) + n += 1 + else: + break + self.alpha_n = alpha_n + + self.consolidationCoefficient = hydromechanicalParameters["consolidationCoefficient"] + self.xlength = alen + self.p0 = p0 + + G = hydromechanicalParameters["shearModulus"] + self.scaling1 = -F * (1.0 - nu) / 2.0 / G / alen + self.scaling2 = F * (1.0 - nuu) / G / alen + + def computePressure(self, x, t): + cc = self.consolidationCoefficient + Lx = self.xlength + alpha_n = self.alpha_n + p0 = self.p0 + solution = 0 + for k in range(len(alpha_n)): + an = alpha_n[k] + solution = solution + 2. * sin(an) / (an - sin(an) * cos(an)) * (cos(an * x / Lx) - cos(an)) * exp( + -an**2 * cc * t / Lx**2) + + return p0 * solution + + def computeVerticalDisplacement(self, z, t): + cc = self.consolidationCoefficient + Lx = self.xlength + alpha_n = self.alpha_n + scaling1 = self.scaling1 + scaling2 = self.scaling2 + solution = 0 + for k in range(len(alpha_n)): + an = alpha_n[k] + solution = solution + sin(an) * cos(an) / (an - sin(an) * cos(an)) * exp(-an**2 * cc * t / Lx**2) + + return (scaling1 + scaling2 * solution) * z + + +def getHydromechanicalParametersFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + param1 = tree.find('Constitutive/ElasticIsotropic') + param2 = tree.find('Constitutive/BiotPorosity') + param3 = tree.find('Constitutive/CompressibleSinglePhaseFluid') + param4 = tree.find('Constitutive/ConstantPermeability') + + hydromechanicalParameters = dict.fromkeys([ + "bulkModulus", "shearModulus", "biotCoefficient", "fluidViscosity", "fluidCompressibility", "porosity", + "permeability", "skemptonCoefficient", "poissonRatio", "undrainedPoissonRatio", "consolidationCoefficient" + ]) + + hydromechanicalParameters["bulkModulus"] = float(param1.get("defaultBulkModulus")) + hydromechanicalParameters["shearModulus"] = float(param1.get("defaultShearModulus")) + + K = hydromechanicalParameters["bulkModulus"] + G = hydromechanicalParameters["shearModulus"] + E = (9.0 * K * G) / (3.0 * K + G) + nu = E / (2.0 * G) - 1.0 + Ks = float(param2.get("defaultGrainBulkModulus")) + + hydromechanicalParameters["biotCoefficient"] = 1.0 - K / Ks + hydromechanicalParameters["porosity"] = float(param2.get("defaultReferencePorosity")) + hydromechanicalParameters["fluidViscosity"] = float(param3.get("defaultViscosity")) + hydromechanicalParameters["fluidCompressibility"] = float(param3.get("compressibility")) + + perm = param4.get("permeabilityComponents") + perm = np.array(perm[1:-1].split(','), float) + hydromechanicalParameters["permeability"] = perm[0] + + phi = hydromechanicalParameters["porosity"] + cf = hydromechanicalParameters["fluidCompressibility"] + bBiot = hydromechanicalParameters["biotCoefficient"] + kp = hydromechanicalParameters["permeability"] + mu = hydromechanicalParameters["fluidViscosity"] + M = 1. / (phi * cf + (bBiot - phi) / Ks) + Ku = K + bBiot**2 * M + B = bBiot * M / Ku + nuu = (3. * nu + bBiot * B * (1 - 2. * nu)) / (3. - bBiot * B * (1 - 2. * nu)) + cc = 2. * kp / mu * B**2 * G * (1. - nu) * (1. + nuu)**2 / 9. / (1. - nuu) / (nuu - nu) + hydromechanicalParameters["skemptonCoefficient"] = B + hydromechanicalParameters["poissonRatio"] = nu + hydromechanicalParameters["undrainedPoissonRatio"] = nuu + hydromechanicalParameters["consolidationCoefficient"] = cc + + return hydromechanicalParameters + + +def getGeometryFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + meshElement = tree.find('Mesh/InternalMesh') + dimensions = meshElement.get("xCoords") + dimensions = [float(i) for i in dimensions[1:-1].split(",")] + alen = dimensions[1] + dimensions = meshElement.get("zCoords") + dimensions = [float(i) for i in dimensions[1:-1].split(",")] + blen = dimensions[1] + dimensions = meshElement.get("nx") + dimensions = [float(i) for i in dimensions[1:-1].split(",")] + nx = dimensions[0] + dimensions = meshElement.get("nz") + dimensions = [float(i) for i in dimensions[1:-1].split(",")] + nz = dimensions[0] + + return alen, blen, nx, nz + + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + + # File path + outputDir = args.outputDir + geosDir = args.geosDir + hdf5File1Path = outputDir + "/pressure_history.hdf5" + hdf5File2Path = outputDir + "/displacement_history.hdf5" + xmlFile1Path = geosDir + "/inputFiles/poromechanics/PoroElastic_Mandel_base.xml" + xmlFile2Path = geosDir + "/inputFiles/poromechanics/PoroElastic_Mandel_benchmark_fim.xml" + + # Read HDF5 + # Global Coordinate of Element Center + hf = h5py.File(hdf5File1Path, 'r') + xl = hf.get('pressure elementCenter') + xcord = xl[0, :, 0] + ycord = xl[0, :, 1] + zcord = xl[0, :, 2] + pl = hf.get('pressure') + tl = hf.get('pressure Time') + + # Global Coordinate of Nodal Point + hf = h5py.File(hdf5File2Path, 'r') + xl_node = hf.get('totalDisplacement ReferencePosition') + xcord_node = xl_node[0, :, 0] + ycord_node = xl_node[0, :, 1] + zcord_node = xl_node[0, :, 2] + # Load Displacement Components + disp = hf.get('totalDisplacement') + + # Extract Mechanical Properties and Fracture Geometry from XML + hydromechanicalParameters = getHydromechanicalParametersFromXML(xmlFile1Path) + F = 1.0e4 + La, Lb, na, nb = getGeometryFromXML(xmlFile2Path) + B = hydromechanicalParameters["skemptonCoefficient"] + nuu = hydromechanicalParameters["undrainedPoissonRatio"] + G = hydromechanicalParameters["shearModulus"] + p0 = 1. / 3. / La * B * (1. + nuu) * F + u0 = -F * Lb * (1.0 - nuu) / 2. / G / La + + xd_numerical = xcord / La + zd_numerical = zcord_node / Lb + t = [0.05, 0.5, 5.0, 10.0] + pressure_numerical = np.zeros([len(t), len(xd_numerical)]) + displacement_numerical = np.zeros([len(t), len(zd_numerical)]) + for i in range(len(t)): + for j in range(1, len(tl)): + if tl[j] <= t[i]: + pressure_numerical[i, :] = pl[j - 1, :] / p0 + displacement_numerical[i, :] = disp[j - 1, :, 2] / u0 + + # Initialize Mandel's analytical solution + mandelAnalyticalSolution = Mandel(hydromechanicalParameters, La, Lb, F) + + x = np.linspace(0, La, 101, endpoint=True) + xd_analytical = x / La + pressure_analytical = np.zeros([len(t), len(x)]) + displacement_analytical = np.zeros([len(t), len(x)]) + for i in range(len(t)): + for j in range(len(x)): + pressure_analytical[i][j] = mandelAnalyticalSolution.computePressure(x[j], t[i]) / p0 + displacement_analytical[i][j] = mandelAnalyticalSolution.computeVerticalDisplacement(x[j], t[i]) / u0 + + fsize = 30 + msize = 15 + lw = 8 + fig, ax = plt.subplots(1, 2, figsize=(32, 12)) + cmap = plt.get_cmap("tab10") + + for i in range(len(t)): + ax[0].plot(xd_analytical, + pressure_analytical[i][:], + color=cmap(i), + alpha=0.6, + label='t = ' + str(t[i]) + 's - Analytical Solution', + lw=lw) + ax[0].plot(xd_numerical, + pressure_numerical[i][:], + 'o', + alpha=0.8, + color=cmap(i), + mec='k', + label='t = ' + str(t[i]) + 's - Numerical Solution', + markersize=msize) + ax[0].set_xlim(0, 1) + ax[0].set_ylim(0, 1.2) + ax[0].set_xlabel('Normalized Distance, ' + r'$x$/$a$', size=fsize, weight="bold") + ax[0].set_ylabel('Normalized Pressure, ' + r'$p$/$p_{0}$', size=fsize, weight="bold") + ax[0].legend(bbox_to_anchor=(0.02, 0.6), loc='center left', borderaxespad=0., fontsize=fsize * 0.7) + ax[0].grid(True) + ax[0].xaxis.set_tick_params(labelsize=fsize) + ax[0].yaxis.set_tick_params(labelsize=fsize) + + for i in range(len(t)): + ax[1].plot(xd_analytical, + displacement_analytical[i][:], + color=cmap(i), + alpha=0.6, + label='t = ' + str(t[i]) + 's - Analytical Solution', + lw=lw) + ax[1].plot(zd_numerical, + displacement_numerical[i][:], + 'o', + alpha=0.8, + color=cmap(i), + mec='k', + label='t = ' + str(t[i]) + 's - Numerical Solution', + markersize=msize) + ax[1].set_xlim(0, 1) + ax[1].set_ylim(0, 1.5) + ax[1].set_xlabel('Normalized Distance, ' + r'$z$/$b$', size=fsize, weight="bold") + ax[1].set_ylabel('Normalized Displacement, ' + r'$u_{z}$/$u_{z=b,0}$', size=fsize, weight="bold") + ax[1].legend(loc='upper left', fontsize=fsize * 0.7) + ax[1].grid(True) + ax[1].xaxis.set_tick_params(labelsize=fsize) + ax[1].yaxis.set_tick_params(labelsize=fsize) + + plt.show() + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationDisplacementFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationDisplacementFigure.hires.png new file mode 100644 index 00000000000..b3a0cabd728 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationDisplacementFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationDisplacementFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationDisplacementFigure.pdf new file mode 100644 index 00000000000..1a2681e7e0b Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationDisplacementFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationDisplacementFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationDisplacementFigure.png new file mode 100644 index 00000000000..ca0a1f5eeed Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationDisplacementFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationDisplacementFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationDisplacementFigure.py new file mode 100644 index 00000000000..285a7b15706 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationDisplacementFigure.py @@ -0,0 +1,86 @@ +import matplotlib +matplotlib.use('Agg') +import matplotlib.pyplot as plt +import xml.etree.ElementTree as ElementTree +import numpy as np +import h5py +from numpy import genfromtxt + +def main(): + + # File paths + hdf5FilePathDisplacement = "displacementHistory.hdf5" + + + # Read simulation output from HDF5 file + hf = h5py.File(hdf5FilePathDisplacement, 'r') + timeDisplacement = hf.get('totalDisplacement Time') + timeDisplacement = np.asarray(timeDisplacement) + centerDisplacement = hf.get('totalDisplacement ReferencePosition') + centerDisplacement = np.asarray(centerDisplacement) + displacement = hf.get('totalDisplacement') + displacement = np.asarray(displacement) + + time = 1 + posVertex1 = -1 + posVertex2 = -1 + posVertex3 = -1 + last = -1 + + for j in range(0, 284): + if centerDisplacement[0,j,1] >= 1.4 and posVertex1 == -1: + posVertex1 = j + if centerDisplacement[0,j,1] >= 4.2 and posVertex2 == -1: + posVertex2 = j + if centerDisplacement[0,j,1] >= 7 and posVertex3 == -1: + posVertex3 = j + + for j in range(0, timeDisplacement.shape[0]): + if j > 0 and timeDisplacement[j] < 1e-12 and last == -1: + last = j + + displacement_1p4 = genfromtxt('thermoConsolidationDisp_1p4m.csv', delimiter=',') + displacement_4p2 = genfromtxt('thermoConsolidationDisp_4p2m.csv', delimiter=',') + displacement_7 = genfromtxt('thermoConsolidationDisp_7m.csv', delimiter=',') + + plt.plot( timeDisplacement[0:last], + -displacement[0:last,posVertex1,1], + 'r--', + label='GEOSX: z = 1.4 m') + plt.plot( timeDisplacement[0:last], + -displacement[0:last,posVertex2,1], + 'b--', + label='GEOSX: z = 4.2 m') + plt.plot( timeDisplacement[0:last], + -displacement[0:last,posVertex3,1], + 'k--', + label='GEOSX: z = 5.6 m') + + plt.plot( displacement_1p4[:,0], + displacement_1p4[:,1], + 'r-', + label='Analytical: z = 1.4 m') + plt.plot( displacement_4p2[:,0], + displacement_4p2[:,1], + 'b-', + label='Analytical: z = 4.2 m') + plt.plot( displacement_7[:,0], + displacement_7[:,1], + 'k-', + label='Analytical: z = 7 m') + + plt.xscale("log") + + plt.grid() + plt.ylabel('Displacement [m]') + plt.xlabel('Time [s]') + plt.xlim(0.01,100000) + + plt.legend(loc='upper left') + plt.show() + # plt.savefig('displacement.png') + + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationPressureFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationPressureFigure.hires.png new file mode 100644 index 00000000000..2808ddc9a5a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationPressureFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationPressureFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationPressureFigure.pdf new file mode 100644 index 00000000000..fb577855895 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationPressureFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationPressureFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationPressureFigure.png new file mode 100644 index 00000000000..cf07b90c97a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationPressureFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationPressureFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationPressureFigure.py new file mode 100644 index 00000000000..d72455e6020 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationPressureFigure.py @@ -0,0 +1,82 @@ +import matplotlib +matplotlib.use('Agg') +import matplotlib.pyplot as plt +import xml.etree.ElementTree as ElementTree +import numpy as np +import h5py +from numpy import genfromtxt + +def main(): + + # File paths + hdf5FilePathPressure = "pressureHistory.hdf5" + + + # Read simulation output from HDF5 file + hf = h5py.File(hdf5FilePathPressure, 'r') + timePressure = hf.get('pressure Time') + timePressure = np.asarray(timePressure) + centerPressure = hf.get('pressure elementCenter') + centerPressure = np.asarray(centerPressure) + pressure = hf.get('pressure') + pressure = np.asarray(pressure) + + time = 1 + posElement1 = -1 + posElement2 = -1 + posElement3 = -1 + last = -1 + for j in range(0, centerPressure.shape[1]): + if centerPressure[0,j,1] >= 0 and posElement1 == -1: + posElement1 = j + if centerPressure[0,j,1] >= 4.2 and posElement2 == -1: + posElement2 = j + if centerPressure[0,j,1] >= 5.6 and posElement3 == -1: + posElement3 = j + + for j in range(0, timePressure.shape[0]): + if j > 0 and timePressure[j] < 1e-12 and last == -1: + last = j + + pressure_0 = genfromtxt('thermoConsolidationPressure_0m.csv', delimiter=',') + pressure_4p2 = genfromtxt('thermoConsolidationPressure_4p2m.csv', delimiter=',') + pressure_5p6 = genfromtxt('thermoConsolidationPressure_5p6m.csv', delimiter=',') + + plt.plot( timePressure[0:last], + pressure[0:last,posElement1], + 'r--', + label='GEOSX: z = 0.0 m') + plt.plot( timePressure[0:last], + pressure[0:last,posElement2], + 'b--', + label='GEOSX: z = 4.2 m') + plt.plot( timePressure[0:last], + pressure[0:last,posElement3], + 'k--', + label='GEOSX: z = 5.6 m') + + plt.plot( pressure_0[:,0], + pressure_0[:,1], + 'r-', + label='Analytical: z = 0.0 m') + plt.plot( pressure_4p2[:,0], + pressure_4p2[:,1], + 'b-', + label='Analytical: z = 4.2 m') + plt.plot( pressure_5p6[:,0], + pressure_5p6[:,1], + 'k-', + label='Analytical: z = 5.6 m') + + plt.xscale("log") + + plt.grid() + plt.ylabel('Pressure [Pa]') + plt.xlabel('Time [s]') + plt.xlim(0.01,100000) + + plt.legend(loc='lower left') + plt.show() + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationTemperatureFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationTemperatureFigure.hires.png new file mode 100644 index 00000000000..25a55b80577 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationTemperatureFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationTemperatureFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationTemperatureFigure.pdf new file mode 100644 index 00000000000..fcafe3f6941 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationTemperatureFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationTemperatureFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationTemperatureFigure.png new file mode 100644 index 00000000000..02f04d55b13 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationTemperatureFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationTemperatureFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationTemperatureFigure.py new file mode 100644 index 00000000000..ee60cf94ab5 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/thermoPoromechanics/thermalConsolidation/thermalConsolidationTemperatureFigure.py @@ -0,0 +1,85 @@ +import matplotlib +matplotlib.use('Agg') +import matplotlib.pyplot as plt +import xml.etree.ElementTree as ElementTree +import numpy as np +import h5py +from numpy import genfromtxt + +def main(): + + # File paths + hdf5FilePathTemperature = "temperatureHistory.hdf5" + + + # Read simulation output from HDF5 file + hf = h5py.File(hdf5FilePathTemperature, 'r') + timeTemperature = hf.get('temperature Time') + timeTemperature = np.asarray(timeTemperature) + centerTemperature = hf.get('temperature elementCenter') + centerTemperature = np.asarray(centerTemperature) + temperature = hf.get('temperature') + temperature = np.asarray(temperature) + + time = 1 + posElement1 = -1 + posElement2 = -1 + posElement3 = -1 + last = -1 + + for j in range(0, centerTemperature.shape[1]): + if centerTemperature[0,j,1] >= 0 and posElement1 == -1: + posElement1 = j + if centerTemperature[0,j,1] >= 4.2 and posElement2 == -1: + posElement2 = j + if centerTemperature[0,j,1] >= 5.6 and posElement3 == -1: + posElement3 = j + + for j in range(0, timeTemperature.shape[0]): + if j > 0 and timeTemperature[j] < 1e-12 and last == -1: + last = j + + temperature_0 = genfromtxt('thermoConsolidationTemp_0m.csv', delimiter=',') + temperature_4p2 = genfromtxt('thermoConsolidationTemp_4p2m.csv', delimiter=',') + temperature_5p6 = genfromtxt('thermoConsolidationTemp_5p6m.csv', delimiter=',') + + plt.plot( timeTemperature[0:last], + temperature[0:last,posElement1], + 'r--', + label='GEOSX: z = 0.0 m') + plt.plot( timeTemperature[0:last], + temperature[0:last,posElement2], + 'b--', + label='GEOSX: z = 4.2 m') + plt.plot( timeTemperature[0:last], + temperature[0:last,posElement3], + 'k--', + label='GEOSX: z = 5.6 m') + + plt.plot( temperature_0[:,0], + 273+temperature_0[:,1], + 'r-', + label='Analytical: z = 0.0 m') + plt.plot( temperature_4p2[:,0], + 273+temperature_4p2[:,1], + 'b-', + label='Analytical: z = 4.2 m') + plt.plot( temperature_5p6[:,0], + 273+temperature_5p6[:,1], + 'k-', + label='Analytical: z = 5.6 m') + + plt.xscale("log") + + plt.grid() + plt.ylabel('Temperature [K]') + plt.xlabel('Time [s]') + plt.ylim(273,323) + plt.xlim(0.01,100000) + + plt.legend(loc='upper left') + plt.show() + #plt.savefig(' temperature.png') + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/DruckerPrager/TriaxialDriver_vs_SemiAnalytic_DruckerPrager.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/DruckerPrager/TriaxialDriver_vs_SemiAnalytic_DruckerPrager.hires.png new file mode 100644 index 00000000000..5718fe1a4d8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/DruckerPrager/TriaxialDriver_vs_SemiAnalytic_DruckerPrager.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/DruckerPrager/TriaxialDriver_vs_SemiAnalytic_DruckerPrager.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/DruckerPrager/TriaxialDriver_vs_SemiAnalytic_DruckerPrager.pdf new file mode 100644 index 00000000000..0e9f2ebe146 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/DruckerPrager/TriaxialDriver_vs_SemiAnalytic_DruckerPrager.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/DruckerPrager/TriaxialDriver_vs_SemiAnalytic_DruckerPrager.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/DruckerPrager/TriaxialDriver_vs_SemiAnalytic_DruckerPrager.png new file mode 100644 index 00000000000..2cb58eb67a1 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/DruckerPrager/TriaxialDriver_vs_SemiAnalytic_DruckerPrager.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/DruckerPrager/TriaxialDriver_vs_SemiAnalytic_DruckerPrager.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/DruckerPrager/TriaxialDriver_vs_SemiAnalytic_DruckerPrager.py new file mode 100644 index 00000000000..454ba85d837 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/DruckerPrager/TriaxialDriver_vs_SemiAnalytic_DruckerPrager.py @@ -0,0 +1,257 @@ +import os +import sys +import numpy as np +import matplotlib.pyplot as plt +import xml.etree.ElementTree as ElementTree +import os +import argparse + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + # File paths + outputDir = args.outputDir + geosDir = args.geosDir + path = outputDir + "/DruckerPragerResults.txt" + xmlFilePath = geosDir + "/inputFiles/triaxialDriver/triaxialDriver_base.xml" + xmlFilePath_case = geosDir + "/inputFiles/triaxialDriver/triaxialDriver_DruckerPrager.xml" + imposedStrainFilePath = geosDir + "/inputFiles/triaxialDriver/tables/axialStrain.geos" + imposedStressFilePath = geosDir + "/inputFiles/triaxialDriver/tables/radialStress.geos" + + # Load GEOSX results + time, ax_strain, ra_strain1, ra_strain2, ax_stress, ra_stress1, ra_stress2, newton_iter, residual_norm = np.loadtxt( + path, skiprows=5, unpack=True) + + # Extract mechanical parameters from XML files + tree = ElementTree.parse(xmlFilePath) + tree_case = ElementTree.parse(xmlFilePath_case) + model = tree_case.find('Tasks/TriaxialDriver') + param = tree.find('Constitutive/DruckerPrager') + + bulkModulus = float(param.get("defaultBulkModulus")) + shearModulus = float(param.get("defaultShearModulus")) + cohesion = float(param.get("defaultCohesion")) + frictionAngle = float(param.get("defaultFrictionAngle")) + dilationAngle = float(param.get("defaultDilationAngle")) + hardeningRate = float(param.get("defaultHardeningRate")) + initialStress = float(model.get("initialStress")) + + # Compute Lame modulus and Young modulus + lameModulus = bulkModulus - 2.0/3.0*shearModulus + youngModulus = 1.0 / ( 1.0/9.0/bulkModulus + 1.0/3.0/shearModulus ) + + # Friction and cohesion parameters + frictionAngleRad = frictionAngle*3.1416/180.0 + cosFrictionAngle = np.cos(frictionAngleRad) + sinFrictionAngle = np.sin(frictionAngleRad) + a = 6.0*cohesion*cosFrictionAngle/(3.0-sinFrictionAngle) + b = 6.0*sinFrictionAngle/(3.0-sinFrictionAngle) + + # Dilation parameter + dilationAngleRad = dilationAngle*np.pi/180.0 + cosDilationAngle = np.cos(dilationAngleRad) + sinDilationAngle = np.sin(dilationAngleRad) + b_dilation = 6.0*sinDilationAngle/(3.0-sinDilationAngle) + + # Elasto-plastic moduli for plastic yield during the loading period + plasticYoungModulus = 1.0 / ( 1.0/youngModulus + (b_dilation-3.0)*(b-3.0)/9.0/hardeningRate ) + plasticModulusForRaStrain = 1.0 / ( 1.0/2.0/shearModulus - (b-3.0)/2.0/hardeningRate ) + + # Elasto-plastic moduli for plastic yield during the unloading period + plasticYoungModulus_unload = 1.0 / ( 1.0/youngModulus + (b_dilation+3.0)*(b+3.0)/9.0/hardeningRate ) + plasticModulusForRaStrain_unload = 1.0 / ( 1.0/2.0/shearModulus + (b+3.0)/2.0/hardeningRate ) + + # Extract axial strain loading from input tables + imp_strain = np.loadtxt( + imposedStrainFilePath, skiprows=0, unpack=True) + + list_ax_strain_anal = [] + numStepPerLoadingPeriod = 1000 + + for i in range(0,len(imp_strain)-1): + dStrainPerStep = (imp_strain[i+1]-imp_strain[i])/numStepPerLoadingPeriod + loadingPeriod = np.arange(imp_strain[i],imp_strain[i+1]+dStrainPerStep,dStrainPerStep) + list_ax_strain_anal = np.concatenate((list_ax_strain_anal, loadingPeriod), axis=0) + + # Extract radial stress loading from input tables + imp_stress = np.loadtxt( + imposedStressFilePath, skiprows=0, unpack=True) + + list_ra_stress_anal = imp_stress[0]*np.ones(len(list_ax_strain_anal)) #constant radial confining stress + + # Initiate radial strain and axial stress arrays + list_ra_strain_anal = np.zeros(len(list_ax_strain_anal)) + list_ax_stress_anal = np.zeros(len(list_ax_strain_anal)) + list_ax_stress_anal[0] = initialStress + list_ra_strain_anal[0] = 0 + + # Loop over the loading/unloading steps + for idx in range(1,len(list_ax_strain_anal)): + delta_ax_strain_anal = list_ax_strain_anal[idx] - list_ax_strain_anal[idx-1] + delta_ra_stress_anal = 0 # constant radial confining stress + + # Elastic trial + delta_ra_strain_anal = ( delta_ra_stress_anal - lameModulus*delta_ax_strain_anal ) / ( 2.0*lameModulus + 2.0*shearModulus ) + delta_ax_stress_anal = ( lameModulus + 2.0*shearModulus )*delta_ax_strain_anal + lameModulus/( lameModulus + shearModulus ) * ( delta_ra_stress_anal - lameModulus*delta_ax_strain_anal ) + + ax_stress_anal = list_ax_stress_anal[idx-1] + delta_ax_stress_anal + ra_strain_anal = list_ra_strain_anal[idx-1] + delta_ra_strain_anal + + # Compute mean and shear stresses + ra_stress_anal = list_ra_stress_anal[idx] + + p_anal = (ax_stress_anal + 2.0 * ra_stress_anal) / 3.0 + q_anal = -(ax_stress_anal - ra_stress_anal) + + # Plastic correction + if(q_anal>=0): #loading + F_anal = q_anal + b*p_anal - a + + if(F_anal>=0): + # Compute stress and strain variations + delta_ax_stress_anal = delta_ax_strain_anal * plasticYoungModulus + delta_ra_strain_anal = delta_ax_strain_anal - delta_ax_stress_anal / plasticModulusForRaStrain + + # Compute stress and strain at actual loading step + ax_stress_anal = list_ax_stress_anal[idx-1] + delta_ax_stress_anal + ra_strain_anal = list_ra_strain_anal[idx-1] + delta_ra_strain_anal + + # Update plastic cohesion + delta_a = (b-3.0)/3.0*delta_ax_stress_anal + a += delta_a + + else: #unloading + F_anal = -q_anal + b*p_anal - a # negative sign added to q for q<0 to obtain the absolute value + + if(F_anal>=0): + # Compute stress and strain variations + delta_ax_stress_anal = delta_ax_strain_anal * plasticYoungModulus_unload + delta_ra_strain_anal = delta_ax_strain_anal - delta_ax_stress_anal / plasticModulusForRaStrain_unload + + # Compute stress and strain at actual loading step + ax_stress_anal = list_ax_stress_anal[idx-1] + delta_ax_stress_anal + ra_strain_anal = list_ra_strain_anal[idx-1] + delta_ra_strain_anal + + # Update plastic cohesion + delta_a = (b+3.0)/3.0*delta_ax_stress_anal + a += delta_a + + list_ax_stress_anal[idx] = ax_stress_anal + list_ra_strain_anal[idx] = ra_strain_anal + + # Preparing data for visualizing semi-analytical results + list_p_anal = (list_ax_stress_anal + 2.0 * list_ra_stress_anal) / 3.0 + list_q_anal = -(list_ax_stress_anal - list_ra_stress_anal) + + list_strain_vol_anal = list_ax_strain_anal + 2.0 * list_ra_strain_anal + + p_num = (ax_stress + 2.0 * ra_stress1) / 3.0 + q_num = -(ax_stress - ra_stress1) + + strain_vol = ax_strain + 2.0 * ra_strain1 + + #Visualization parameters + fsize = 30 + msize = 12 + lw = 6 + malpha = 0.5 + fig, ax = plt.subplots(1, 3, figsize=(37, 10)) + cmap = plt.get_cmap("tab10") + + # Plot strain versus shear stress + ax[0].plot(-ax_strain * 100, #convert to % + q_num*1e-6, #convert to MPa + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[0].plot(-ra_strain1 * 100, + q_num*1e-6, + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha) + ax[0].plot(-list_ax_strain_anal* 100, + list_q_anal*1e-6, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + label='Semi-Analytical', linewidth=6) + ax[0].plot(-list_ra_strain_anal * 100, + list_q_anal*1e-6, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + linewidth=6) + ax[0].set_xlabel(r'Strain (%)', size=fsize, weight="bold") + ax[0].set_ylabel(r'Deviatoric Stress (MPa)', size=fsize, weight="bold") + ax[0].xaxis.set_tick_params(labelsize=fsize) + ax[0].yaxis.set_tick_params(labelsize=fsize) + + # Plot axial strain versus volumetric strain + ax[1].plot(-ax_strain * 100, + -strain_vol * 100, + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[1].plot(-list_ax_strain_anal* 100, + -list_strain_vol_anal* 100, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + label='Semi-Analytical', linewidth=6) + ax[1].set_xlabel(r'Axial Strain (%)', size=fsize, weight="bold") + ax[1].set_ylabel(r'Volumetric Strain (%)', size=fsize, weight="bold") + #ax[1].legend(loc='lower right', fontsize=fsize) + ax[1].xaxis.set_tick_params(labelsize=fsize) + ax[1].yaxis.set_tick_params(labelsize=fsize) + + # Plot shear stress versus mean stress + ax[2].plot(-p_num*1e-6, + q_num*1e-6, + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[2].plot(-list_p_anal*1e-6, + list_q_anal*1e-6, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + label='Semi-Analytical', linewidth=6) + ax[2].set_xlabel(r'Mean stress (MPa)', size=fsize, weight="bold") + ax[2].set_ylabel(r'Deviatoric Stress (MPa)', size=fsize, weight="bold") + ax[2].legend(loc='lower right', fontsize=fsize) + ax[2].xaxis.set_tick_params(labelsize=fsize) + ax[2].yaxis.set_tick_params(labelsize=fsize) + + plt.subplots_adjust(left=0.2, bottom=0.1, right=0.9, top=0.9, wspace=0.4, hspace=0.4) + plt.show() + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ExtendedDruckerPrager.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ExtendedDruckerPrager.hires.png new file mode 100644 index 00000000000..29bf1041b14 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ExtendedDruckerPrager.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ExtendedDruckerPrager.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ExtendedDruckerPrager.pdf new file mode 100644 index 00000000000..abde442bc30 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ExtendedDruckerPrager.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ExtendedDruckerPrager.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ExtendedDruckerPrager.png new file mode 100644 index 00000000000..4d7ca391c1e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ExtendedDruckerPrager.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ExtendedDruckerPrager.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ExtendedDruckerPrager.py new file mode 100644 index 00000000000..6589ac70c4a --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ExtendedDruckerPrager.py @@ -0,0 +1,275 @@ +import os +import sys +import numpy as np +import matplotlib.pyplot as plt +import xml.etree.ElementTree as ElementTree +import os +import argparse + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + # File paths + outputDir = args.outputDir + geosDir = args.geosDir + path = outputDir + "/ExtendedDruckerPragerResults.txt" + xmlFilePath = geosDir + "/inputFiles/triaxialDriver/triaxialDriver_base.xml" + xmlFilePath_case = geosDir + "/inputFiles/triaxialDriver/triaxialDriver_ExtendedDruckerPrager.xml" + imposedStrainFilePath = geosDir + "/inputFiles/triaxialDriver/tables/axialStrain.geos" + imposedStressFilePath = geosDir + "/inputFiles/triaxialDriver/tables/radialStress.geos" + + # Load GEOSX results + time, ax_strain, ra_strain1, ra_strain2, ax_stress, ra_stress1, ra_stress2, newton_iter, residual_norm = np.loadtxt( + path, skiprows=5, unpack=True) + + # Extract mechanical parameters from XML file + tree = ElementTree.parse(xmlFilePath) + tree_case = ElementTree.parse(xmlFilePath_case) + model = tree_case.find('Tasks/TriaxialDriver') + param = tree.find('Constitutive/ExtendedDruckerPrager') + + bulkModulus = float(param.get("defaultBulkModulus")) + shearModulus = float(param.get("defaultShearModulus")) + cohesion = float(param.get("defaultCohesion")) + initialFrictionAngle = float(param.get("defaultInitialFrictionAngle")) + residualFrictionAngle = float(param.get("defaultResidualFrictionAngle")) + hardeningParameter = float(param.get("defaultHardening")) + dilationRatio = float(param.get("defaultDilationRatio")) + initialStress = float(model.get("initialStress")) + + # Compute Lame modulus and Young modulus + lameModulus = bulkModulus - 2.0/3.0*shearModulus + youngModulus = 1.0 / ( 1.0/9.0/bulkModulus + 1.0/3.0/shearModulus ) + + # Friction and cohesion parameters + initialFrictionAngleRad = initialFrictionAngle * np.pi / 180.0 + cosInitialFrictionAngle = np.cos(initialFrictionAngleRad) + sinInitialFrictionAngle = np.sin(initialFrictionAngleRad) + a_init = 6.0*cohesion*cosInitialFrictionAngle / ( 3.0 - sinInitialFrictionAngle ) + b_init = 6.0*sinInitialFrictionAngle / ( 3.0 - sinInitialFrictionAngle ) + + residualFrictionAngleRad = residualFrictionAngle * np.pi / 180.0 + sinResidualFrictionAngle = np.sin(residualFrictionAngleRad) + b_resi = 6.0*sinResidualFrictionAngle/(3.0-sinResidualFrictionAngle) + + # Extract loading from input tables + imp_strain = np.loadtxt( + imposedStrainFilePath, skiprows=0, unpack=True) + + list_ax_strain_anal = [] + numStepPerLoadingPeriod = 1000 + + for i in range(0,len(imp_strain)-1): + dStrainPerStep = (imp_strain[i+1]-imp_strain[i])/numStepPerLoadingPeriod + loadingPeriod = np.arange(imp_strain[i],imp_strain[i+1]+dStrainPerStep,dStrainPerStep) + list_ax_strain_anal = np.concatenate((list_ax_strain_anal, loadingPeriod), axis=0) + + # Extract radial stress loading from input tables + imp_stress = np.loadtxt( + imposedStressFilePath, skiprows=0, unpack=True) + + list_ra_stress_anal = imp_stress[0]*np.ones(len(list_ax_strain_anal)) #constant radial confining stress + + # Initiate radial strain and axial stress arrays + list_ra_strain_anal = np.zeros(len(list_ax_strain_anal)) + list_ax_stress_anal = np.zeros(len(list_ax_strain_anal)) + list_ax_stress_anal[0] = initialStress + list_ra_strain_anal[0] = 0 + + + # Loop over the loading/unloading steps + plasticMultiplier = 0 + b = b_init + + for idx in range(1,len(list_ax_strain_anal)): + delta_ax_strain_anal = list_ax_strain_anal[idx] - list_ax_strain_anal[idx-1] + delta_ra_stress_anal = 0 # constant lateral confining stress + + # Elastic trial + delta_ra_strain_anal = ( delta_ra_stress_anal - lameModulus*delta_ax_strain_anal ) / ( 2.0*lameModulus + 2.0*shearModulus ) + delta_ax_stress_anal = ( lameModulus + 2.0*shearModulus )*delta_ax_strain_anal + lameModulus/( lameModulus + shearModulus )*( delta_ra_stress_anal - lameModulus*delta_ax_strain_anal ) + + ax_stress_anal = list_ax_stress_anal[idx-1] + delta_ax_stress_anal + ra_strain_anal = list_ra_strain_anal[idx-1] + delta_ra_strain_anal + + # Compute mean and shear stresses + ra_stress_anal = list_ra_stress_anal[idx] + + p_anal = (ax_stress_anal + 2.0 * ra_stress_anal) / 3.0 + q_anal = -(ax_stress_anal - ra_stress_anal) + + # Plastic correction + if(q_anal>=0): #loading + + F_anal = q_anal + b*p_anal - b*a_init/b_init + + if(F_anal>=0): + b = b_init + plasticMultiplier/(hardeningParameter+plasticMultiplier) * (b_resi - b_init) + dF_db = p_anal - a_init/b_init + db_dlambda = hardeningParameter * (b_resi - b_init) / ( hardeningParameter + plasticMultiplier ) / ( hardeningParameter + plasticMultiplier ) + hardeningRate = -dF_db*db_dlambda + + # Elasto-plastic moduli for plastic yield during the loading period + plasticYoungModulus = 1.0 / ( 1.0/youngModulus + (b*dilationRatio-3.0)*(b-3.0)/9.0/hardeningRate ) + plasticModulusForRaStrain = 1.0 / ( 1.0/2.0/shearModulus - (b-3.0)/2.0/hardeningRate ) + + # Compute stress and strain variations + delta_ax_stress_anal = delta_ax_strain_anal*plasticYoungModulus + delta_ra_strain_anal = delta_ax_strain_anal - delta_ax_stress_anal / plasticModulusForRaStrain + + # Compute stress and strain at actual loading step + ax_stress_anal = list_ax_stress_anal[idx-1] + delta_ax_stress_anal + ra_strain_anal = list_ra_strain_anal[idx-1] + delta_ra_strain_anal + + # Update plastic multiplier + delta_lambda = (b-3.0)/3.0/hardeningRate*delta_ax_stress_anal + plasticMultiplier += delta_lambda + + else: #unloading + + F_anal = -q_anal + b*p_anal - b*a_init/b_init # negative sign added to q for q<0 to obtain the absolute value + + if(F_anal>=0): + b = b_init + plasticMultiplier/(hardeningParameter+plasticMultiplier) * (b_resi - b_init) + dF_db = p_anal - a_init/b_init + db_dlambda = hardeningParameter * (b_resi - b_init) / (hardeningParameter+plasticMultiplier) / (hardeningParameter+plasticMultiplier) + hardeningRate = -dF_db*db_dlambda + + # Elasto-plastic moduli for plastic yield during the unloading period + plasticYoungModulus_unload = 1.0/(1.0/youngModulus + (b*dilationRatio+3.0)*(b+3.0)/9.0/hardeningRate) + plasticModulusForRaStrain_unload = 1.0/(1.0/2.0/shearModulus + (b+3.0)/2.0/hardeningRate) + + # Compute stress and strain variations + delta_ax_stress_anal = delta_ax_strain_anal*plasticYoungModulus_unload + delta_ra_strain_anal = delta_ax_strain_anal - delta_ax_stress_anal / plasticModulusForRaStrain_unload + + # Compute stress and strain at actual loading step + ax_stress_anal = list_ax_stress_anal[idx-1] + delta_ax_stress_anal + ra_strain_anal = list_ra_strain_anal[idx-1] + delta_ra_strain_anal + + # Update plastic multiplier + delta_lambda = (b+3.0)/3.0/hardeningRate*delta_ax_stress_anal + plasticMultiplier += delta_lambda + + list_ax_stress_anal[idx] = ax_stress_anal + list_ra_strain_anal[idx] = ra_strain_anal + + # Preparing data for visualizing semi-analytical results + list_p_anal = -(list_ax_stress_anal + 2.0 * list_ra_stress_anal) / 3.0 + list_q_anal = -(list_ax_stress_anal - list_ra_stress_anal) + + list_strain_vol_anal = list_ax_strain_anal + 2.0 * list_ra_strain_anal + + p_num = -(ax_stress + 2.0 * ra_stress1) / 3.0 + q_num = -(ax_stress - ra_stress1) + + strain_vol = ax_strain + 2.0 * ra_strain1 + + #Visualization parameters + fsize = 30 + msize = 12 + lw = 6 + malpha = 0.5 + fig, ax = plt.subplots(1, 3, figsize=(37, 10)) + cmap = plt.get_cmap("tab10") + + # Plot strain versus shear stress + ax[0].plot(-ax_strain * 100, #convert to % + q_num*1e-6, #convert to MPa + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[0].plot(-ra_strain1 * 100, + q_num*1e-6, + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha) + ax[0].plot(-list_ax_strain_anal* 100, + list_q_anal*1e-6, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + label='Semi-Analytical', linewidth=6) + ax[0].plot(-list_ra_strain_anal * 100, + list_q_anal*1e-6, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + linewidth=6) + ax[0].set_xlabel(r'Strain (%)', size=fsize, weight="bold") + ax[0].set_ylabel(r'Deviatoric Stress (MPa)', size=fsize, weight="bold") + #ax[0].legend(loc='lower right', fontsize=fsize) + ax[0].xaxis.set_tick_params(labelsize=fsize) + ax[0].yaxis.set_tick_params(labelsize=fsize) + + # Plot axial strain versus volumetric strain + ax[1].plot(-ax_strain * 100, + -strain_vol * 100, + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[1].plot(-list_ax_strain_anal* 100, + -list_strain_vol_anal* 100, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + label='Semi-Analytical', linewidth=6) + ax[1].set_xlabel(r'Axial Strain (%)', size=fsize, weight="bold") + ax[1].set_ylabel(r'Volumetric Strain (%)', size=fsize, weight="bold") + #ax[1].legend(loc='lower right', fontsize=fsize) + ax[1].xaxis.set_tick_params(labelsize=fsize) + ax[1].yaxis.set_tick_params(labelsize=fsize) + + + # Plot shear stress versus mean stress + ax[2].plot(p_num*1e-6, + q_num*1e-6, + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[2].plot(list_p_anal*1e-6, + list_q_anal*1e-6, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + label='Semi-Analytical', linewidth=6) + ax[2].set_xlabel(r'Mean stress (MPa)', size=fsize, weight="bold") + ax[2].set_ylabel(r'Deviatoric Stress (MPa)', size=fsize, weight="bold") + ax[2].legend(loc='lower right', fontsize=fsize) + ax[2].xaxis.set_tick_params(labelsize=fsize) + ax[2].yaxis.set_tick_params(labelsize=fsize) + + plt.subplots_adjust(left=0.2, bottom=0.1, right=0.9, top=0.9, wspace=0.4, hspace=0.4) + + plt.show() + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ModifiedCamClay.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ModifiedCamClay.hires.png new file mode 100644 index 00000000000..76a8452883f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ModifiedCamClay.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ModifiedCamClay.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ModifiedCamClay.pdf new file mode 100644 index 00000000000..8272f3a5116 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ModifiedCamClay.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ModifiedCamClay.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ModifiedCamClay.png new file mode 100644 index 00000000000..e6021495066 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ModifiedCamClay.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ModifiedCamClay.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ModifiedCamClay.py new file mode 100644 index 00000000000..440c44b3474 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ModifiedCamClay.py @@ -0,0 +1,223 @@ +import os +import sys +import numpy as np +import matplotlib.pyplot as plt +import xml.etree.ElementTree as ElementTree +import os +import argparse + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + # File paths + outputDir = args.outputDir + geosDir = args.geosDir + path = outputDir + "/ModifiedCamClayResults.txt" + xmlFilePath = geosDir + "/inputFiles/triaxialDriver/triaxialDriver_base.xml" + xmlFilePath_case = geosDir + "/inputFiles/triaxialDriver/triaxialDriver_ModifiedCamClay.xml" + imposedStrainFilePath = geosDir + "/inputFiles/triaxialDriver/tables/axialStrain.geos" + + # Load GEOSX results + time, ax_strain, ra_strain1, ra_strain2, ax_stress, ra_stress1, ra_stress2, newton_iter, residual_norm = np.loadtxt( + path, skiprows=5, unpack=True) + + # Extract mechanical parameters from XML file + tree = ElementTree.parse(xmlFilePath) + tree_case = ElementTree.parse(xmlFilePath_case) + model = tree_case.find('Tasks/TriaxialDriver') + param = tree.find('Constitutive/ModifiedCamClay') + + refPressure = float(param.get("defaultRefPressure")) + refStrainVol = float(param.get("defaultRefStrainVol")) + shearModulus = float(param.get("defaultShearModulus")) + preConsolidationPressure = float(param.get("defaultPreConsolidationPressure")) + cslSlope = float(param.get("defaultCslSlope")) + virginCompressionIndex = float(param.get("defaultVirginCompressionIndex")) + recompressionIndex = float(param.get("defaultRecompressionIndex")) + initialStress = float(model.get("initialStress")) + + # Extract loading from input tables + imp_strain = np.loadtxt( + imposedStrainFilePath, skiprows=0, unpack=True) + + list_ax_strain_anal = [] + numStepPerLoadingPeriod = 10000 + + for i in range(0,len(imp_strain)-1): + dStrainPerStep = (imp_strain[i+1]-imp_strain[i])/numStepPerLoadingPeriod + loadingPeriod = np.arange(imp_strain[i],imp_strain[i+1]+dStrainPerStep,dStrainPerStep) + list_ax_strain_anal = np.concatenate((list_ax_strain_anal, loadingPeriod), axis=0) + + list_ax_stress_anal = np.zeros(len(list_ax_strain_anal)) + list_ra_stress_anal = np.zeros(len(list_ax_strain_anal)) + list_ra_strain_anal = np.zeros(len(list_ax_strain_anal)) + + p_anal = refPressure + list_ax_strain_anal += refStrainVol # Oedometric compaction: zero lateral strain + list_ax_stress_anal += initialStress # Assuming isotropic initial stress condition + list_ra_stress_anal += initialStress + + for idx in range(1,len(list_ax_strain_anal)): + delta_ax_strain_anal = list_ax_strain_anal[idx]-list_ax_strain_anal[idx-1] + delta_ra_strain_anal = 0 + + # Compute elastic moduli + bulkModulus = - p_anal/recompressionIndex + lameModulus = bulkModulus - 2.0/3.0*shearModulus + + # Elastic trial + delta_ax_stress_anal = (lameModulus+2.0*shearModulus)*delta_ax_strain_anal + 2.0*lameModulus*delta_ra_strain_anal + delta_ra_stress_anal = lameModulus*delta_ax_strain_anal + (2.0*lameModulus+2.0*shearModulus)*delta_ra_strain_anal + + ax_stress_anal = list_ax_stress_anal[idx-1] + delta_ax_stress_anal + ra_stress_anal = list_ra_stress_anal[idx-1] + delta_ra_stress_anal + + p_anal = (ax_stress_anal + 2.0*ra_stress_anal)/3.0 + q_anal = -(ax_stress_anal - ra_stress_anal) + + # Plastic correction + F_anal = q_anal*q_anal + cslSlope*cslSlope*p_anal*(p_anal-preConsolidationPressure) + + if(F_anal>=0): + # Derivatives + dF_dp = cslSlope*cslSlope*(2.0*p_anal-preConsolidationPressure) + dF_dq = 2.0*q_anal + dF_dpc = -cslSlope*cslSlope*p_anal + + dG_dp = dF_dp # associated plastic rule was considered + dG_dq = dF_dq + + dpc_dlambda = -preConsolidationPressure/(virginCompressionIndex-recompressionIndex)*dG_dp + hardeningRate = -dF_dpc*dpc_dlambda + + # Elasto-plastic coefficients + coeff_1 = 1.0/bulkModulus + dG_dp*dF_dp/hardeningRate + coeff_2 = dG_dp*dF_dq/hardeningRate + coeff_3 = 3.0/2.0*dG_dq*dF_dp/hardeningRate + coeff_4 = 1.0/2.0/shearModulus + 3.0/2.0*dG_dq*dF_dq/hardeningRate + denom = coeff_1*coeff_4 - coeff_2*coeff_3 + + # Compute stress variations + delta_ax_strain_anal = list_ax_strain_anal[idx] - list_ax_strain_anal[idx-1] + + delta_strain_vol = delta_ax_strain_anal + delta_strain_shear = -delta_ax_strain_anal + delta_p_anal = (coeff_4*delta_strain_vol - coeff_2*delta_strain_shear)/denom + delta_q_anal = (coeff_1*delta_strain_shear - coeff_3*delta_strain_vol)/denom + + delta_ax_stress_anal = (3.0*delta_p_anal-2*delta_q_anal)/3.0 + delta_ra_stress_anal = delta_ax_stress_anal+delta_q_anal + + # Update stress + ax_stress_anal = list_ax_stress_anal[idx-1] + delta_ax_stress_anal + ra_stress_anal = list_ra_stress_anal[idx-1] + delta_ra_stress_anal + + delta_lambda = (dF_dq*delta_q_anal + dF_dp*delta_p_anal)/hardeningRate + delta_pc = dpc_dlambda * delta_lambda + preConsolidationPressure += delta_pc + + p_anal = (ax_stress_anal + 2.0*ra_stress_anal)/3.0 + q_anal = -(ax_stress_anal - ra_stress_anal) + + list_ax_stress_anal[idx] = ax_stress_anal + list_ra_stress_anal[idx] = ra_stress_anal + + list_p_anal = (list_ax_stress_anal + 2.0 * list_ra_stress_anal) / 3.0 + list_q_anal = -(list_ax_stress_anal - list_ra_stress_anal) + + list_strain_vol_anal = list_ax_strain_anal + 2.0 * list_ra_strain_anal + + p_num = (ax_stress + 2.0 * ra_stress1) / 3.0 + q_num = -(ax_stress - ra_stress1) + + #Visualization parameters + fsize = 30 + msize = 12 + lw = 6 + malpha = 0.5 + fig, ax = plt.subplots(1, 3, figsize=(37, 10)) + cmap = plt.get_cmap("tab10") + + ax[0].plot(-ax_strain * 100, #convert to % + -ax_stress*1e-3, #convert to kPa + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[0].plot(-list_ax_strain_anal* 100, + -list_ax_stress_anal*1e-3, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + label='Semi-Analytical', linewidth=6) + + ax[0].set_xlabel(r'Axial Strain (%)', size=fsize, weight="bold") + ax[0].set_ylabel(r'Axial Stress (kPa)', size=fsize, weight="bold") + #ax[0].legend(loc='lower right', fontsize=fsize) + ax[0].xaxis.set_tick_params(labelsize=fsize) + ax[0].yaxis.set_tick_params(labelsize=fsize) + + ax[1].plot(-ax_strain * 100, + -ra_stress1 * 1e-3, + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[1].plot(-list_ax_strain_anal* 100, + -list_ra_stress_anal* 1e-3, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + label='Semi-Analytical', linewidth=6) + ax[1].set_xlabel(r'Axial Strain (%)', size=fsize, weight="bold") + ax[1].set_ylabel(r'Radial stress (kPa)', size=fsize, weight="bold") + #ax[1].legend(loc='lower right', fontsize=fsize) + ax[1].xaxis.set_tick_params(labelsize=fsize) + ax[1].yaxis.set_tick_params(labelsize=fsize) + + # Plan p-q + ax[2].plot(-p_num*1e-3, + q_num*1e-3, + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[2].plot(-list_p_anal*1e-3, + list_q_anal*1e-3, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + label='Semi-Analytical', linewidth=6) + ax[2].set_xlabel(r'Mean stress (kPa)', size=fsize, weight="bold") + ax[2].set_ylabel(r'Deviatoric Stress (kPa)', size=fsize, weight="bold") + ax[2].legend(loc='lower right', fontsize=fsize) + ax[2].xaxis.set_tick_params(labelsize=fsize) + ax[2].yaxis.set_tick_params(labelsize=fsize) + + plt.subplots_adjust(left=0.2, bottom=0.1, right=0.9, top=0.9, wspace=0.4, hspace=0.4) + + plt.show() + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/RelaxationTest/relaxationTestFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/RelaxationTest/relaxationTestFigure.hires.png new file mode 100644 index 00000000000..dd4f9fcbfc5 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/RelaxationTest/relaxationTestFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/RelaxationTest/relaxationTestFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/RelaxationTest/relaxationTestFigure.pdf new file mode 100644 index 00000000000..e6882920e9f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/RelaxationTest/relaxationTestFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/RelaxationTest/relaxationTestFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/RelaxationTest/relaxationTestFigure.png new file mode 100644 index 00000000000..60de14e5ef7 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/RelaxationTest/relaxationTestFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/RelaxationTest/relaxationTestFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/RelaxationTest/relaxationTestFigure.py new file mode 100644 index 00000000000..abb10fdcaac --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/RelaxationTest/relaxationTestFigure.py @@ -0,0 +1,324 @@ +import os +import sys +import numpy as np +import matplotlib.pyplot as plt +import xml.etree.ElementTree as ElementTree +from math import sin,cos,tan,exp,atan +import h5py +import os +import argparse + + +def getMechanicalParametersFromXML( xmlFilePath ): + tree = ElementTree.parse(xmlFilePath) + + param = tree.find('Constitutive/ViscoExtendedDruckerPrager') + + mechanicalParameters = dict.fromkeys(["bulkModulus", "shearModulus", "cohesion", "initialFrictionAngle", "residualFrictionAngle", "dilationRatio", "hardening", "relaxationTime"]) + mechanicalParameters["bulkModulus"] = float(param.get("defaultBulkModulus")) + mechanicalParameters["shearModulus"] = float(param.get("defaultShearModulus")) + mechanicalParameters["cohesion"] = float(param.get("defaultCohesion")) + mechanicalParameters["initialFrictionAngle"] = float(param.get("defaultInitialFrictionAngle")) + mechanicalParameters["residualFrictionAngle"] = float(param.get("defaultResidualFrictionAngle")) + mechanicalParameters["dilationRatio"] = float(param.get("defaultDilationRatio")) + mechanicalParameters["hardening"] = float(param.get("defaultHardening")) + mechanicalParameters["relaxationTime"] = float(param.get("relaxationTime")) + + return mechanicalParameters + + +def getLoadingFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + param = tree.findall('FieldSpecifications/FieldSpecification') + + for elem in param: + if elem.get("name") == "stressZZ" and elem.get("initialCondition") == "1": + initialStress = float(elem.get("scale")) + + elif elem.get("name") == "axialload" and elem.get("fieldName") == "totalDisplacement": + strainScale = float(elem.get("scale")) + + param1 = tree.find('Functions/TableFunction') + if param1.get("name") == "timeFunction" and param1.get("inputVarNames") == "{ time }": + load = param1.get("values") + load = [float(i)*strainScale for i in load[1:-1].split(",")] + loadTime = param1.get("coordinates") + loadTime = [float(i) for i in loadTime[1:-1].split(",")] + + return initialStress, load, loadTime + + +def semiAnalytical( mechanicalParameters, imp_strain, imp_time, initialStress ): + bulkModulus = mechanicalParameters["bulkModulus"] + shearModulus = mechanicalParameters["shearModulus"] + cohesion = mechanicalParameters["cohesion"] + dilationRatio = mechanicalParameters["dilationRatio"] + hardeningParameter = mechanicalParameters["hardening"] + relaxationTime = mechanicalParameters["relaxationTime"] + # Compute Lame modulus and Young modulus + lameModulus = bulkModulus - 2.0/3.0*shearModulus + youngModulus = 1.0/(1.0/9.0/bulkModulus + 1.0/3.0/shearModulus) + + # Initial friction and cohesion parameters + initialFrictionAngleRad = mechanicalParameters["initialFrictionAngle"]*np.pi/180.0 + cosInitialFrictionAngle = np.cos(initialFrictionAngleRad) + sinInitialFrictionAngle = np.sin(initialFrictionAngleRad) + a_init = 6.0*cohesion*cosInitialFrictionAngle/(3.0-sinInitialFrictionAngle) + b_init = 6.0*sinInitialFrictionAngle/(3.0-sinInitialFrictionAngle) + + # Residual friction parameters + residualFrictionAngleRad = mechanicalParameters["residualFrictionAngle"]*np.pi/180.0 + sinResidualFrictionAngle = np.sin(residualFrictionAngleRad) + b_resi = 6.0*sinResidualFrictionAngle/(3.0-sinResidualFrictionAngle) + + list_ax_strain_anal = [] + numStepPerLoadingPeriod = 1000 + + for i in range(0,len(imp_strain)-1): + loadingPeriod = np.linspace(imp_strain[i],imp_strain[i+1], numStepPerLoadingPeriod, endpoint=False) + list_ax_strain_anal = np.concatenate((list_ax_strain_anal, loadingPeriod), axis=0) + + list_time_anal = [] + for i in range(0,len(imp_time)-1): + timePeriod = np.linspace(imp_time[i],imp_time[i+1], numStepPerLoadingPeriod, endpoint=False) + list_time_anal = np.concatenate((list_time_anal, timePeriod), axis=0) + + list_ra_stress_anal = initialStress*np.ones(len(list_ax_strain_anal)) #constant radial confining stress + + # Initiate radial strain and axial stress arrays + list_ra_strain_anal = np.zeros(len(list_ax_strain_anal)) + list_ax_stress_anal = np.zeros(len(list_ax_strain_anal)) + list_ax_stress_anal[0] = initialStress + + # Loop over the loading/unloading steps + list_ra_strain_anal[0] = 0 + plasticMultiplier = 0 + b = b_init + + for idx in range(1,len(list_ax_strain_anal)): + delta_ax_strain_anal = list_ax_strain_anal[idx] - list_ax_strain_anal[idx-1] + delta_time_anal = list_time_anal[idx]-list_time_anal[idx-1] + delta_ra_stress_anal = 0 + + # Elastic trial + delta_ra_strain_anal = (delta_ra_stress_anal-lameModulus*delta_ax_strain_anal)/(2.0*lameModulus+2.0*shearModulus) + delta_ax_stress_anal = (lameModulus+2.0*shearModulus)*delta_ax_strain_anal + lameModulus/(lameModulus+shearModulus)*(delta_ra_stress_anal-lameModulus*delta_ax_strain_anal) + + ax_stress_anal = list_ax_stress_anal[idx-1] + delta_ax_stress_anal + ra_strain_anal = list_ra_strain_anal[idx-1] + delta_ra_strain_anal + + # Compute mean and shear stresses + ra_stress_anal = list_ra_stress_anal[idx] + p_anal = (ax_stress_anal + 2.0 * ra_stress_anal) / 3.0 + q_anal = -(ax_stress_anal - ra_stress_anal) + + # Plastic correction + if(q_anal>=0): #loading + + F_anal = q_anal + b*p_anal - b*a_init/b_init + + if(F_anal>=0): + + b = b_init + plasticMultiplier/(hardeningParameter+plasticMultiplier) * (b_resi - b_init) + b_dilation = b*dilationRatio + + dF_db = p_anal - a_init/b_init + db_dlambda = hardeningParameter * (b_resi - b_init) / (hardeningParameter+plasticMultiplier) / (hardeningParameter+plasticMultiplier) + hardeningRate = -dF_db*db_dlambda + + # Variation of Perzyna plastic multiplier, see Runesson et al. 1999, see Eq. 56, 4, 80, 62, 63 + parameter_Aep = 3.0*shearModulus + bulkModulus*b*b_dilation + hardeningRate + delta_lambda = delta_time_anal / relaxationTime * (F_anal/parameter_Aep) + + # Compute stress and strain variations + delta_ax_stress_anal = ( delta_ax_strain_anal-delta_lambda*(b_dilation-3.0)/3.0 ) * youngModulus + delta_ra_strain_anal = delta_ax_strain_anal - delta_ax_stress_anal / 2.0 / shearModulus + 3.0/2.0*delta_lambda + + # Compute stress and strain at actual loading step + ax_stress_anal = list_ax_stress_anal[idx-1] + delta_ax_stress_anal + ra_strain_anal = list_ra_strain_anal[idx-1] + delta_ra_strain_anal + + # Update plastic multiplier + plasticMultiplier += delta_lambda + + else: #unloading + + F_anal = -q_anal + b*p_anal - b*a_init/b_init # negative sign added to q for q<0 to obtain the absolute value + + if(F_anal>=0): + b = b_init + plasticMultiplier/(hardeningParameter+plasticMultiplier) * (b_resi - b_init) + b_dilation = b*dilationRatio + + dF_db = p_anal - a_init/b_init + db_dlambda = hardeningParameter * (b_resi - b_init) / (hardeningParameter+plasticMultiplier) / (hardeningParameter+plasticMultiplier) + hardeningRate = -dF_db*db_dlambda + + # Variation of Perzyna plastic multiplier, see Runesson et al. 1999, see Eq. 56, 4, 80, 62, 63 + parameter_Aep = 3.0*shearModulus + bulkModulus*b*b_dilation + hardeningRate + delta_lambda = delta_time_anal / relaxationTime * (F_anal/parameter_Aep) + + # Compute stress and strain variations + delta_ax_stress_anal = ( delta_ax_strain_anal-delta_lambda*(b_dilation+3.0)/3.0 ) * youngModulus + delta_ra_strain_anal = delta_ax_strain_anal - delta_ax_stress_anal / 2.0 / shearModulus - 3.0/2.0*delta_lambda + + # Compute stress and strain at actual loading step + ax_stress_anal = list_ax_stress_anal[idx-1] + delta_ax_stress_anal + ra_strain_anal = list_ra_strain_anal[idx-1] + delta_ra_strain_anal + + # Update plastic multiplier + plasticMultiplier += delta_lambda + + list_ax_stress_anal[idx] = ax_stress_anal + list_ra_strain_anal[idx] = ra_strain_anal + + # Preparing data for visualizing semi-analytical results + list_p_anal = (list_ax_stress_anal + 2.0 * list_ra_stress_anal) / 3.0 + list_q_anal = -(list_ax_stress_anal - list_ra_stress_anal) + + return list_ax_stress_anal,list_time_anal,list_ax_strain_anal,list_ra_strain_anal,list_p_anal,list_q_anal + + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + # File path + outputDir = args.outputDir + geosDir = args.geosDir + hdf5File1Path = outputDir + "/displacement_history.hdf5" + hdf5File2Path = outputDir + "/stress_history.hdf5" + xmlFile1Path = geosDir + "/inputFiles/solidMechanics/viscoExtendedDruckerPrager_relaxation_base.xml" + xmlFile2Path = geosDir + "/inputFiles/solidMechanics/viscoExtendedDruckerPrager_relaxation_benchmark.xml" + + # Read HDF5 + # Global Coordinate of Nodal Point + hf = h5py.File(hdf5File1Path, 'r') + xl_node = hf.get('totalDisplacement ReferencePosition topPoint') + xcord_node = xl_node[0,:,0] + ycord_node = xl_node[0,:,1] + zcord_node = xl_node[0,:,2] + # Load Displacement Components + disp = hf.get('totalDisplacement topPoint') + + # Global Coordinate of Element Center + hf = h5py.File(hdf5File2Path, 'r') + xl_elm = hf.get('rock_stress elementCenter') + xl_elm = np.asarray(xl_elm) + xcord_elm = xl_elm[0, :, 0] + ycord_elm = xl_elm[0, :, 1] + zcord_elm = xl_elm[0, :, 2] + time = hf.get('rock_stress Time') + # Load Stress Components + sigma = hf.get('rock_stress') + sigma = np.asarray(sigma) + sigma_Cart = np.zeros([len(sigma[:,0,0]), len(sigma[0,:,0]), 6]) + for tl in range(0,len(sigma[:,0,0])): + for i in range(0,len(sigma[0,:,0])): + for j in range(0, 6): + for k in range(0, 8): + sigma_Cart[tl,i,j] += sigma[tl, i, j+6*k]/8. + + ax_stress = sigma_Cart[:, -1, 2] + ra_stress = sigma_Cart[:, -1, 0] + p_num = (ax_stress + 2.0 * ra_stress) / 3.0 + q_num = -(ax_stress - ra_stress) + ax_strain = disp[:, -1, 2] + ra_strain = disp[:, -1, 0] + + + # Extract info from XML + mechanicalParameters = getMechanicalParametersFromXML(xmlFile1Path) + initialStress, imp_strain, imp_time = getLoadingFromXML(xmlFile1Path) + list_ax_stress_anal,list_time_anal,list_ax_strain_anal,list_ra_strain_anal,list_p_anal,list_q_anal = semiAnalytical( mechanicalParameters, imp_strain, imp_time, initialStress ) + + + #Visualization parameters + fsize = 20 + msize = 12 + lw = 6 + malpha = 0.5 + N1 = 3 + fig, ax = plt.subplots(3,1,figsize=(10, 18)) + cmap = plt.get_cmap("tab10") + + + # Plot strain versus shear stress + ax[0].plot(-ax_strain[::N1]*100, q_num[::N1]*1e-6, 'o', color=cmap(2), alpha=malpha, fillstyle='full', markersize=msize, label='GEOS') + ax[0].plot(-ra_strain[::N1]*100, q_num[::N1]*1e-6, 'o', color=cmap(2), alpha=malpha, fillstyle='full', markersize=msize) + ax[0].plot(-list_ax_strain_anal*100, list_q_anal*1e-6, lw=lw, alpha=0.8, color=cmap(2), label='Analytical') + ax[0].plot(-list_ra_strain_anal*100, list_q_anal*1e-6, lw=lw, alpha=0.8, color=cmap(2)) + ax[0].set_xlim([-0.12, 0.12]) + ax[0].set_ylim(0, 12) + ax[0].set_xlabel(r'Strain (%)', size=fsize, weight="bold") + ax[0].set_ylabel(r'Deviatoric Stress (MPa)', size=fsize, weight="bold") + ax[0].legend(loc='lower left',fontsize=fsize) + ax[0].grid(True, which="both", ls="-") + ax[0].xaxis.set_tick_params(labelsize=fsize) + ax[0].yaxis.set_tick_params(labelsize=fsize) + + + # Plot stress path and yield surfaces + phi_i = mechanicalParameters["initialFrictionAngle"] + phi_r= mechanicalParameters["residualFrictionAngle"] + c_i = mechanicalParameters["cohesion"]/1.0e6 + f_i = atan(6.0*sin(phi_i/180*np.pi)/(3.0-sin(phi_i/180*np.pi)))*180/np.pi + f_r = atan(6.0*sin(phi_r/180*np.pi)/(3.0-sin(phi_r/180*np.pi)))*180/np.pi + d_i = 6.0*c_i*cos(phi_i/180*np.pi)/(3.0-sin(phi_i/180*np.pi)) + po = d_i/tan(f_i/180*np.pi) + d_r = po*tan(f_r/180*np.pi) + + k_i = tan(f_i/180*np.pi) + p_Yield = np.linspace(0, 50, 100) + q_iniYield = k_i*p_Yield+d_i + k_r = tan(f_r/180*np.pi) + q_resYield = k_r*p_Yield+d_r + + ax[1].plot(-p_num[::N1]*1e-6, q_num[::N1]*1e-6, 'o', color=cmap(2), alpha=malpha, fillstyle='full', markersize=msize, label='GEOS') + ax[1].plot(-list_p_anal*1e-6, list_q_anal*1e-6, lw=lw, alpha=0.8, color=cmap(2), label='Analytical') + ax[1].plot(p_Yield, q_iniYield, lw=lw, alpha=0.8, color='k', linestyle= '--', label='Initial Yield Surface') + ax[1].plot(p_Yield, q_resYield, lw=lw, alpha=0.8, color='orange', linestyle= '--', label='Residual Yield Surface') + ax[1].set_xlim([0, 15]) + ax[1].set_ylim([0, 15]) + ax[1].set_xlabel(r'p (MPa)', size=fsize, weight="bold") + ax[1].set_ylabel(r'q (MPa)', size=fsize, weight="bold") + ax[1].legend(loc='upper left',fontsize=fsize) + ax[1].grid(True, which="both", ls="-") + ax[1].xaxis.set_tick_params(labelsize=fsize) + ax[1].yaxis.set_tick_params(labelsize=fsize) + + + + # Plot axial stress and strain with time + ax[2].plot(time[::N1]/86400, -ax_strain[::N1]*100, 'o', color=cmap(1), alpha=malpha, fillstyle='full', markersize=msize, label='Axial Strain_GEOS') + ax[2].plot(list_time_anal/86400, -list_ax_strain_anal*100, lw=lw, alpha=0.8, color=cmap(1), label='Axial Strain_Analytical') + ax[2].set_xlabel(r'Time (D)', size=fsize, weight="bold") + ax[2].set_ylabel(r'Axial Strain (%)', size=fsize, weight="bold") + ax[2].set_ylim([0, 0.2]) + ax[2].legend(loc='upper left',fontsize=fsize) + ax[2].grid(True, which="both", ls="-") + ax[2].xaxis.set_tick_params(labelsize=fsize) + ax[2].yaxis.set_tick_params(labelsize=fsize) + ax2=ax[2].twinx() + ax2.plot(time[::N1]/86400, -ax_stress[::N1]/1.0e6, 'o', color=cmap(0), alpha=malpha, fillstyle='full', markersize=msize, label='Axial Stress_GEOS') + ax2.plot(list_time_anal/86400, -list_ax_stress_anal/1.0e6, lw=lw, alpha=0.8, color=cmap(0), label='Axial Stress_Analytical') + ax2.set_ylabel(r'Stress (MPa)', size=fsize, weight="bold") + ax2.set_ylim([10, 25]) + ax2.legend(loc='lower right',fontsize=fsize) + ax2.yaxis.set_tick_params(labelsize=fsize) + + + + plt.subplots_adjust(left=0.15, bottom=0.1, right=0.85, top=0.95, wspace=0.4, hspace=0.4) + plt.show() + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoDruckerPrager.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoDruckerPrager.hires.png new file mode 100644 index 00000000000..6227e925168 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoDruckerPrager.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoDruckerPrager.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoDruckerPrager.pdf new file mode 100644 index 00000000000..0fb8871cb92 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoDruckerPrager.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoDruckerPrager.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoDruckerPrager.png new file mode 100644 index 00000000000..be8fba7ed94 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoDruckerPrager.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoDruckerPrager.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoDruckerPrager.py new file mode 100644 index 00000000000..660f780bd75 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoDruckerPrager.py @@ -0,0 +1,274 @@ +import os +import sys +import numpy as np +import matplotlib.pyplot as plt +import xml.etree.ElementTree as ElementTree +import os +import argparse + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + # File paths + outputDir = args.outputDir + geosDir = args.geosDir + path = outputDir + "/ViscoDruckerPragerResults.txt" + timeFilePath = geosDir + "/inputFiles/triaxialDriver/tables/time.geos" + xmlFilePath = geosDir + "/inputFiles/triaxialDriver/triaxialDriver_base.xml" + xmlFilePath_case = geosDir + "/inputFiles/triaxialDriver/triaxialDriver_ViscoDruckerPrager.xml" + imposedStrainFilePath = geosDir + "/inputFiles/triaxialDriver/tables/axialStrain.geos" + imposedStressFilePath = geosDir + "/inputFiles/triaxialDriver/tables/radialStress.geos" + + # Load GEOSX results + time, ax_strain, ra_strain1, ra_strain2, ax_stress, ra_stress1, ra_stress2, newton_iter, residual_norm = np.loadtxt( + path, skiprows=5, unpack=True) + + # Extract mechanical parameters from XML file + tree = ElementTree.parse(xmlFilePath) + tree_case = ElementTree.parse(xmlFilePath_case) + model = tree_case.find('Tasks/TriaxialDriver') + param = tree.find('Constitutive/ViscoDruckerPrager') + + bulkModulus = float(param.get("defaultBulkModulus")) + shearModulus = float(param.get("defaultShearModulus")) + cohesion = float(param.get("defaultCohesion")) + frictionAngle = float(param.get("defaultFrictionAngle")) + dilationAngle = float(param.get("defaultDilationAngle")) + hardeningRate = float(param.get("defaultHardeningRate")) + relaxationTime = float(param.get("relaxationTime")) + initialStress = float(model.get("initialStress")) + + # Compute Lame modulus and Young modulus + lameModulus = bulkModulus - 2.0/3.0*shearModulus + youngModulus = 1.0 / ( 1.0/9.0/bulkModulus + 1.0/3.0/shearModulus ) + + # Friction and cohesion parameters + frictionAngleRad = frictionAngle*np.pi/180.0 + cosFrictionAngle = np.cos(frictionAngleRad) + sinFrictionAngle = np.sin(frictionAngleRad) + a = 6.0*cohesion*cosFrictionAngle/(3.0-sinFrictionAngle) + b = 6.0*sinFrictionAngle/(3.0-sinFrictionAngle) + + # Dilation parameter + dilationAngleRad = dilationAngle*np.pi/180.0 + sinDilationAngle = np.sin(dilationAngleRad) + b_dilation = 6.0*sinDilationAngle/(3.0-sinDilationAngle) + + # See Runesson et al. 1999, see Eq. 56 + parameter_Aep = 3.0*shearModulus + bulkModulus*b*b_dilation + hardeningRate + + # Extract loading from input tables + imp_strain = np.loadtxt( + imposedStrainFilePath, skiprows=0, unpack=True) + + list_ax_strain_anal = [] + numStepPerLoadingPeriod = 1000 + + for i in range(0,len(imp_strain)-1): + dStrainPerStep = (imp_strain[i+1]-imp_strain[i])/numStepPerLoadingPeriod + loadingPeriod = np.arange(imp_strain[i],imp_strain[i+1]+dStrainPerStep,dStrainPerStep) + list_ax_strain_anal = np.concatenate((list_ax_strain_anal, loadingPeriod), axis=0) + + # Extract time from input tables + imp_time = np.loadtxt( + timeFilePath, skiprows=0, unpack=True) + + list_time_anal = [] + for i in range(0,len(imp_time)-1): + dTimePerStep = (imp_time[i+1]-imp_time[i])/numStepPerLoadingPeriod + timePeriod = np.arange(imp_time[i],imp_time[i+1]+dTimePerStep,dTimePerStep) + list_time_anal = np.concatenate((list_time_anal, timePeriod), axis=0) + + # Extract radial stress loading from input tables + imp_stress = np.loadtxt( + imposedStressFilePath, skiprows=0, unpack=True) + + list_ra_stress_anal = imp_stress[0]*np.ones(len(list_ax_strain_anal)) #constant radial confining stress + + # Initiate radial strain and axial stress arrays + list_ra_strain_anal = np.zeros(len(list_ax_strain_anal)) + list_ax_stress_anal = np.zeros(len(list_ax_strain_anal)) + list_ax_stress_anal[0] = initialStress + list_ra_strain_anal[0] = 0 + + # Loop over the loading/unloading steps + for idx in range(1,len(list_ax_strain_anal)): + delta_ax_strain_anal = list_ax_strain_anal[idx] - list_ax_strain_anal[idx-1] + delta_time_anal = list_time_anal[idx]-list_time_anal[idx-1] + delta_ra_stress_anal = 0 # constant radial confining stress + + # Elastic trial + delta_ra_strain_anal = (delta_ra_stress_anal-lameModulus*delta_ax_strain_anal)/(2.0*lameModulus+2.0*shearModulus) + delta_ax_stress_anal = (lameModulus+2.0*shearModulus)*delta_ax_strain_anal + lameModulus/(lameModulus+shearModulus)*(delta_ra_stress_anal-lameModulus*delta_ax_strain_anal) + + ax_stress_anal = list_ax_stress_anal[idx-1] + delta_ax_stress_anal + ra_strain_anal = list_ra_strain_anal[idx-1] + delta_ra_strain_anal + + # Compute mean and shear stresses + ra_stress_anal = list_ra_stress_anal[idx] + p_anal = (ax_stress_anal + 2.0 * ra_stress_anal) / 3.0 + q_anal = -(ax_stress_anal - ra_stress_anal) + + # Plastic correction + if(q_anal>=0): #loading + + F_anal = q_anal + b*p_anal - a + + if(F_anal>=0): + + # Variation of Perzyna visco-plastic multiplier, see Runesson et al. 1999, see Eq. 4, 80, 62, 63 + delta_lambda = delta_time_anal / relaxationTime * (F_anal/parameter_Aep) + + # Compute stress and strain variations + delta_ax_strain_anal = list_ax_strain_anal[idx] - list_ax_strain_anal[idx-1] + delta_ax_stress_anal = ( delta_ax_strain_anal-delta_lambda*(b_dilation-3.0)/3.0 ) * youngModulus + delta_ra_strain_anal = delta_ax_strain_anal - delta_ax_stress_anal / 2.0 / shearModulus + 3.0/2.0*delta_lambda + + # Compute stress and strain at actual loading step + ax_stress_anal = list_ax_stress_anal[idx-1] + delta_ax_stress_anal + ra_strain_anal = list_ra_strain_anal[idx-1] + delta_ra_strain_anal + + # Update plastic cohesion + delta_a = hardeningRate*delta_lambda + a += delta_a + + else: #unloading + + F_anal = -q_anal + b*p_anal - a # negative sign added to q for q<0 to obtain the absolute value + + if(F_anal>=0): + # Variation of Perzyna visco-plastic multiplier, see Runesson et al. 1999, see Eq. 4, 80, 62, 63 + delta_lambda = delta_time_anal / relaxationTime * (F_anal/parameter_Aep) + + # Compute stress and strain variations + delta_ax_strain_anal = list_ax_strain_anal[idx] - list_ax_strain_anal[idx-1] + delta_ax_stress_anal = ( delta_ax_strain_anal-delta_lambda*(b_dilation+3.0)/3.0 ) * youngModulus + delta_ra_strain_anal = delta_ax_strain_anal - delta_ax_stress_anal / 2.0 / shearModulus - 3.0/2.0*delta_lambda + + # Compute stress and strain at actual loading step + ax_stress_anal = list_ax_stress_anal[idx-1] + delta_ax_stress_anal + ra_strain_anal = list_ra_strain_anal[idx-1] + delta_ra_strain_anal + + # Update plastic cohesion + delta_a = hardeningRate*delta_lambda + a += delta_a + + list_ax_stress_anal[idx] = ax_stress_anal + list_ra_strain_anal[idx] = ra_strain_anal + + # Preparing data for visualizing semi-analytical results + list_p_anal = (list_ax_stress_anal + 2.0 * list_ra_stress_anal) / 3.0 + list_q_anal = -(list_ax_stress_anal - list_ra_stress_anal) + + list_strain_vol_anal = list_ax_strain_anal + 2.0 * list_ra_strain_anal + + p_num = (ax_stress + 2.0 * ra_stress1) / 3.0 + q_num = -(ax_stress - ra_stress1) + + strain_vol = ax_strain + 2.0 * ra_strain1 + + #Visualization parameters + fsize = 30 + msize = 12 + lw = 6 + malpha = 0.5 + fig, ax = plt.subplots(1, 3, figsize=(37, 10)) + cmap = plt.get_cmap("tab10") + + # Plot strain versus shear stress + ax[0].plot(-ax_strain * 100, #convert to % + q_num*1e-6, #convert to MPa + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[0].plot(-ra_strain1 * 100, + q_num*1e-6, + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha) + ax[0].plot(-list_ax_strain_anal* 100, + list_q_anal*1e-6, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + label='Semi-Analytical', linewidth=6) + ax[0].plot(-list_ra_strain_anal * 100, + list_q_anal*1e-6, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + linewidth=6) + ax[0].set_xlabel(r'Strain (%)', size=fsize, weight="bold") + ax[0].set_ylabel(r'Deviatoric Stress (MPa)', size=fsize, weight="bold") + ax[0].xaxis.set_tick_params(labelsize=fsize) + ax[0].yaxis.set_tick_params(labelsize=fsize) + + # Plot axial strain versus volumetric strain + ax[1].plot(-ax_strain * 100, + -strain_vol * 100, + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[1].plot(-list_ax_strain_anal* 100, + -list_strain_vol_anal* 100, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + label='Semi-Analytical', linewidth=6) + ax[1].set_xlabel(r'Axial Strain (%)', size=fsize, weight="bold") + ax[1].set_ylabel(r'Volumetric Strain (%)', size=fsize, weight="bold") + #ax[1].legend(loc='lower right', fontsize=fsize) + ax[1].xaxis.set_tick_params(labelsize=fsize) + ax[1].yaxis.set_tick_params(labelsize=fsize) + + # Plot shear stress versus mean stress + ax[2].plot(-p_num*1e-6, + q_num*1e-6, + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[2].plot(-list_p_anal*1e-6, + list_q_anal*1e-6, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + label='Semi-Analytical', linewidth=6) + ax[2].set_xlabel(r'Mean stress (MPa)', size=fsize, weight="bold") + ax[2].set_ylabel(r'Deviatoric Stress (MPa)', size=fsize, weight="bold") + ax[2].legend(loc='lower right', fontsize=fsize) + ax[2].xaxis.set_tick_params(labelsize=fsize) + ax[2].yaxis.set_tick_params(labelsize=fsize) + + plt.subplots_adjust(left=0.2, bottom=0.1, right=0.9, top=0.9, wspace=0.4, hspace=0.4) + plt.show() + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoExtendedDruckerPrager.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoExtendedDruckerPrager.hires.png new file mode 100644 index 00000000000..49583f73244 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoExtendedDruckerPrager.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoExtendedDruckerPrager.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoExtendedDruckerPrager.pdf new file mode 100644 index 00000000000..9ad3087e2b5 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoExtendedDruckerPrager.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoExtendedDruckerPrager.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoExtendedDruckerPrager.png new file mode 100644 index 00000000000..45d2c1a7143 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoExtendedDruckerPrager.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoExtendedDruckerPrager.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoExtendedDruckerPrager.py new file mode 100644 index 00000000000..82cccf82ac8 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoExtendedDruckerPrager/TriaxialDriver_vs_SemiAnalytic_ViscoExtendedDruckerPrager.py @@ -0,0 +1,287 @@ +import os +import sys +import numpy as np +import matplotlib.pyplot as plt +import xml.etree.ElementTree as ElementTree +import os +import argparse + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + # File paths + outputDir = args.outputDir + geosDir = args.geosDir + path = outputDir + "/ViscoExtendedDruckerPragerResults.txt" + timeFilePath = geosDir + "/inputFiles/triaxialDriver/tables/time.geos" + xmlFilePath = geosDir + "/inputFiles/triaxialDriver/triaxialDriver_base.xml" + xmlFilePath_case = geosDir + "/inputFiles/triaxialDriver/triaxialDriver_ViscoExtendedDruckerPrager.xml" + imposedStrainFilePath = geosDir + "/inputFiles/triaxialDriver/tables/axialStrain.geos" + imposedStressFilePath = geosDir + "/inputFiles/triaxialDriver/tables/radialStress.geos" + + # Load GEOSX results + time, ax_strain, ra_strain1, ra_strain2, ax_stress, ra_stress1, ra_stress2, newton_iter, residual_norm = np.loadtxt( + path, skiprows=5, unpack=True) + + # Extract mechanical parameters from XML files + tree = ElementTree.parse(xmlFilePath) + tree_case = ElementTree.parse(xmlFilePath_case) + model = tree_case.find('Tasks/TriaxialDriver') + param = tree.find('Constitutive/ViscoExtendedDruckerPrager') + + bulkModulus = float(param.get("defaultBulkModulus")) + shearModulus = float(param.get("defaultShearModulus")) + cohesion = float(param.get("defaultCohesion")) + initialFrictionAngle = float(param.get("defaultInitialFrictionAngle")) + residualFrictionAngle = float(param.get("defaultResidualFrictionAngle")) + hardeningParameter = float(param.get("defaultHardening")) + dilationRatio = float(param.get("defaultDilationRatio")) + relaxationTime = float(param.get("relaxationTime")) + initialStress = float(model.get("initialStress")) + + # Compute Lame modulus and Young modulus + lameModulus = bulkModulus - 2.0/3.0*shearModulus + youngModulus = 1.0/(1.0/9.0/bulkModulus + 1.0/3.0/shearModulus) + + # Initial friction and cohesion parameters + initialFrictionAngleRad = initialFrictionAngle*np.pi/180.0 + cosInitialFrictionAngle = np.cos(initialFrictionAngleRad) + sinInitialFrictionAngle = np.sin(initialFrictionAngleRad) + a_init = 6.0*cohesion*cosInitialFrictionAngle/(3.0-sinInitialFrictionAngle) + b_init = 6.0*sinInitialFrictionAngle/(3.0-sinInitialFrictionAngle) + + # Residual friction parameters + residualFrictionAngleRad = residualFrictionAngle*np.pi/180.0 + sinResidualFrictionAngle = np.sin(residualFrictionAngleRad) + b_resi = 6.0*sinResidualFrictionAngle/(3.0-sinResidualFrictionAngle) + + # Extract loading from input tables + imp_strain = np.loadtxt( + imposedStrainFilePath, skiprows=0, unpack=True) + + list_ax_strain_anal = [] + numStepPerLoadingPeriod = 1000 + + for i in range(0,len(imp_strain)-1): + dStrainPerStep = (imp_strain[i+1]-imp_strain[i])/numStepPerLoadingPeriod + loadingPeriod = np.arange(imp_strain[i],imp_strain[i+1]+dStrainPerStep,dStrainPerStep) + list_ax_strain_anal = np.concatenate((list_ax_strain_anal, loadingPeriod), axis=0) + + # Extract time from input tables + imp_time = np.loadtxt( + timeFilePath, skiprows=0, unpack=True) + + list_time_anal = [] + for i in range(0,len(imp_time)-1): + dTimePerStep = (imp_time[i+1]-imp_time[i])/numStepPerLoadingPeriod + timePeriod = np.arange(imp_time[i],imp_time[i+1]+dTimePerStep,dTimePerStep) + list_time_anal = np.concatenate((list_time_anal, timePeriod), axis=0) + + # Extract radial stress loading from input tables + imp_stress = np.loadtxt( + imposedStressFilePath, skiprows=0, unpack=True) + + list_ra_stress_anal = imp_stress[0]*np.ones(len(list_ax_strain_anal)) #constant radial confining stress + + # Initiate radial strain and axial stress arrays + list_ra_strain_anal = np.zeros(len(list_ax_strain_anal)) + list_ax_stress_anal = np.zeros(len(list_ax_strain_anal)) + list_ax_stress_anal[0] = initialStress + + # Loop over the loading/unloading steps + list_ra_strain_anal[0] = 0 + plasticMultiplier = 0 + b = b_init + + for idx in range(1,len(list_ax_strain_anal)): + delta_ax_strain_anal = list_ax_strain_anal[idx] - list_ax_strain_anal[idx-1] + delta_time_anal = list_time_anal[idx]-list_time_anal[idx-1] + delta_ra_stress_anal = 0 + + # Elastic trial + delta_ra_strain_anal = (delta_ra_stress_anal-lameModulus*delta_ax_strain_anal)/(2.0*lameModulus+2.0*shearModulus) + delta_ax_stress_anal = (lameModulus+2.0*shearModulus)*delta_ax_strain_anal + lameModulus/(lameModulus+shearModulus)*(delta_ra_stress_anal-lameModulus*delta_ax_strain_anal) + + ax_stress_anal = list_ax_stress_anal[idx-1] + delta_ax_stress_anal + ra_strain_anal = list_ra_strain_anal[idx-1] + delta_ra_strain_anal + + # Compute mean and shear stresses + ra_stress_anal = list_ra_stress_anal[idx] + p_anal = (ax_stress_anal + 2.0 * ra_stress_anal) / 3.0 + q_anal = -(ax_stress_anal - ra_stress_anal) + + # Plastic correction + if(q_anal>=0): #loading + + F_anal = q_anal + b*p_anal - b*a_init/b_init + + if(F_anal>=0): + + b = b_init + plasticMultiplier/(hardeningParameter+plasticMultiplier) * (b_resi - b_init) + b_dilation = b*dilationRatio + + dF_db = p_anal - a_init/b_init + db_dlambda = hardeningParameter * (b_resi - b_init) / (hardeningParameter+plasticMultiplier) / (hardeningParameter+plasticMultiplier) + hardeningRate = -dF_db*db_dlambda + + # Variation of Perzyna plastic multiplier, see Runesson et al. 1999, see Eq. 56, 4, 80, 62, 63 + parameter_Aep = 3.0*shearModulus + bulkModulus*b*b_dilation + hardeningRate + delta_lambda = delta_time_anal / relaxationTime * (F_anal/parameter_Aep) + + # Compute stress and strain variations + delta_ax_stress_anal = ( delta_ax_strain_anal-delta_lambda*(b_dilation-3.0)/3.0 ) * youngModulus + delta_ra_strain_anal = delta_ax_strain_anal - delta_ax_stress_anal / 2.0 / shearModulus + 3.0/2.0*delta_lambda + + # Compute stress and strain at actual loading step + ax_stress_anal = list_ax_stress_anal[idx-1] + delta_ax_stress_anal + ra_strain_anal = list_ra_strain_anal[idx-1] + delta_ra_strain_anal + + # Update plastic multiplier + plasticMultiplier += delta_lambda + + else: #unloading + + F_anal = -q_anal + b*p_anal - b*a_init/b_init # negative sign added to q for q<0 to obtain the absolute value + + if(F_anal>=0): + b = b_init + plasticMultiplier/(hardeningParameter+plasticMultiplier) * (b_resi - b_init) + b_dilation = b*dilationRatio + + dF_db = p_anal - a_init/b_init + db_dlambda = hardeningParameter * (b_resi - b_init) / (hardeningParameter+plasticMultiplier) / (hardeningParameter+plasticMultiplier) + hardeningRate = -dF_db*db_dlambda + + # Variation of Perzyna plastic multiplier, see Runesson et al. 1999, see Eq. 56, 4, 80, 62, 63 + parameter_Aep = 3.0*shearModulus + bulkModulus*b*b_dilation + hardeningRate + delta_lambda = delta_time_anal / relaxationTime * (F_anal/parameter_Aep) + + # Compute stress and strain variations + delta_ax_stress_anal = ( delta_ax_strain_anal-delta_lambda*(b_dilation+3.0)/3.0 ) * youngModulus + delta_ra_strain_anal = delta_ax_strain_anal - delta_ax_stress_anal / 2.0 / shearModulus - 3.0/2.0*delta_lambda + + # Compute stress and strain at actual loading step + ax_stress_anal = list_ax_stress_anal[idx-1] + delta_ax_stress_anal + ra_strain_anal = list_ra_strain_anal[idx-1] + delta_ra_strain_anal + + # Update plastic multiplier + plasticMultiplier += delta_lambda + + list_ax_stress_anal[idx] = ax_stress_anal + list_ra_strain_anal[idx] = ra_strain_anal + + # Preparing data for visualizing semi-analytical results + list_p_anal = (list_ax_stress_anal + 2.0 * list_ra_stress_anal) / 3.0 + list_q_anal = -(list_ax_stress_anal - list_ra_stress_anal) + + list_strain_vol_anal = list_ax_strain_anal + 2.0 * list_ra_strain_anal + + p_num = (ax_stress + 2.0 * ra_stress1) / 3.0 + q_num = -(ax_stress - ra_stress1) + + strain_vol = ax_strain + 2.0 * ra_strain1 + + #Visualization parameters + fsize = 30 + msize = 12 + lw = 6 + malpha = 0.5 + fig, ax = plt.subplots(1, 3, figsize=(37, 10)) + cmap = plt.get_cmap("tab10") + + # Plot strain versus shear stress + ax[0].plot(-ax_strain * 100, #convert to % + q_num*1e-6, #convert to MPa + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[0].plot(-ra_strain1 * 100, + q_num*1e-6, + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha) + ax[0].plot(-list_ax_strain_anal* 100, + list_q_anal*1e-6, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + label='Semi-Analytical', linewidth=6) + ax[0].plot(-list_ra_strain_anal * 100, + list_q_anal*1e-6, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + linewidth=6) + ax[0].set_xlabel(r'Strain (%)', size=fsize, weight="bold") + ax[0].set_ylabel(r'Deviatoric Stress (MPa)', size=fsize, weight="bold") + ax[0].xaxis.set_tick_params(labelsize=fsize) + ax[0].yaxis.set_tick_params(labelsize=fsize) + + # Plot axial strain versus volumetric strain + ax[1].plot(-ax_strain * 100, + -strain_vol * 100, + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[1].plot(-list_ax_strain_anal* 100, + -list_strain_vol_anal* 100, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + label='Semi-Analytical', linewidth=6) + ax[1].set_xlabel(r'Axial Strain (%)', size=fsize, weight="bold") + ax[1].set_ylabel(r'Volumetric Strain (%)', size=fsize, weight="bold") + #ax[1].legend(loc='lower right', fontsize=fsize) + ax[1].xaxis.set_tick_params(labelsize=fsize) + ax[1].yaxis.set_tick_params(labelsize=fsize) + + # Plot shear stress versus mean stress + ax[2].plot(-p_num*1e-6, + q_num*1e-6, + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[2].plot(-list_p_anal*1e-6, + list_q_anal*1e-6, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + label='Semi-Analytical', linewidth=6) + ax[2].set_xlabel(r'Mean stress (MPa)', size=fsize, weight="bold") + ax[2].set_ylabel(r'Deviatoric Stress (MPa)', size=fsize, weight="bold") + ax[2].legend(loc='lower right', fontsize=fsize) + ax[2].xaxis.set_tick_params(labelsize=fsize) + ax[2].yaxis.set_tick_params(labelsize=fsize) + + plt.subplots_adjust(left=0.2, bottom=0.1, right=0.9, top=0.9, wspace=0.4, hspace=0.4) + plt.show() + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ViscoModifiedCamClay.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ViscoModifiedCamClay.hires.png new file mode 100644 index 00000000000..566aa3df932 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ViscoModifiedCamClay.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ViscoModifiedCamClay.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ViscoModifiedCamClay.pdf new file mode 100644 index 00000000000..4ff3d72a198 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ViscoModifiedCamClay.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ViscoModifiedCamClay.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ViscoModifiedCamClay.png new file mode 100644 index 00000000000..7fb47acfca2 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ViscoModifiedCamClay.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ViscoModifiedCamClay.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ViscoModifiedCamClay.py new file mode 100644 index 00000000000..3b4cc7e8fd8 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/viscoplasticity/ViscoModifiedCamClay/TriaxialDriver_vs_SemiAnalytic_ViscoModifiedCamClay.py @@ -0,0 +1,232 @@ +import os +import sys +import numpy as np +import matplotlib.pyplot as plt +import xml.etree.ElementTree as ElementTree +import os +import argparse + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + # File paths + outputDir = args.outputDir + geosDir = args.geosDir + + path = outputDir + "/ViscoModifiedCamClayResults.txt" + timeFilePath = geosDir + "/inputFiles/triaxialDriver/tables/time.geos" + xmlFilePath = geosDir + "/inputFiles/triaxialDriver/triaxialDriver_base.xml" + xmlFilePath_case = geosDir + "/inputFiles/triaxialDriver/triaxialDriver_ViscoModifiedCamClay.xml" + imposedStrainFilePath = geosDir + "/inputFiles/triaxialDriver/tables/axialStrain.geos" + + # Load GEOSX results + time, ax_strain, ra_strain1, ra_strain2, ax_stress, ra_stress1, ra_stress2, newton_iter, residual_norm = np.loadtxt( + path, skiprows=5, unpack=True) + + # Extract mechanical parameters from XML file + tree = ElementTree.parse(xmlFilePath) + tree_case = ElementTree.parse(xmlFilePath_case) + model = tree_case.find('Tasks/TriaxialDriver') + param = tree.find('Constitutive/ViscoModifiedCamClay') + + refPressure = float(param.get("defaultRefPressure")) + refStrainVol = float(param.get("defaultRefStrainVol")) + shearModulus = float(param.get("defaultShearModulus")) + preConsolidationPressure = float(param.get("defaultPreConsolidationPressure")) + cslSlope = float(param.get("defaultCslSlope")) + virginCompressionIndex = float(param.get("defaultVirginCompressionIndex")) + recompressionIndex = float(param.get("defaultRecompressionIndex")) + relaxationTime = float(param.get("relaxationTime")) + initialStress = float(model.get("initialStress")) + + # Extract loading from input tables + imp_strain = np.loadtxt( + imposedStrainFilePath, skiprows=0, unpack=True) + + list_ax_strain_anal = [] + numStepPerLoadingPeriod = 10001 + + for i in range(0,len(imp_strain)-1): + dStrainPerStep = (imp_strain[i+1]-imp_strain[i])/numStepPerLoadingPeriod + loadingPeriod = np.arange(imp_strain[i],imp_strain[i+1]+dStrainPerStep,dStrainPerStep) + list_ax_strain_anal = np.concatenate((list_ax_strain_anal, loadingPeriod), axis=0) + + # Extract time from input tables + imp_time = np.loadtxt( + timeFilePath, skiprows=0, unpack=True) + + list_time_anal = [] + for i in range(0,len(imp_time)-1): + dTimePerStep = (imp_time[i+1]-imp_time[i])/numStepPerLoadingPeriod + timePeriod = np.arange(imp_time[i],imp_time[i+1]+dTimePerStep,dTimePerStep) + list_time_anal = np.concatenate((list_time_anal, timePeriod), axis=0) + + list_ax_stress_anal = np.zeros(len(list_ax_strain_anal)) + list_ra_stress_anal = np.zeros(len(list_ax_strain_anal)) + list_ra_strain_anal = np.zeros(len(list_ax_strain_anal)) + + p_anal = refPressure + list_ax_strain_anal += refStrainVol # Oedometric compaction: zero lateral strain + list_ax_stress_anal += initialStress # Assuming isotropic initial stress condition + list_ra_stress_anal += initialStress + + for idx in range(1,len(list_ax_strain_anal)): + delta_ax_strain_anal = list_ax_strain_anal[idx]-list_ax_strain_anal[idx-1] + delta_ra_strain_anal = 0 + + # Compute elastic moduli + bulkModulus = - p_anal/recompressionIndex + lameModulus = bulkModulus - 2.0/3.0*shearModulus + + # Elastic trial + delta_ax_stress_anal = (lameModulus+2.0*shearModulus)*delta_ax_strain_anal + 2.0*lameModulus*delta_ra_strain_anal + delta_ra_stress_anal = lameModulus*delta_ax_strain_anal + (2.0*lameModulus+2.0*shearModulus)*delta_ra_strain_anal + + ax_stress_anal = list_ax_stress_anal[idx-1] + delta_ax_stress_anal + ra_stress_anal = list_ra_stress_anal[idx-1] + delta_ra_stress_anal + + p_anal = (ax_stress_anal + 2.0*ra_stress_anal)/3.0 + q_anal = -(ax_stress_anal - ra_stress_anal) + + # Plastic correction + F_anal = q_anal*q_anal/(cslSlope*cslSlope) + p_anal*(p_anal-preConsolidationPressure) + + if(F_anal>=0): + # Derivatives + dF_dp = 2.0*p_anal-preConsolidationPressure + dF_dq = 2.0*q_anal/(cslSlope*cslSlope) + dF_dpc = -p_anal + + dG_dp = dF_dp # associated plastic rule was considered + dG_dq = dF_dq + + dpc_dlambda = -preConsolidationPressure/(virginCompressionIndex-recompressionIndex)*dG_dp + hardeningRate = -dF_dpc*dpc_dlambda + + # See Runesson et al. 1999, see Eq. 29 + parameter_Aep = 3.0*shearModulus*dF_dq*dG_dq + bulkModulus*dF_dp*dG_dp + hardeningRate + + # Compute stress variations + delta_ax_strain_anal = list_ax_strain_anal[idx] - list_ax_strain_anal[idx-1] + delta_time_anal = list_time_anal[idx]-list_time_anal[idx-1] + + delta_strain_vol = delta_ax_strain_anal + delta_strain_shear = -delta_ax_strain_anal #3/2*delta_gamma + + # See Runesson et al. 1999, see Eq. 4, 80, 62, 63 + delta_lambda = delta_time_anal / relaxationTime * (F_anal/parameter_Aep) + delta_p_anal = (delta_strain_vol - delta_lambda*dG_dp)*bulkModulus + delta_q_anal = (delta_strain_shear - 3.0/2.0*delta_lambda*dG_dq)*2.0*shearModulus + + delta_ax_stress_anal = (3.0*delta_p_anal - 2.0*delta_q_anal)/3.0 + delta_ra_stress_anal = delta_ax_stress_anal + delta_q_anal + + # Update stress + ax_stress_anal = list_ax_stress_anal[idx-1] + delta_ax_stress_anal + ra_stress_anal = list_ra_stress_anal[idx-1] + delta_ra_stress_anal + + delta_pc = dpc_dlambda * delta_lambda + preConsolidationPressure += delta_pc + + list_ax_stress_anal[idx] = ax_stress_anal + list_ra_stress_anal[idx] = ra_stress_anal + + list_p_anal = (list_ax_stress_anal + 2.0 * list_ra_stress_anal) / 3.0 + list_q_anal = -(list_ax_stress_anal - list_ra_stress_anal) + + list_strain_vol_anal = list_ax_strain_anal + 2.0 * list_ra_strain_anal + + p_num = (ax_stress + 2.0 * ra_stress1) / 3.0 + q_num = -(ax_stress - ra_stress1) + + #Visualization parameters + fsize = 30 + msize = 12 + lw = 6 + malpha = 0.5 + fig, ax = plt.subplots(1, 3, figsize=(37, 10)) + cmap = plt.get_cmap("tab10") + + ax[0].plot(-ax_strain * 100, #convert to % + -ax_stress*1e-3, #convert to kPa + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[0].plot(-list_ax_strain_anal* 100, + -list_ax_stress_anal*1e-3, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + label='Semi-Analytical', linewidth=6) + + ax[0].set_xlabel(r'Axial Strain (%)', size=fsize, weight="bold") + ax[0].set_ylabel(r'Axial Stress (kPa)', size=fsize, weight="bold") + #ax[0].legend(loc='lower right', fontsize=fsize) + ax[0].xaxis.set_tick_params(labelsize=fsize) + ax[0].yaxis.set_tick_params(labelsize=fsize) + + ax[1].plot(-ax_strain * 100, + -ra_stress1 * 1e-3, + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[1].plot(-list_ax_strain_anal* 100, + -list_ra_stress_anal* 1e-3, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + label='Semi-Analytical', linewidth=6) + ax[1].set_xlabel(r'Axial Strain (%)', size=fsize, weight="bold") + ax[1].set_ylabel(r'Radial stress (kPa)', size=fsize, weight="bold") + #ax[1].legend(loc='lower right', fontsize=fsize) + ax[1].xaxis.set_tick_params(labelsize=fsize) + ax[1].yaxis.set_tick_params(labelsize=fsize) + + # Plan p-q + ax[2].plot(-p_num*1e-3, + q_num*1e-3, + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[2].plot(-list_p_anal*1e-3, + list_q_anal*1e-3, + '-', + color='r', + mec='r', + markersize=msize, + alpha=malpha, + label='Semi-Analytical', linewidth=6) + ax[2].set_xlabel(r'Mean stress (kPa)', size=fsize, weight="bold") + ax[2].set_ylabel(r'Deviatoric Stress (kPa)', size=fsize, weight="bold") + ax[2].legend(loc='lower right', fontsize=fsize) + ax[2].xaxis.set_tick_params(labelsize=fsize) + ax[2].yaxis.set_tick_params(labelsize=fsize) + + plt.subplots_adjust(left=0.2, bottom=0.1, right=0.9, top=0.9, wspace=0.4, hspace=0.4) + + plt.show() + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactElasticWellbore/elastic_casedWellbore_displacementJump.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactElasticWellbore/elastic_casedWellbore_displacementJump.hires.png new file mode 100644 index 00000000000..42d49334631 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactElasticWellbore/elastic_casedWellbore_displacementJump.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactElasticWellbore/elastic_casedWellbore_displacementJump.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactElasticWellbore/elastic_casedWellbore_displacementJump.pdf new file mode 100644 index 00000000000..3f95fdff874 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactElasticWellbore/elastic_casedWellbore_displacementJump.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactElasticWellbore/elastic_casedWellbore_displacementJump.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactElasticWellbore/elastic_casedWellbore_displacementJump.png new file mode 100644 index 00000000000..35262549721 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactElasticWellbore/elastic_casedWellbore_displacementJump.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactElasticWellbore/elastic_casedWellbore_displacementJump.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactElasticWellbore/elastic_casedWellbore_displacementJump.py new file mode 100644 index 00000000000..6f319c97a47 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedContactElasticWellbore/elastic_casedWellbore_displacementJump.py @@ -0,0 +1,58 @@ +import matplotlib +#matplotlib.use('Agg') +import matplotlib.pyplot as plt +#import xml.etree.ElementTree as ElementTree +import numpy as np +import h5py +import analyticalResults + +def main(): + + # File paths + hdf5FilePath = "displacementJumpHistory.hdf5" + + # Plot GEOSX results + hf = h5py.File(hdf5FilePath, 'r') + time = np.asarray( hf.get('displacementJump Time') ) + displacementJump = np.asarray( hf.get('displacementJump') ) + + nTime = time.shape[0] + + displacementJump_normal = displacementJump[0:nTime, 0, 0] + + # Reference results + listTime = np.linspace(0, 0.5, 21, endpoint=False) + listP0 = np.linspace(0, -10e6, 21, endpoint=False) + listTime2 = np.linspace(0.5, 2.0, 21, endpoint=True) + listP02 = np.linspace(-10e6, 10e6, 21, endpoint=True) + for x in listTime2: + listTime = np.append(listTime, x) + for x in listP02: + listP0 = np.append(listP0, x) + + list_displacementJump_anal = [] + for P0 in listP0: + displacementJump_anal = analyticalResults.analyticDisplacementJump(P0) + list_displacementJump_anal.append(displacementJump_anal * 1e6) # converted to um + + # Plot displacement jump versus time + plt.plot( time, + displacementJump_normal * 1e6, # converted to um + 'k+', + label='GEOS') + + plt.plot( listTime, + list_displacementJump_anal, + 'r-', + label='Analytical') + + plt.grid() + plt.ylabel(r'Normal displacement jump [$\mu$m]') + plt.xlabel('Time [s]') + plt.xlim(0, 2) + + plt.legend(loc='upper left') + plt.show() + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedElasticWellbore/casedElasticWellboreFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedElasticWellbore/casedElasticWellboreFigure.hires.png new file mode 100644 index 00000000000..28302bad5f7 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedElasticWellbore/casedElasticWellboreFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedElasticWellbore/casedElasticWellboreFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedElasticWellbore/casedElasticWellboreFigure.pdf new file mode 100644 index 00000000000..dbcc88567a0 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedElasticWellbore/casedElasticWellboreFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedElasticWellbore/casedElasticWellboreFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedElasticWellbore/casedElasticWellboreFigure.png new file mode 100644 index 00000000000..ddd0183ef7f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedElasticWellbore/casedElasticWellboreFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedElasticWellbore/casedElasticWellboreFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedElasticWellbore/casedElasticWellboreFigure.py new file mode 100644 index 00000000000..0eca808f0ac --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/casedElasticWellbore/casedElasticWellboreFigure.py @@ -0,0 +1,105 @@ +import numpy as np +import matplotlib.pyplot as plt + + +def main(): + # Input geometric parameters + r_casing_in = 0.1 # meter + r_casing_out = 0.106 + r_hole = 0.133 + + # Material properties + G_casing = 80.8e9 # Pa + K_casing = 175e9 + lambda_casing = K_casing - 2.0 / 3.0 * G_casing + + G_cement = 6.45e9 + K_cement = 10.3e9 + lambda_cement = K_cement - 2.0 / 3.0 * G_cement + + G_rock = 4.16667e9 + K_rock = 5.5556e9 + + # Loading + # Pressure applied on the inner face of the casing + P0 = -10.0 # MPa + + # Analytical results + # Rigidity of the casing-cement-rock system + rigidity = np.array([ + [r_casing_out, 1.0 / r_casing_out, -r_casing_out, -1.0 / r_casing_out, 0.0], + [ + 2.0 * (lambda_casing + G_casing), -2.0 * G_casing / r_casing_out / r_casing_out, + -2.0 * (lambda_cement + G_cement), 2.0 * G_cement / r_casing_out / r_casing_out, 0.0 + ], [0.0, 0.0, r_hole, 1.0 / r_hole, -1.0 / r_hole], + [0.0, 0.0, 2.0 * (lambda_cement + G_cement), -2.0 * G_cement / r_hole / r_hole, 2.0 * G_rock / r_hole / r_hole], + [2.0 * (lambda_casing + G_casing), -2.0 * G_casing / r_casing_in / r_casing_in, 0.0, 0.0, 0.0] + ]) + + # Vector of force + force = np.array([0.0, 0.0, 0.0, 0.0, P0]) + + # Compute the coefficients describing the closed-form solutions of stress/strain + vectorCoefficientAB = np.dot(np.linalg.inv(rigidity), force) + coeffA_cement = vectorCoefficientAB[2] + coeffB_cement = vectorCoefficientAB[3] + + # Radial coordinate + r_anal = np.arange(r_casing_out, r_hole, 0.01 * (r_hole - r_casing_out)) + + # Radial and hoop (tangent) stresses + tmpVal1 = (2.0 * lambda_cement + 2.0 * G_cement) * coeffA_cement + tmpVal2 = 2.0 * G_cement * coeffB_cement / r_anal / r_anal + + sig_rr_anal = tmpVal1 - tmpVal2 + sig_tt_anal = tmpVal1 + tmpVal2 + + # GEOSX results + # Stresses are extracted along x-axis + # where radial stress coincides with stress_11 + # and hoop stress coincides with stress_22 + + # Radial stress, coordinates + r_geosx, sig_rr_geosx = [], [] + + for line in open('stress_11.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + rVal = values[0] + sigVal = values[1] * 1e-6 # convert to MPa + + r_geosx.append(rVal) + sig_rr_geosx.append(sigVal) + + # Tangent stress + sig_tt_geosx = [] + for line in open('stress_22.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + sigVal = values[1] * 1e-6 # convert to MPa + + sig_tt_geosx.append(sigVal) + + # Plots + fig = plt.figure(figsize=[13, 5]) + + plt.subplot(121) + plt.plot(r_geosx, sig_rr_geosx, 'ko', label='GEOSX result') + plt.plot(r_anal, sig_rr_anal, 'k', linewidth=2, label='Analytic') + plt.xlim(r_casing_out, r_hole) + plt.xlabel("r (m)") + plt.ylabel("Radial stress (MPa)") + + plt.subplot(122) + plt.plot(r_geosx, sig_tt_geosx, 'ko', label='GEOSX result') + plt.plot(r_anal, sig_tt_anal, 'k', linewidth=2, label='Analytic') + plt.xlim(r_casing_out, r_hole) + plt.xlabel("r (m)") + plt.ylabel("Hoop stress (MPa)") + + plt.legend() + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedElasticWellbore/deviatedElasticWellboreFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedElasticWellbore/deviatedElasticWellboreFigure.hires.png new file mode 100644 index 00000000000..965e4dd7502 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedElasticWellbore/deviatedElasticWellboreFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedElasticWellbore/deviatedElasticWellboreFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedElasticWellbore/deviatedElasticWellboreFigure.pdf new file mode 100644 index 00000000000..f30fe98a63f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedElasticWellbore/deviatedElasticWellboreFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedElasticWellbore/deviatedElasticWellboreFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedElasticWellbore/deviatedElasticWellboreFigure.png new file mode 100644 index 00000000000..fb86519f2eb Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedElasticWellbore/deviatedElasticWellboreFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedElasticWellbore/deviatedElasticWellboreFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedElasticWellbore/deviatedElasticWellboreFigure.py new file mode 100644 index 00000000000..0347fc8f6bd --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedElasticWellbore/deviatedElasticWellboreFigure.py @@ -0,0 +1,117 @@ +import numpy as np +import matplotlib.pyplot as plt + + +# Rotate a vector in local coodinate of an inclined borehole to the global coordinate +# This function is useful for extracting field around an inclined wellbore in the radial direction +def vectorRotation(x, y, z, phi_x, phi_z): + rotx = np.array([[np.cos(phi_x), np.sin(phi_x), 0.], [-np.sin(phi_x), np.cos(phi_x), 0.], [0., 0., 1.]]) + rotz = np.array([[np.cos(phi_z), 0., np.sin(phi_z)], [0., 1., 0.], [-np.sin(phi_z), 0., np.cos(phi_z)]]) + + localCoord = np.array([x, y, z]) + return np.dot(rotz, np.dot(rotx, localCoord)) + + +# Rotate stress from global coordinates system to the local coordinates of an inclined borehole +# See the description in fig.1 in Abousleiman and Cui 1998 +def stressRotation(stress, phi_x, phi_z): + rotx = np.array([[np.cos(phi_x), np.sin(phi_x), 0.], [-np.sin(phi_x), np.cos(phi_x), 0.], [0., 0., 1.]]) + rotz = np.array([[np.cos(phi_z), 0., np.sin(phi_z)], [0., 1., 0.], [-np.sin(phi_z), 0., np.cos(phi_z)]]) + + return np.dot(np.dot(np.transpose(rotz), np.dot(np.dot(np.transpose(rotx), stress), rotx)), rotz) + + +def analytic(a, p0): + r_anal = np.arange(a, 10 * a, 0.1 * a) + sig_rr_anal = p0 * a * a / r_anal / r_anal + sig_tt_anal = -p0 * a * a / r_anal / r_anal + return [r_anal, sig_rr_anal, sig_tt_anal] + + +def main(): + a = 0.1 + p0 = -10.0 + + K = 5.5556e9 + G = 4.16667e9 + + #Deviation angles + phi_x = 0. + phi_z = 45. / 180. * 3.1416 + + fig = plt.figure(figsize=[13, 10]) + + # Compute analytical results + r_anal, sig_rr_anal, sig_tt_anal = analytic(a, p0) + + # Get stress_ij + r, stress_11, stress_12, stress_13, stress_22, stress_23, stress_33 = [], [], [], [], [], [], [] + + for line in open('stress_11.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + rval = values[0] + sigVal = values[1] * 1e-6 # convert to MPa + r.append(rval) + stress_11.append(sigVal) + + for line in open('stress_12.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + sigVal = values[1] * 1e-6 # convert to MPa + stress_12.append(sigVal) + + for line in open('stress_13.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + sigVal = values[1] * 1e-6 # convert to MPa + stress_13.append(sigVal) + + for line in open('stress_22.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + sigVal = values[1] * 1e-6 # convert to MPa + stress_22.append(sigVal) + + for line in open('stress_23.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + sigVal = values[1] * 1e-6 # convert to MPa + stress_23.append(sigVal) + + for line in open('stress_33.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + sigVal = values[1] * 1e-6 # convert to MPa + stress_33.append(sigVal) + + #Compute sig_rr, sig_tt + sig_rr, sig_tt = [], [] + for i in range(len(stress_11)): + stress = np.array([[stress_11[i],stress_12[i],stress_13[i]],\ + [stress_12[i],stress_22[i],stress_23[i]],\ + [stress_13[i],stress_23[i],stress_33[i]]]) + + stressLocal = stressRotation(stress, phi_x, phi_z) + sig_rr.append(stressLocal[0][0]) + sig_tt.append(stressLocal[1][1]) + + plt.subplot(121) + plt.plot(r, sig_rr, 'ko', label='GEOSX result') + plt.plot(r_anal, sig_rr_anal, 'k', linewidth=2, label='Analytic') + plt.ylabel('Radial stress (MPa)') + plt.xlabel('r (m)') + plt.xlim(a, 3 * a) + + plt.subplot(122) + plt.plot(r, sig_tt, 'ko', label='GEOSX result') + plt.plot(r_anal, sig_tt_anal, 'k', linewidth=2, label='Analytic') + plt.ylabel('Hoop stress (MPa)') + plt.xlabel('r (m)') + plt.xlim(a, 3 * a) + plt.legend() + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample1Figure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample1Figure.hires.png new file mode 100644 index 00000000000..f596124d38a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample1Figure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample1Figure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample1Figure.pdf new file mode 100644 index 00000000000..f9da45c2a90 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample1Figure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample1Figure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample1Figure.png new file mode 100644 index 00000000000..4781f4705ad Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample1Figure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample1Figure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample1Figure.py new file mode 100644 index 00000000000..51ba65feb99 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample1Figure.py @@ -0,0 +1,287 @@ +from scipy.special import kn +from math import factorial, floor +import numpy as np +import matplotlib.pyplot as plt +import xml.etree.ElementTree as ElementTree +import os +import argparse + + +def FFunction(s, R): + P = kn(0, R * (s**0.5)) / (s * kn(0, s**0.5)) + U = -(R * kn(1, R * (s**0.5)) - kn(1, s**0.5)) / (s * R * (s**0.5) * kn(0, s**0.5)) + Srr = -(-R * kn(1, R * (s**0.5)) + kn(1, s**0.5)) / (R**2. * (s**1.5) * kn(0, s**0.5)) + Stt = -P - Srr + + return [P, U, Srr, Stt] + + +def Vfunction(i, N): + + sum1 = 0. + kmin = int(floor((i + 1.) / 2.)) + + kmax = min(i, N) + + for k in range(kmin, kmax + 1): + sum1 = sum1 + (1. * (k**N) * factorial(2 * k) / + (factorial(N - k) * factorial(k) * factorial(k - 1) * factorial(i - k) * factorial(2 * k - i))) + + return ((-1.)**(N + i)) * sum1 + + +def StehfestTransform(t, R): + N = 5 + sum1 = 0. + sum2 = 0. + sum3 = 0. + sum4 = 0. + for j in range(1, 2 * N + 1): + Lresult = FFunction(j * np.log(2.) / t, R) + sum1 = sum1 + Vfunction(j, N) * Lresult[0] + sum2 = sum2 + Vfunction(j, N) * Lresult[1] + sum3 = sum3 + Vfunction(j, N) * Lresult[2] + sum4 = sum4 + Vfunction(j, N) * Lresult[3] + + return [sum1 * np.log(2.) / t, sum2 * np.log(2.) / t, sum3 * np.log(2.) / t, sum4 * np.log(2.) / t] + + +def dimensionlessTime(t, MBiot, bBiot, nu, K, G, a, permeability, fluidViscosity): + eta = bBiot * (1. - 2. * nu) / 2. / (1. - nu) + kappa = permeability / fluidViscosity + + Ku = K + MBiot * (bBiot**2.) + nuu = (3. * Ku - 2. * G) / (6. * Ku + 2. * G) + + BSkempton = 3. * (nuu - nu) / (bBiot * (1. - 2. * nu) * (1. + nuu)) + coefc = 2. * kappa * (BSkempton**2.) * G * (1. - nu) * ((1. + nuu)**2.) / 9. / (1. - nuu) / (nuu - nu) + + tstar = t * coefc / (a**2.) + return tstar + + +# Rotate a vector in local coodinate of an inclined borehole to the global coordinate +def vectorRotation(x, y, z, phi_x, phi_z): + rotx = np.array([[np.cos(phi_x), np.sin(phi_x), 0.], [-np.sin(phi_x), np.cos(phi_x), 0.], [0., 0., 1.]]) + rotz = np.array([[np.cos(phi_z), 0., np.sin(phi_z)], [0., 1., 0.], [-np.sin(phi_z), 0., np.cos(phi_z)]]) + + localCoord = np.array([x, y, z]) + return np.dot(rotz, np.dot(rotx, localCoord)) + + +# Rotate stress from global coordinates system to the local coordinates of an inclined borehole +# See the description in fig.1 in Abousleiman and Cui 1998 +def stressRotation(stress, phi_x, phi_z): + rotx = np.array([[np.cos(phi_x), np.sin(phi_x), 0.], [-np.sin(phi_x), np.cos(phi_x), 0.], [0., 0., 1.]]) + rotz = np.array([[np.cos(phi_z), 0., np.sin(phi_z)], [0., 1., 0.], [-np.sin(phi_z), 0., np.cos(phi_z)]]) + + return np.dot(np.dot(np.transpose(rotz), np.dot(np.dot(np.transpose(rotx), stress), rotx)), rotz) + + +def getParametersFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + elasticParam = tree.find('Constitutive/ElasticIsotropic') + + bulkModulus = float(elasticParam.get('defaultBulkModulus')) + shearModulus = float(elasticParam.get('defaultShearModulus')) + + maxTime = float(tree.find('Events').get('maxTime')) + + fsParams = tree.findall('FieldSpecifications/FieldSpecification') + for fsParam in fsParams: + if ((fsParam.get('fieldName') == "pressure") & (fsParam.get('initialCondition') != "1")): + pressure = float(fsParam.get('scale')) + break + + porosity = float(tree.find('Constitutive/BiotPorosity').get('defaultReferencePorosity')) + + skeletonBulkModulus = float(tree.find('Constitutive/BiotPorosity').get('defaultGrainBulkModulus')) + fluidCompressibility = float(tree.find('Constitutive/CompressibleSinglePhaseFluid').get('compressibility')) + + bBiot = 1.0 - bulkModulus / skeletonBulkModulus + MBiot = 1.0 / (porosity * fluidCompressibility + (bBiot - porosity) / skeletonBulkModulus) + + permParam = tree.find('Constitutive/ConstantPermeability').get('permeabilityComponents') + permeability = float(permParam.replace('{', '').replace('}', '').strip().split(',')[0]) + + viscosity = float(tree.find('Constitutive/CompressibleSinglePhaseFluid').get('defaultViscosity')) + + return [maxTime, pressure, porosity, MBiot, bBiot, bulkModulus, shearModulus, permeability, viscosity] + + +def getWellboreGeometryFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + meshParam = tree.find('Mesh/InternalWellbore') + radius = float(meshParam.get("radius").replace('{', '').replace('}', '').strip().split(',')[0]) + + # Wellbore deviation + trajectoryParam = tree.find('Mesh/InternalWellbore').get('trajectory').replace(' ', '').split('},') + top = trajectoryParam[0].replace('{', '').replace('}', '').strip().split(',') + bottom = trajectoryParam[1].replace('{', '').replace('}', '').strip().split(',') + + dx = float(top[0]) - float(bottom[0]) + dy = float(top[1]) - float(bottom[1]) + dz = float(top[2]) - float(bottom[2]) + dl = np.sqrt(dx * dx + dy * dy) + + phi_x = np.arctan(dy / dx) + phi_z = np.arctan(-dl / dz) + + return [radius, phi_x, phi_z] + + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + outputDir = args.outputDir + geosDir = args.geosDir + + xmlFilePathPrefix = geosDir + "/inputFiles/wellbore/DeviatedPoroElasticWellbore_Injection" + + geometry = getWellboreGeometryFromXML(xmlFilePathPrefix + "_benchmark.xml") + parameters = getParametersFromXML(xmlFilePathPrefix + "_base.xml") + + # Wellbore radius + a = geometry[0] + + # Wellbore Deviation angles + phi_x = geometry[1] + phi_z = geometry[2] + + # Injection time + t = parameters[0] + + # Injection pressure + p0 = parameters[1] + + # Poroelastic properties + phi = parameters[2] + MBiot = parameters[3] + bBiot = parameters[4] + + K = parameters[5] + G = parameters[6] + nu = (3.0 * K - 2.0 * G) / (6.0 * K + 2.0 * G) + + permeability = parameters[7] + fluidViscosity = parameters[8] + + T = dimensionlessTime(t, MBiot, bBiot, nu, K, G, a, permeability, fluidViscosity) + + listR = np.arange(1., 10., 0.01) + listP = [] + listU = [] + listSrr = [] + listStt = [] + for R in listR: + + result = StehfestTransform(T, R) + listP.append(result[0]) + listU.append(result[1]) + listSrr.append(result[2]) + listStt.append(result[3]) + + listr = [R * a for R in listR] + listp = [1e-6 * P * p0 for P in listP] + listUr = [1e6 * U * a * p0 * bBiot * (1. - 2. * nu) / (2. * G * (1. - nu)) for U in listU] + listSigrrTot = [1e-6 * Srr * bBiot * (1. - 2. * nu) / (1. - nu) * p0 for Srr in listSrr] + listSigttTot = [1e-6 * Stt * bBiot * (1. - 2. * nu) / (1. - nu) * p0 for Stt in listStt] + listSigrr = [bBiot * val1 + val2 for val1, val2 in zip(listp, listSigrrTot)] + listSigtt = [bBiot * val1 + val2 for val1, val2 in zip(listp, listSigttTot)] + + # Get stress_ij and pore pressure + # Data are extracted along the y-axis from the wellbore center + r, pPore, stress_11, stress_12, stress_13, stress_22, stress_23, stress_33 = [], [], [], [], [], [], [], [] + for line in open( outputDir + '/stress_11.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + rval = values[0] + sigVal = values[1] * 1e-6 # convert to MPa + r.append(rval) + stress_11.append(sigVal) + + for line in open( outputDir + '/stress_12.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + sigVal = values[1] * 1e-6 # convert to MPa + stress_12.append(sigVal) + + for line in open( outputDir + '/stress_13.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + sigVal = values[1] * 1e-6 # convert to MPa + stress_13.append(sigVal) + + for line in open( outputDir + '/stress_22.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + sigVal = values[1] * 1e-6 # convert to MPa + stress_22.append(sigVal) + + for line in open( outputDir + '/stress_23.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + sigVal = values[1] * 1e-6 # convert to MPa + stress_23.append(sigVal) + + for line in open( outputDir + '/stress_33.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + sigVal = values[1] * 1e-6 # convert to MPa + stress_33.append(sigVal) + + for line in open( outputDir + '/pressure.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + pPore.append(values[1] * 1e-6) + + #Compute sig_rr, sig_tt + sig_rr, sig_tt = [], [] + for i in range(len(stress_11)): + stress = np.array([[stress_11[i],stress_12[i],stress_13[i]],\ + [stress_12[i],stress_22[i],stress_23[i]],\ + [stress_13[i],stress_23[i],stress_33[i]]]) + + stressLocal = stressRotation(stress, phi_x, phi_z) + sig_rr.append(stressLocal[1][1]) + sig_tt.append(stressLocal[0][0]) + + fig = plt.figure(figsize=[13, 10]) + + plt.subplot(221) + plt.plot(r, sig_rr, 'ko', label='GEOSX result') + plt.plot(listr, listSigrr, 'k', linewidth=2, label='Analytic') + plt.ylabel('Effectve radial stress (MPa)') + plt.xlabel('r (m)') + plt.xlim(a, 10 * a) + + plt.subplot(222) + plt.plot(r, sig_tt, 'ko', label='GEOSX result') + plt.plot(listr, listSigtt, 'k', linewidth=2, label='Analytic') + plt.ylabel('Effectve tangent stress (MPa)') + plt.xlabel('r (m)') + plt.xlim(a, 10 * a) + + plt.subplot(223) + plt.plot(r, pPore, 'ko', label='GEOSX result') + plt.plot(listr, listp, 'k', linewidth=2, label='Analytic') + plt.ylabel('Pore pressure (MPa)') + plt.xlim(a, 10 * a) + plt.legend() + + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample2Figure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample2Figure.hires.png new file mode 100644 index 00000000000..cd60662e640 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample2Figure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample2Figure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample2Figure.pdf new file mode 100644 index 00000000000..17d7f531d06 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample2Figure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample2Figure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample2Figure.png new file mode 100644 index 00000000000..acf246b8d9c Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample2Figure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample2Figure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample2Figure.py new file mode 100644 index 00000000000..4bf3b74370f --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/deviatedPoroElasticWellbore/deviatedPoroElasticWellboreExample2Figure.py @@ -0,0 +1,300 @@ +import sys +sys.path.append('../') +import numpy as np +import matplotlib.pyplot as plt +import wellboreAnalyticalSolutions as analytic +import xml.etree.ElementTree as ElementTree +import os +import argparse + + +# Rotate stress from local coordinates of an inclined borehole to the global coordinates system +# See the description in fig.1 in Abousleiman and Cui 1998 +def stressRotation(stress, phi_x, phi_z): + rotx = np.array([[np.cos(phi_x), np.sin(phi_x), 0.], [-np.sin(phi_x), np.cos(phi_x), 0.], [0., 0., 1.]]) + rotz = np.array([[np.cos(phi_z), 0., np.sin(phi_z)], [0., 1., 0.], [-np.sin(phi_z), 0., np.cos(phi_z)]]) + + return np.dot(np.dot(np.transpose(rotz), np.dot(np.dot(np.transpose(rotx), stress), rotx)), rotz) + + +# Rotate stress from global coordinates system to the local coordinates of an inclined borehole +# See the description in fig.1 in Abousleiman and Cui 1998 +def stressRotationInv(stress, phi_x, phi_z): + rotx = np.array([[np.cos(phi_x), np.sin(phi_x), 0.], [-np.sin(phi_x), np.cos(phi_x), 0.], [0., 0., 1.]]) + rotz = np.array([[np.cos(phi_z), 0., np.sin(phi_z)], [0., 1., 0.], [-np.sin(phi_z), 0., np.cos(phi_z)]]) + + return np.dot(np.dot(np.transpose(rotx), np.dot(np.dot(np.transpose(rotz), stress), rotz)), rotx) + + +def analyticalResults(t, ri, theta, phi_x, phi_z, E, nu, M, Ks, kappa, bBiot, nE, nnu, nkappa, pi, pw, p0, Shmax, Shmin, + Sv): + + # For inclined borehole, the in-situ stress must be rotated to the local coordinates of the borehole + # The solutions of Abousleiman and Cui 1998 are restricted to the case where the borehole is oriented in the direction of the material anisotropy + S = analytic.stressRotation(Shmax, Shmin, Sv, phi_x, phi_z) + Sx = S[0][0] + Sxy = S[0][1] + Sxz = S[0][2] + Sy = S[1][1] + Syz = S[1][2] + Sz = S[2][2] + + if (Sx != Sy): + theta_r = 0.5 * np.arctan(2. * Sxy / (Sx - Sy)) + else: + theta_r = 0. + + PP0 = (Sx + Sy) / 2. + S0 = -(((Sx - Sy) / 2.)**2. + Sxy**2.)**0.5 + + r = np.arange(ri, 10. * ri, 0.005 * ri) + + # Elastic stiffnesses: see Eq.2 in Abousleiman and Cui 1998 + E_p = E / nE + nu_p = nu / nnu + kappa_p = kappa / nkappa + + M11 = E * (E_p - E * nu_p**2.) / (1. + nu) / (E_p - E_p * nu - 2. * E * nu_p**2.) + M12 = E * (E_p * nu + E * nu_p**2.) / (1. + nu) / (E_p - E_p * nu - 2. * E * nu_p**2.) + M13 = E * E_p * nu_p / (E_p - E_p * nu - 2. * E * nu_p**2.) + M33 = E_p**2. * (1. - nu) / (E_p - E_p * nu - 2. * E * nu_p**2.) + M44 = E / 2. / (1. + nu) + #M55 = G_p + G = M44 + + # Anisotropic Biot's coefficients + alpha = 1. - (M11 + M12 + M13) / (3. * Ks) + alpha_p = 1. - (2. * M13 + M33) / (3. * Ks) + + # Fluid diffusion coefficient + c = kappa * M * M11 / (M11 + alpha**2. * M) + + p, sig_rr, sig_tt, sig_rt = analytic.inTime_mode123(t, r, ri, PP0, pw, p0, pi, S0, theta, theta_r, c, alpha, M, G, + M11, M12, kappa) + #sig_zz,tau_rz,tau_tz = analytic.inTime_outPlane(r, ri,theta,p0,Sx,Sy,Sz,Sxz,Syz,sig_rr,sig_tt,p,nu_p,alpha,alpha_p) + return [r, sig_rr / 1e6, sig_tt / 1e6, p / 1e6] + + +def getParametersFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + elasticParam = tree.find('Constitutive/ElasticIsotropic') + + bulkModulus = float(elasticParam.get('defaultBulkModulus')) + shearModulus = float(elasticParam.get('defaultShearModulus')) + + maxTime = float(tree.find('Events').get('maxTime')) + + fsParams = tree.findall('FieldSpecifications/FieldSpecification') + for fsParam in fsParams: + if ((fsParam.get('fieldName') == "pressure") & (fsParam.get('initialCondition') == "1")): + p0 = float(fsParam.get('scale')) + if ((fsParam.get('fieldName') == "rock_stress") & (fsParam.get('initialCondition') == "1") & + (fsParam.get('component') == "0")): + ShmaxEffective = float(fsParam.get('scale')) + if ((fsParam.get('fieldName') == "rock_stress") & (fsParam.get('initialCondition') == "1") & + (fsParam.get('component') == "1")): + ShminEffective = float(fsParam.get('scale')) + if ((fsParam.get('fieldName') == "rock_stress") & (fsParam.get('initialCondition') == "1") & + (fsParam.get('component') == "2")): + SvEffective = float(fsParam.get('scale')) + if ((fsParam.get('fieldName') == "pressure") & (fsParam.get('initialCondition') != "1")): + pi = float(fsParam.get('scale')) + + porosity = float(tree.find('Constitutive/BiotPorosity').get('defaultReferencePorosity')) + + skeletonBulkModulus = float(tree.find('Constitutive/BiotPorosity').get('defaultGrainBulkModulus')) + fluidCompressibility = float(tree.find('Constitutive/CompressibleSinglePhaseFluid').get('compressibility')) + + bBiot = 1.0 - bulkModulus / skeletonBulkModulus + MBiot = 1.0 / (porosity * fluidCompressibility + (bBiot - porosity) / skeletonBulkModulus) + + permParam = tree.find('Constitutive/ConstantPermeability').get('permeabilityComponents') + permeability = float(permParam.replace('{', '').replace('}', '').strip().split(',')[0]) + + viscosity = float(tree.find('Constitutive/CompressibleSinglePhaseFluid').get('defaultViscosity')) + + return [ + maxTime, MBiot, bBiot, bulkModulus, shearModulus, permeability, viscosity, pi, p0, bBiot * p0 - ShmaxEffective, + bBiot * p0 - ShminEffective, bBiot * p0 - SvEffective + ] + + +def getWellboreGeometryFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + meshParam = tree.find('Mesh/InternalWellbore') + radius = float(meshParam.get("radius").replace('{', '').replace('}', '').strip().split(',')[0]) + + # Wellbore deviation + trajectoryParam = tree.find('Mesh/InternalWellbore').get('trajectory').replace(' ', '').split('},') + top = trajectoryParam[0].replace('{', '').replace('}', '').strip().split(',') + bottom = trajectoryParam[1].replace('{', '').replace('}', '').strip().split(',') + + dx = float(top[0]) - float(bottom[0]) + dy = float(top[1]) - float(bottom[1]) + dz = float(top[2]) - float(bottom[2]) + dl = np.sqrt(dx * dx + dy * dy) + + phi_x = np.arctan(dy / dx) + phi_z = np.arctan(-dl / dz) + + return [radius, phi_x, phi_z] + + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + outputDir = args.outputDir + geosDir = args.geosDir + + xmlFilePathPrefix = geosDir + "/inputFiles/wellbore/DeviatedPoroElasticWellbore_Drilling" + + geometry = getWellboreGeometryFromXML(xmlFilePathPrefix + "_benchmark.xml") + parameters = getParametersFromXML(xmlFilePathPrefix + "_base.xml") + + # Time + t = parameters[0] + + # Geometry + ri = geometry[0] #borehole radius + phi_x = geometry[1] #Azimuth angle + phi_z = geometry[2] #Inclination angle + + # Tangent angle to x-axis where data are extracted, converted degree to radial + theta = 90. * np.pi / 180. + + # Poroelastic properties + M = parameters[1] # Biot's modulus + bBiot = parameters[2] # Biot's coefficient + K = parameters[3] + G = parameters[4] + permeability = parameters[5] + fluidViscosity = parameters[6] + + E = 1.0 / (1.0 / 9.0 / K + 1.0 / 3.0 / G) # in-plane Young's modulus + nu = (3.0 * K - 2.0 * G) / (6.0 * K + 2.0 * G) # in-plane Poisson's ratio + Ks = K / (1.0 - bBiot) # Bulk modulus of the solid phase + kappa = permeability / fluidViscosity # (m2/Pa/s) ratio between the intrinsic permeability and the dynamic viscosity of fluid + + # Anisotropy: three additional parameters are needed for a transversly isotropic problem + # Out-plane shear modulus is not required because only stresses are calculated + nE = 1.0 # =1 for the isotropic case + nnu = 1.0 # =1 for the isotropic case + nkappa = 1.0 # ratio between the in-plane and out-plane permeability, =1 for the isotropic case + + # Loading: in-situ stress, in-situ pore pressure, borehole pore pressure and mud pressure + pi = parameters[7] # borehole pore pressure + pw = pi # cake effect is ignored + p0 = parameters[8] # in-situ pore pressure + + Shmax = parameters[9] + Shmin = parameters[10] + Sv = parameters[11] + + r_anal, sig_rr_anal, sig_tt_anal, pPore_anal = analyticalResults(t, ri, -theta, phi_x, phi_z, E, nu, M, Ks, kappa, + bBiot, nE, nnu, nkappa, pi, pw, p0, Shmax, Shmin, + Sv) + + fig = plt.figure(figsize=[13, 10]) + + # Get radial coordinate and compute analytical results + r = [] + for line in open( outputDir + '/stress_11_drilling.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + rval = values[0] + r.append(rval) + + # Get stress_ij and pore pressure + # These data are extracted along the y-axis from the well center (theta angle = 90°) + stress_11, stress_12, stress_13, stress_22, stress_23, stress_33, pPore = [], [], [], [], [], [], [] + for line in open( outputDir + '/stress_11_drilling.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + sigVal = values[1] * 1e-6 # convert to MPa + stress_11.append(sigVal) + + for line in open( outputDir + '/stress_12_drilling.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + sigVal = values[1] * 1e-6 # convert to MPa + stress_12.append(sigVal) + + for line in open( outputDir + '/stress_13_drilling.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + sigVal = values[1] * 1e-6 # convert to MPa + stress_13.append(sigVal) + + for line in open( outputDir + '/stress_22_drilling.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + sigVal = values[1] * 1e-6 # convert to MPa + stress_22.append(sigVal) + + for line in open( outputDir + '/stress_23_drilling.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + sigVal = values[1] * 1e-6 # convert to MPa + stress_23.append(sigVal) + + for line in open( outputDir + '/stress_33_drilling.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + sigVal = values[1] * 1e-6 # convert to MPa + stress_33.append(sigVal) + + for line in open( outputDir + '/pressure_drilling.curve', 'r'): + if not (line.strip().startswith("#") or line.strip() == ''): + values = [float(s) for s in line.split()] + pPoreVal = values[1] * 1e-6 # convert to MPa + pPore.append(pPoreVal) + + #Compute sig_rr, sig_tt + sig_rr, sig_tt = [], [] + for i in range(len(stress_11)): + stress = np.array([[stress_11[i],stress_12[i],stress_13[i]],\ + [stress_12[i],stress_22[i],stress_23[i]],\ + [stress_13[i],stress_23[i],stress_33[i]]]) + + stressLocal = stressRotationInv(stress, theta + phi_x, phi_z) + sig_rr.append(stressLocal[0][0]) + sig_tt.append(stressLocal[1][1]) + + plt.subplot(221) + plt.plot(r, sig_rr, 'ko', label='GEOSX result') + plt.plot(r_anal, sig_rr_anal + bBiot * pPore_anal, 'k', linewidth=2, label='Analytic') + plt.ylabel('Effective radial stress (MPa)') + plt.xlabel('r (m)') + plt.xlim(ri, 10 * ri) + plt.legend() + + plt.subplot(222) + plt.plot(r, sig_tt, 'ko', label='GEOSX result') + plt.plot(r_anal, sig_tt_anal + bBiot * pPore_anal, 'k', linewidth=2, label='Analytic') + plt.ylabel('Effective tangent stress (MPa)') + plt.xlabel('r (m)') + plt.xlim(ri, 10 * ri) + + plt.subplot(223) + plt.plot(r, pPore, 'ko', label='GEOSX result') + plt.plot(r_anal, pPore_anal, 'k', linewidth=2, label='Analytic') + plt.ylabel('Pore pressure (MPa)') + plt.xlabel('r (m)') + plt.xlim(ri, 10 * ri) + + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/kirschWellbore/kirschWellboreFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/kirschWellbore/kirschWellboreFigure.hires.png new file mode 100644 index 00000000000..d60c67c9902 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/kirschWellbore/kirschWellboreFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/kirschWellbore/kirschWellboreFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/kirschWellbore/kirschWellboreFigure.pdf new file mode 100644 index 00000000000..4813c2a57ca Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/kirschWellbore/kirschWellboreFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/kirschWellbore/kirschWellboreFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/kirschWellbore/kirschWellboreFigure.png new file mode 100644 index 00000000000..add2864d6c8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/kirschWellbore/kirschWellboreFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/kirschWellbore/kirschWellboreFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/kirschWellbore/kirschWellboreFigure.py new file mode 100644 index 00000000000..e99152255d5 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/kirschWellbore/kirschWellboreFigure.py @@ -0,0 +1,307 @@ +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import h5py +import xml.etree.ElementTree as ElementTree +import math +from math import sin, cos, tan, exp, atan, asin +import os +import argparse + + +class Analytical: + + def __init__(self, mechanicalParameters, rw, Stress, Pw, theta): + K = mechanicalParameters["bulkModulus"] + G = mechanicalParameters["shearModulus"] + E = (9 * K * G) / (3 * K + G) + nu = E / (2 * G) - 1 + + self.rw = rw + self.Stress = Stress + self.Pw = Pw + self.theta = theta + self.G = G + self.nu = nu + + def computeRadialStress(self, x): + return (self.Stress[0] + self.Stress[1]) / 2. * (1. - (self.rw / x)**2) + ( + self.Stress[0] - self.Stress[1]) / 2. * (1. - 4. * (self.rw / x)**2 + 3. * (self.rw / x)**4) * cos( + 2. * self.theta) + self.Pw * (self.rw / x)**2 + + def computeHoopStress(self, x): + return (self.Stress[0] + self.Stress[1]) / 2. * (1. + (self.rw / x)**2) - ( + self.Stress[0] - self.Stress[1]) / 2. * (1. + 3. * (self.rw / x)**4) * cos( + 2. * self.theta) - self.Pw * (self.rw / x)**2 + + def computeShearStress(self, x): + return -(self.Stress[0] - self.Stress[1]) / 2. * (1. + 2. * (self.rw / x)**2 - 3. * + (self.rw / x)**4) * sin(2. * self.theta) + + def computeRadialDisp(self, x): + return -(self.rw)**2 / x / 2. / self.G * ((self.Stress[0] + self.Stress[1]) / 2. + + (self.Stress[0] - self.Stress[1]) / 2. * + (4. * (1. - self.nu) - + (self.rw / x)**2) * cos(2. * self.theta) - self.Pw) + + def computeShearDisp(self, x): + return (self.rw)**2 / x / 2. / self.G * (self.Stress[0] - self.Stress[1]) / 2. * (2. * (1. - 2. * self.nu) + + (self.rw / x)**2) * sin( + 2. * self.theta) + + +def getMechanicalParametersFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + param = tree.find('Constitutive/ElasticIsotropic') + mechanicalParameters = dict.fromkeys(["bulkModulus", "shearModulus"]) + mechanicalParameters["bulkModulus"] = float(param.get("defaultBulkModulus")) + mechanicalParameters["shearModulus"] = float(param.get("defaultShearModulus")) + return mechanicalParameters + + +def getCompressiveStressFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + param = tree.findall('FieldSpecifications/FieldSpecification') + Stress = np.empty(3) + for elem in param: + if elem.get("name") == "Sxx" and elem.get("component") == "0": + Stress[0] = float(elem.get("scale")) * (-1) + elif elem.get("name") == "Syy" and elem.get("component") == "1": + Stress[1] = float(elem.get("scale")) * (-1) + elif elem.get("name") == "Szz" and elem.get("component") == "2": + Stress[2] = float(elem.get("scale")) * (-1) + + param = tree.findall('FieldSpecifications/Traction') + found_stress = False + for elem in param: + if elem.get("name") == "WellLoad" and elem.get("tractionType") == "normal": + Pw = float(elem.get("scale")) * (-1) + found_stress = True + if found_stress: break + + return Stress, Pw + + +def getGeometryFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + wellRadius = tree.find('Mesh/InternalWellbore') + radius = wellRadius.get("radius") + radius = [float(i) for i in radius[1:-1].split(",")] + rw = radius[0] + rout = radius[1] + + nt = wellRadius.get("nt") + nt = [float(i) for i in nt[1:-1].split(",")] + elenum_t = nt[0] + + return rw, rout, elenum_t + + +# Rotate stress tensor, counter-clockwise rotation direction defined as positive +def stressRotation(stress, phi_x): + rotx = np.array([[np.cos(phi_x), np.sin(phi_x), 0.], [-np.sin(phi_x), np.cos(phi_x), 0.], [0., 0., 1.]]) + + return np.dot(np.dot(rotx, stress), np.transpose(rotx)) + + +# Rotate displacement vector, counter-clockwise rotation direction defined as positive +def dispRotation(disp, phi_x): + rotx = np.array([[np.cos(phi_x), np.sin(phi_x), 0.], [-np.sin(phi_x), np.cos(phi_x), 0.], [0., 0., 1.]]) + + return np.dot(rotx, disp) + + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + # Load and process GEOSX results + # File path + outputDir = args.outputDir + geosDir = args.geosDir + hdf5File1Path = outputDir + "/stress_history.hdf5" + hdf5File2Path = outputDir + "/displacement_history.hdf5" + xmlFile1Path = geosDir + "/inputFiles/solidMechanics/KirschProblem_base.xml" + xmlFile2Path = geosDir + "/inputFiles/solidMechanics/KirschProblem_benchmark.xml" + + # Read HDF5 + # Global Coordinate of Element Center + hf = h5py.File(hdf5File1Path, 'r') + xl_elm = hf.get('rock_stress elementCenter') + xl_elm = np.asarray(xl_elm) + xcord_elm = xl_elm[0, :, 0] + ycord_elm = xl_elm[0, :, 1] + zcord_elm = xl_elm[0, :, 2] + # Load Stress Components + sigma = hf.get('rock_stress') + sigma = np.asarray(sigma) + sigma_Cart = np.zeros([len(sigma[0, :, 0]), 6]) + for i in range(0, len(sigma[0, :, 0])): + for j in range(0, 6): + for k in range(0, 8): + sigma_Cart[i, j] += sigma[0, i, j + 6 * k] / 8. + + # Global Coordinate of Nodal Point + hf = h5py.File(hdf5File2Path, 'r') + xl_node = hf.get('totalDisplacement ReferencePosition') + xl_node = np.asarray(xl_node) + xcord_node = xl_node[0, :, 0] + ycord_node = xl_node[0, :, 1] + zcord_node = xl_node[0, :, 2] + # Load Displacement Components + disp_load = hf.get('totalDisplacement') + disp_load = np.asarray(disp_load) + disp_Cart = disp_load[0, :, :] + + # Extract Mechanical Properties and Fracture Geometry from XML + mechanicalParameters = getMechanicalParametersFromXML(xmlFile1Path) + Stress, Pw = getCompressiveStressFromXML(xmlFile1Path) + rw, rout, nt = getGeometryFromXML(xmlFile2Path) + + # Extract Curve + theta = (1. / 4. - 1. / 2. / nt) * np.pi + rlist_elm = [] + sigmalist = [] + for i in range(0, len(zcord_elm)): + if abs(zcord_elm[i] / 0.5 - 1.) < 0.01 and abs(xcord_elm[i] * tan(theta) / ycord_elm[i] - 1.) < 0.01: + rlist_elm.append((xcord_elm[i]**2 + ycord_elm[i]**2)**0.5) + sigmalist.append(sigma_Cart[i, :] / 1.0e6) + + sig_rr, sig_tt, sig_rt = [], [], [] + for i in range(0, len(rlist_elm)): + stress = np.array([[sigmalist[i][0],sigmalist[i][5],sigmalist[i][4]],\ + [sigmalist[i][5],sigmalist[i][1],sigmalist[i][3]],\ + [sigmalist[i][4],sigmalist[i][3],sigmalist[i][2]]]) + + stressLocal = stressRotation(stress, theta) + sig_rr.append(stressLocal[0][0]) + sig_tt.append(stressLocal[1][1]) + sig_rt.append(stressLocal[0][1]) + + theta = 1. / 4. * np.pi + rlist_node = [] + displist = [] + for i in range(0, len(zcord_node)): + if abs(zcord_node[i] / 1.0 - 1.) < 0.01 and abs(xcord_node[i] * tan(theta) / + (ycord_node[i] + 1e-6) - 1.) < 0.01: + rlist_node.append((xcord_node[i]**2 + ycord_node[i]**2)**0.5) + displist.append(disp_Cart[i, :] * 1.0e3) + + u_r, u_t = [], [] + for i in range(0, len(rlist_node)): + disp = np.array([displist[i][0], displist[i][1], displist[i][2]]) + + dispLocal = dispRotation(disp, theta) + u_r.append(dispLocal[0]) + u_t.append(dispLocal[1]) + + # Initialize analytical solution + AnalyticalSolution = Analytical(mechanicalParameters, rw, Stress, Pw, theta) + + # Plot Analytical (continuous line) and Numerical (markers) Solution + x_analytical = np.linspace(rw, rout, 1000, endpoint=True) + srr_analytical = np.empty(len(x_analytical)) + s00_analytical = np.empty(len(x_analytical)) + sr0_analytical = np.empty(len(x_analytical)) + ur_analytical = np.empty(len(x_analytical)) + u0_analytical = np.empty(len(x_analytical)) + i = 0 + for xCell in x_analytical: + srr_analytical[i] = AnalyticalSolution.computeRadialStress(xCell) / 1.0e6 + s00_analytical[i] = AnalyticalSolution.computeHoopStress(xCell) / 1.0e6 + sr0_analytical[i] = AnalyticalSolution.computeShearStress(xCell) / 1.0e6 + ur_analytical[i] = AnalyticalSolution.computeRadialDisp(xCell) * 1.0e3 + u0_analytical[i] = AnalyticalSolution.computeShearDisp(xCell) * 1.0e3 + i += 1 + + #Visulization + N1 = 1 + fsize = 32 + msize = 15 + lw = 8 + malpha = 1.0 + + fig, ax = plt.subplots(1, 2, figsize=(32, 12)) + cmap = plt.get_cmap("tab10") + + ax[0].semilogx(x_analytical, + -srr_analytical, + lw=lw, + alpha=0.5, + color=cmap(0), + label=u"\u03C3" + r'$_{rr}$ - Analytical') + ax[0].semilogx(rlist_elm, + sig_rr, + 'o', + color=cmap(0), + markersize=msize, + alpha=malpha, + label=u"\u03C3" + r'$_{rr}$ - GEOSX') + ax[0].semilogx(x_analytical, + -s00_analytical, + lw=lw, + alpha=0.5, + color=cmap(1), + label=u"\u03C3" + r'$_{\theta\theta}$ - Analytical') + ax[0].semilogx(rlist_elm, + sig_tt, + 'o', + color=cmap(1), + markersize=msize, + alpha=malpha, + label=u"\u03C3" + r'$_{\theta\theta}$ - GEOSX') + ax[0].semilogx(x_analytical, + -sr0_analytical, + lw=lw, + alpha=0.5, + color=cmap(2), + label=u"\u03C3" + r'$_{r\theta}$ - Analytical') + ax[0].semilogx(rlist_elm, + sig_rt, + 'o', + color=cmap(2), + markersize=msize, + alpha=malpha, + label=u"\u03C3" + r'$_{r\theta}$ - GEOSX') + ax[0].set_xlim(rw, rout) + ax[0].set_xlabel(r'r (m)', size=fsize, weight="bold") + ax[0].set_ylabel(u"\u03C3" + r' (MPa)', size=fsize, weight="bold") + ax[0].legend(loc='lower right', fontsize=fsize * 0.8) + ax[0].grid(True) + ax[0].xaxis.set_tick_params(labelsize=fsize) + ax[0].yaxis.set_tick_params(labelsize=fsize) + + ax[1].semilogx(x_analytical, ur_analytical, lw=lw, alpha=0.5, color=cmap(0), label=r'u$_{r}$ - Analytical') + ax[1].semilogx(rlist_node, u_r, 'o', color=cmap(0), markersize=msize, alpha=malpha, label=r'u$_{r}$ - GEOSX') + ax[1].semilogx(x_analytical, u0_analytical, lw=lw, alpha=0.5, color=cmap(1), label=r'u$_{\theta}$ - Analytical') + ax[1].semilogx(rlist_node, u_t, 'o', color=cmap(1), markersize=msize, alpha=malpha, label=r'u$_{\theta}$ - GEOSX') + ax[1].set_xlim(rw, rout) + ax[1].set_xlabel(r'r (m)', size=fsize, weight="bold") + ax[1].set_ylabel(r'Displacement (mm)', size=fsize, weight="bold") + ax[1].legend(loc='lower right', fontsize=fsize * 0.8) + ax[1].grid(True) + ax[1].xaxis.set_tick_params(labelsize=fsize) + ax[1].yaxis.set_tick_params(labelsize=fsize) + + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/linearThermalDiffusion/linearThermalDiffusion_plot.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/linearThermalDiffusion/linearThermalDiffusion_plot.hires.png new file mode 100644 index 00000000000..9c24ee35203 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/linearThermalDiffusion/linearThermalDiffusion_plot.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/linearThermalDiffusion/linearThermalDiffusion_plot.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/linearThermalDiffusion/linearThermalDiffusion_plot.pdf new file mode 100644 index 00000000000..368109de3a3 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/linearThermalDiffusion/linearThermalDiffusion_plot.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/linearThermalDiffusion/linearThermalDiffusion_plot.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/linearThermalDiffusion/linearThermalDiffusion_plot.png new file mode 100644 index 00000000000..a9a4dd73f0a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/linearThermalDiffusion/linearThermalDiffusion_plot.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/linearThermalDiffusion/linearThermalDiffusion_plot.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/linearThermalDiffusion/linearThermalDiffusion_plot.py new file mode 100644 index 00000000000..67e336576c2 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/linearThermalDiffusion/linearThermalDiffusion_plot.py @@ -0,0 +1,147 @@ +import os +import sys +import os +import argparse + +import numpy as np +import matplotlib.pyplot as plt +import pandas as pd +import scipy.linalg +from scipy import special +from xml.etree import ElementTree + +# Analytical results +def steadyState(Tin, Tout, Rin, Rout, radialCoordinate): + return Tin + (Tout - Tin) * (np.log(radialCoordinate) - np.log(Rin)) / (np.log(Rout) - np.log(Rin)) + +def diffusionFunction(radialCoordinate, Rin, diffusionCoefficient, diffusionTime): + return special.erfc( (radialCoordinate - Rin) / 2.0 / np.sqrt( diffusionCoefficient * diffusionTime ) ) + +def computeTransientTemperature(Tin, Tout, Rin, radialCoordinate, thermalDiffusionCoefficient, diffusionTime): + # Ref. Wang and Papamichos (1994), https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/94WR01774 + return Tout + (Tin-Tout) * np.sqrt(Rin/radialCoordinate) * diffusionFunction(radialCoordinate, Rin, thermalDiffusionCoefficient, diffusionTime) + +def computeThermalDiffusionCoefficient(thermalConductivity, volumetricHeatCapacity): + return thermalConductivity / volumetricHeatCapacity + +def extractDataFromXMLList(paramList): + # Extract data from a list in XML such as "{ 1, 2, 3}" + return paramList.replace('{', '').replace('}', '').strip().split(',') + +def getWellboreGeometryFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + meshParam = tree.find('Mesh/InternalWellbore') + radii = extractDataFromXMLList( meshParam.get("radius") ) + + Rin = float(radii[0]) + Rout = float(radii[-1]) + + return [Rin, Rout] + +def getLoadingFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + fsParams = tree.findall('FieldSpecifications/FieldSpecification') + + for fsParam in fsParams: + if ( (fsParam.get('fieldName') == "pressure") & (fsParam.get('initialCondition') != "1") ): + if fsParam.get('setNames') == "{ rneg }": + Pin = float(fsParam.get('scale')) + if fsParam.get('setNames') == "{ rpos }": + Pout = float(fsParam.get('scale')) + + for fsParam in fsParams: + if ( (fsParam.get('fieldName') == "temperature") & (fsParam.get('initialCondition') != "1") ): + if fsParam.get('setNames') == "{ rneg }": + Tin = float(fsParam.get('scale')) + if fsParam.get('setNames') == "{ rpos }": + Tout = float(fsParam.get('scale')) + + tree_SinglePhaseThermalConductivities = tree.findall('Constitutive/SinglePhaseThermalConductivity') + + for tree_SinglePhaseThermalConductivity in tree_SinglePhaseThermalConductivities: + if tree_SinglePhaseThermalConductivity.get('name') == "thermalCond_linear": + thermalConductivity = float( extractDataFromXMLList( tree_SinglePhaseThermalConductivity.get('defaultThermalConductivityComponents') )[0] ) + + tree_SolidInternalEnergies = tree.findall('Constitutive/SolidInternalEnergy') + + for tree_SolidInternalEnergy in tree_SolidInternalEnergies: + if tree_SolidInternalEnergy.get('name') == "rockInternalEnergy_linear": + volumetricHeatCapacity = float( tree_SolidInternalEnergy.get('referenceVolumetricHeatCapacity') ) + + permeability = float( extractDataFromXMLList( tree.find('Constitutive/ConstantPermeability').get('permeabilityComponents') )[0] ) + + porosity = float( tree.find('Constitutive/PressurePorosity').get('defaultReferencePorosity') ) + + fluidViscosity = float( tree.find('Constitutive/ThermalCompressibleSinglePhaseFluid').get('defaultViscosity') ) + + fluidCompressibility = float( tree.find('Constitutive/ThermalCompressibleSinglePhaseFluid').get('compressibility') ) + + fluidThermalExpansionCoefficient = float( tree.find('Constitutive/ThermalCompressibleSinglePhaseFluid').get('thermalExpansionCoeff') ) + + return [Pin, Pout, Tin, Tout, thermalConductivity, volumetricHeatCapacity, permeability, porosity, fluidViscosity, fluidCompressibility, fluidThermalExpansionCoefficient] + + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../../..') + + # Parse the command-line arguments + args = parser.parse_args() + + geosDir = args.geosDir + + xmlFilePath = geosDir + "/inputFiles/singlePhaseFlow/thermalCompressible_2d" + + Rin, Rout = getWellboreGeometryFromXML(xmlFilePath+"_benchmark.xml") + + Pin, Pout, Tin, Tout, thermalConductivity, volumetricHeatCapacity, permeability, porosity, fluidViscosity, fluidCompressibility, fluidThermalExpansionCoefficient = getLoadingFromXML(xmlFilePath+"_base.xml") + + plt.figure(figsize=(10,7)) + font = {'size' : 16} + plt.rc('font', **font) + + for chart_idx, idx in enumerate([1, 2, 5, 10]): + # Numerical results + data = pd.read_csv(f'data_{idx}.csv') + radialCoordinate = (data['elementCenter:0']**2.0 + data['elementCenter:1']**2.0)**0.5 + temperature = data['temperature'] + diffusionTime = data['Time'][0] + + # Analytical results + thermalDiffusionCoefficient = computeThermalDiffusionCoefficient(thermalConductivity, volumetricHeatCapacity) + + T_transient = computeTransientTemperature(Tin, Tout, Rin, radialCoordinate, thermalDiffusionCoefficient, diffusionTime) + + # Analytical results of the steady state regime for comparison + T_steadyState = steadyState(Tin, Tout, Rin, Rout, radialCoordinate) + + # Visualization + # Temperature + plt.subplot(2,2,chart_idx+1) + plt.plot( radialCoordinate, temperature, 'k+' , label='GEOSX' ) + plt.plot( radialCoordinate, T_transient, 'r-' , label='Analytic, infinite domain' ) + plt.plot( radialCoordinate, T_steadyState, 'b-' , label='Steady State' ) + + if chart_idx==1: + plt.legend() + + if chart_idx in [2,3]: + plt.xlabel('Radial distance from well center') + + if chart_idx in [0,2]: + plt.ylabel('Temperature (°C)') + + plt.ylim(-30,110) + plt.xlim(0,1.0) + plt.title('t = '+str(diffusionTime)+'(s)') + plt.tight_layout() + + plt.show() + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/mccWellbore/mccWellboreFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/mccWellbore/mccWellboreFigure.hires.png new file mode 100644 index 00000000000..b8edb6fe207 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/mccWellbore/mccWellboreFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/mccWellbore/mccWellboreFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/mccWellbore/mccWellboreFigure.pdf new file mode 100644 index 00000000000..783ba8227aa Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/mccWellbore/mccWellboreFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/mccWellbore/mccWellboreFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/mccWellbore/mccWellboreFigure.png new file mode 100644 index 00000000000..2a69e96c3db Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/mccWellbore/mccWellboreFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/mccWellbore/mccWellboreFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/mccWellbore/mccWellboreFigure.py new file mode 100644 index 00000000000..75f0f487406 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/mccWellbore/mccWellboreFigure.py @@ -0,0 +1,293 @@ +import sys +import matplotlib +import numpy as np +import math +import matplotlib.pyplot as plt +from math import sin, cos, tan, exp + + +def solution(sr, s0, sz, M, lamda, keppa, G, xd, dx, v0, v): + p = (sr + s0 + sz) / 3.0 + q = pow(((sr - s0)**2 + (sr - sz)**2 + (s0 - sz)**2) / 2.0, 1.0 / 2.0) + #G=3.0*(1.0-2.0*mu)*v0*p/2.0/(1.0+mu)/keppa + mu = (3.0 * v * p - 2.0 * G * keppa) / 2.0 / (3.0 * v * p + G * keppa) + E = G * 2.0 * (1.0 + mu) + + ar = p / 3.0 * (M**2 - (q / p)**2) + 3.0 * (sr - p) + a0 = p / 3.0 * (M**2 - (q / p)**2) + 3.0 * (s0 - p) + az = p / 3.0 * (M**2 - (q / p)**2) + 3.0 * (sz - p) + y = (lamda - keppa) / v / p**3 / (M**4 - (q / p)**4) + b11 = 1.0 / pow(E, 2.0) * (1.0 - pow(mu, 2.0) + E * a0 * a0 * y + 2.0 * E * mu * a0 * az * y + E * az * az * y) + b12 = 1.0 / pow(E, 2.0) * (-E * ar * (a0 + mu * az) * y + mu * (1.0 + mu - E * a0 * az * y + E * az * az * y)) + b13 = 1.0 / pow(E, 2.0) * (-E * ar * (mu * a0 + az) * y + mu * (1.0 + mu + E * a0 * a0 * y - E * a0 * az * y)) + b22 = 1.0 / pow(E, 2.0) * (1.0 - pow(mu, 2.0) + E * ar * ar * y + 2.0 * E * mu * ar * az * y + E * az * az * y) + b23 = 1.0 / pow(E, 2.0) * (mu + mu * mu + E * mu * ar * ar * y - E * a0 * az * y - E * mu * ar * (a0 + az) * y) + b33 = 1.0 / pow(E, 2.0) * (1.0 - pow(mu, 2.0) + E * ar * ar * y + 2.0 * E * mu * ar * a0 * y + E * a0 * a0 * y) + b21 = b12 + b31 = b13 + b32 = b23 + delta = -1.0 * (1.0 + mu) / pow(E, 3.0) * ((-1.0 + mu + 2.0 * pow(mu, 2.0)) + E * (-1.0 + mu) * ar * ar * y + E * + (-1.0 + mu) * a0 * a0 * y - 2.0 * E * mu * a0 * az * y - + E * az * az * y + E * mu * az * az * y - 2.0 * E * mu * ar * + (a0 + az) * y) + DrDx = -(sr - s0) / (1 - xd - v0 / (v * (1 - xd))) + sr1 = DrDx * dx + sr + D0Dx = -b21 / b11 * ((sr - s0) / (1 - xd - v0 / (v * (1 - xd))) + (b11 - b12) / delta / + (1 - xd)) - (b22 - b21) / delta / (1 - xd) + s01 = D0Dx * dx + s0 + DzDx = -b31 / b11 * ((sr - s0) / (1 - xd - v0 / (v * (1 - xd))) + (b11 - b12) / delta / + (1 - xd)) - (b32 - b31) / delta / (1 - xd) + sz1 = DzDx * dx + sz + DvDx = v * delta / b11 * ((sr - s0) / (1 - xd - v0 / (v * (1 - xd))) + (b11 - b12) / delta / (1 - xd)) + v1 = DvDx * dx + v + return sr1, s01, sz1, v1 + + +def main(): + M = 1.2 + lamda = 0.15 + keppa = 0.03 + mu = 0.278 + vcs = 2.74 + R = 1.2 + + sh = 100 + sv = 160 + p0 = (2.0 * sh + sv) / 3.0 + q0 = sv - sh + K0 = sh / sv + pc0 = p0 * R * (1.0 + 1.0 / M**2 * (q0 / p0)**2) + v0 = vcs + (lamda - keppa) * np.log(2.0) + (keppa - lamda) * np.log(pc0) - keppa * np.log(p0) + G0 = 3.0 * (1.0 - 2.0 * mu) * v0 * p0 / 2.0 / (1.0 + mu) / keppa + + a_a0 = 1.08293 + nd = 2000 + + # Analytical Solution (Chen & Abousleiman, 2013) + # Plastic zone + qp0 = M * p0 * pow(R * (1.0 + 1.0 / M**2 * (q0 / p0)**2) - 1.0, 1.0 / 2.0) + sr0 = sh + pow(sh**2 - (4.0 * sh**2 + sv**2 - 2 * sh * sv - qp0**2) / 3.0, 1.0 / 2.0) + s00 = sh - pow(sh**2 - (4.0 * sh**2 + sv**2 - 2 * sh * sv - qp0**2) / 3.0, 1.0 / 2.0) + sz0 = sv + vp0 = v0 + xd0 = (sr0 - sh) / 2.0 / G0 + pp0 = (sr0 + s00 + sz0) / 3.0 + + sr = [] + s0 = [] + sz = [] + v = [] + xd = [] + p = [] + q = [] + sr.append(np.empty([0])) + s0.append(np.empty([0])) + sz.append(np.empty([0])) + v.append(np.empty([0])) + xd.append(np.empty([0])) + p.append(np.empty([0])) + q.append(np.empty([0])) + sr[0] = sr0 + s0[0] = s00 + sz[0] = sz0 + v[0] = v0 + xd[0] = xd0 + p[0] = pp0 + q[0] = qp0 + + xd_well = 1.0 - 1.0 / a_a0 + dx = (xd_well - xd0) / (nd - 1) + for i in range(1, nd): + sr.append(np.empty([0])) + s0.append(np.empty([0])) + sz.append(np.empty([0])) + v.append(np.empty([0])) + xd.append(np.empty([0])) + p.append(np.empty([0])) + q.append(np.empty([0])) + sr[i], s0[i], sz[i], v[i] = solution(sr[i - 1], s0[i - 1], sz[i - 1], M, lamda, keppa, G0, xd[i - 1], dx, v0, + v[i - 1]) + xd[i] = xd[i - 1] + dx + p[i] = (sr[i] + s0[i] + sz[i]) / 3.0 + q[i] = pow(((sr[i] - s0[i])**2 + (sr[i] - sz[i])**2 + (s0[i] - sz[i])**2) / 2.0, 1.0 / 2.0) + + Pw = sr[-1] + temp = 0.0 + xd_x = np.zeros(len(xd)) + xd_x[nd - 1] = 1.0 + for i in range(nd - 1, 0, -1): + temp = temp + (1.0 / (1 - xd[i - 1] - v0 / (v[i - 1] * (1 - xd[i - 1])))) * (-dx) + xd_x[i - 1] = exp(temp) + + # Elastic zone + rp_d = xd_x[0] + xd_e = np.linspace(rp_d, 100, 100) + sr_e = sh + (sr0 - sh) * pow(rp_d / xd_e, 2.0) + s0_e = sh - (sr0 - sh) * pow(rp_d / xd_e, 2.0) + sz_e = sz0 * pow(rp_d / xd_e, 0.0) + v_e = v0 * pow(rp_d / xd_e, 0.0) + p_re = (sr_e + s0_e + sz_e) / 3.0 + q_re = pow(((sr_e - s0_e)**2 + (sr_e - sz_e)**2 + (s0_e - sz_e)**2) / 2.0, 1.0 / 2.0) + + p_e = np.linspace(p0, pp0, 10) + q_e = np.linspace(q0, qp0, 10) + + nda = 200 + ad_p = np.linspace(1.0, 3.0, nda) + pw_p = np.zeros(nda) + rp_p = np.zeros(nda) + sr2 = np.linspace(sr0, 1000.0, nd) + s02 = np.linspace(s00, 1000.0, nd) + sz2 = np.linspace(sz0, 1000.0, nd) + v2 = np.linspace(v0, 1000.0, nd) + xd2 = np.linspace(xd0, 1000.0, nd) + for j in range(0, nda): + xd_well = 1.0 - 1.0 / ad_p[j] + dx = (xd_well - xd0) / (nd - 1) + for i in range(1, nd): + sr2[i], s02[i], sz2[i], v2[i] = solution(sr2[i - 1], s02[i - 1], sz2[i - 1], M, lamda, keppa, G0, + xd2[i - 1], dx, v0, v2[i - 1]) + xd2[i] = xd2[i - 1] + dx + + temp = 0.0 + xd_x2 = np.zeros(len(xd)) + xd_x2[nd - 1] = 1.0 + for i in range(nd - 1, 0, -1): + temp = temp + (1.0 / (1 - xd2[i - 1] - v0 / (v2[i - 1] * (1 - xd2[i - 1])))) * (-dx) + xd_x2[i - 1] = exp(temp) + + pw_p[j] = sr2[-1] + rp_p[j] = xd_x2[0] + + if abs(ad_p[j] - a_a0) <= 1.0e-2: + ind = j + + # Load GEOSX results + r, s1 = np.loadtxt("plot_s1.curve", skiprows=0, unpack=True) + r, s2 = np.loadtxt("plot_s2.curve", skiprows=0, unpack=True) + r, s3 = np.loadtxt("plot_s3.curve", skiprows=0, unpack=True) + p_xd = -(s1 + s2 + s3) / 1.0e6 / 3.0 + q_xd = pow(((s1 - s2)**2 + (s1 - s3)**2 + (s2 - s3)**2) / 2.0, 1.0 / 2.0) / 1.0e6 + v_xd = v0 + lamda * np.log(p0 / (p_xd * 1000)) + r_num = r / r[0] + time, p_num, q_num, disp = np.loadtxt("plot_timehist.txt", skiprows=1, unpack=True) + + Pw = 300 + p_start = sh + beta = Pw / p_start + pw_num = p_start * (beta + (1 - time) * (1 - beta)) + ad_num = (0.1 + disp) / 0.1 + v_num = v0 + lamda * np.log(p0 / (p_num * 1000)) + + #Visulization + N1 = 1 + fsize = 24 + msize = 8 + lw = 8 + malpha = 1.0 + lablelist = [ + u"\u03C3" + r'$_{r}$-Analytical', u"\u03C3" + r'$_{r}$-GEOSX', u"\u03C3" + r'$_{o}$-Analytical', u"\u03C3" + r'$_{o}$-GEOSX', u"\u03C3" + r'$_{z}$-Analytical', u"\u03C3" + r'$_{z}$-GEOSX' + ] + fig, ax = plt.subplots(2, 2, figsize=(32, 18)) + + rlist = [rp_d, rp_d] + ylist = [0, 500] + ax[0, 0].semilogx(xd_x, sr, lw=lw, alpha=0.5, color='b', label=lablelist[0]) + ax[0, 0].semilogx(xd_e, sr_e, lw=lw, alpha=0.5, color='b') + ax[0, 0].semilogx(r_num[0::N1], -s1[0::N1] / 1.0e3, 'bo', fillstyle='full', markersize=msize, label=lablelist[1]) + ax[0, 0].semilogx(xd_x, s0, lw=lw, alpha=0.5, color='g', label=lablelist[2]) + ax[0, 0].semilogx(xd_e, s0_e, lw=lw, alpha=0.5, color='g') + ax[0, 0].semilogx(r_num[0::N1], -s2[0::N1] / 1.0e3, 'go', fillstyle='full', markersize=msize, label=lablelist[3]) + ax[0, 0].semilogx(xd_x, sz, lw=lw, alpha=0.8, color='y', label=lablelist[4]) + ax[0, 0].semilogx(xd_e, sz_e, lw=lw, alpha=0.8, color='y') + ax[0, 0].semilogx(r_num[0::N1], -s3[0::N1] / 1.0e3, 'yo', fillstyle='full', markersize=msize, label=lablelist[5]) + ax[0, 0].semilogx(rlist, ylist, lw=lw, alpha=0.8, color='r', linestyle='--') + ax[0, 0].set_xlim([1, 100]) + ax[0, 0].set_ylim(0, 500) + ax[0, 0].set_xlabel(r'rd', size=fsize, weight="bold") + ax[0, 0].set_ylabel(u"\u03C3" + r' (kPa)', size=fsize, weight="bold") + + ax[0, 0].legend(loc='upper right', fontsize=fsize * 0.7) + ax[0, 0].grid(True, which="both", ls="-") + ax[0, 0].xaxis.set_tick_params(labelsize=fsize) + ax[0, 0].yaxis.set_tick_params(labelsize=fsize) + + ax[0, 1].semilogx(xd_x, p, lw=lw, alpha=0.5, color='lime', label='p_Analytical') + ax[0, 1].semilogx(xd_e, p_re, lw=lw, alpha=0.5, color='lime') + ax[0, 1].semilogx(r_num[0::N1], + p_xd[0::N1] * 1000, + marker='o', + markerfacecolor='lime', + linestyle='none', + markersize=msize, + label='p_GEOSX') + ax[0, 1].semilogx(xd_x, q, lw=lw, alpha=0.5, color='orangered', label='q_Analytical') + ax[0, 1].semilogx(xd_e, q_re, lw=lw, alpha=0.5, color='orangered') + ax[0, 1].semilogx(r_num[0::N1], + q_xd[0::N1] * 1000, + marker='o', + markerfacecolor='orangered', + linestyle='none', + markersize=msize, + label='q_GEOSX') + ax[0, 1].semilogx(rlist, ylist, lw=lw, alpha=0.8, color='r', linestyle='--') + ax[0, 1].set_xlim([1, 100]) + ax[0, 1].set_ylim([0, 500]) + ax[0, 1].set_xlabel(r'rd', size=fsize, weight="bold") + ax[0, 1].set_ylabel(r'Distribution of p and q (kPa)', size=fsize, weight="bold") + ax[0, 1].legend(loc='upper right', fontsize=fsize * 0.7) + ax[0, 1].grid(True, which="both", ls="-") + ax[0, 1].xaxis.set_tick_params(labelsize=fsize) + ax[0, 1].yaxis.set_tick_params(labelsize=fsize) + + N1 = 5 + ax[1, 0].plot(p_e, q_e, lw=lw, alpha=0.5, color='b', label='Analytical') + ax[1, 0].plot(p, q, lw=lw, alpha=0.5, color='b') + ax[1, 0].plot(p_num[0::N1] * 1000, + q_num[0::N1] * 1000, + 'yo', + fillstyle='full', + markersize=msize * 0.8, + label='GEOSX') + ax[1, 0].plot(p_e[0], q_e[0], 'ko', fillstyle='full', markersize=msize * 1.5) + ax[1, 0].plot(p_e[-1], q_e[-1], 'ro', fillstyle='full', markersize=msize * 1.5) + ax[1, 0].set_xlim([0, 400]) + ax[1, 0].set_ylim([0, 400]) + ax[1, 0].set_xlabel(r'p (kPa)', size=fsize, weight="bold") + ax[1, 0].set_ylabel(r'q (kPa)', size=fsize, weight="bold") + ax[1, 0].legend(loc='upper left', fontsize=fsize * 0.7) + ax[1, 0].grid(True, which="both", ls="-") + ax[1, 0].xaxis.set_tick_params(labelsize=fsize) + ax[1, 0].yaxis.set_tick_params(labelsize=fsize) + + plist = np.linspace(0, 400, 100) + qlist = M * plist + ax[1, 0].plot(plist, qlist, lw=lw, alpha=0.5, color='g', linestyle='--') + plist = np.linspace(0, pc0, 1000) + qlist = M * pow(plist * (pc0 - plist), 0.5) + ax[1, 0].plot(plist, qlist, lw=lw, alpha=0.5, color='r') + + ax[1, 1].plot(ad_p, pw_p, lw=lw, alpha=0.5, color='b', label='Analytical') + ax[1, 1].plot(ad_num[0::N1], pw_num[0::N1], 'yo', fillstyle='full', markersize=msize * 1.0, label='GEOSX') + ax[1, 1].set_xlim([0.9, 1.5]) + ax[1, 1].set_ylim([0, 1000]) + ax[1, 1].set_xlabel(r'a/a0', size=fsize, weight="bold") + ax[1, 1].set_ylabel(r'Pw (kPa)', size=fsize, weight="bold") + + ax[1, 1].legend(loc='upper right', fontsize=fsize * 0.7) + ax[1, 1].grid(True, which="both", ls="-") + ax[1, 1].xaxis.set_tick_params(labelsize=fsize) + ax[1, 1].yaxis.set_tick_params(labelsize=fsize) + + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentSinglePhaseThermalConductivity/temperatureDependentSinglePhaseThermalConductivity_plot.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentSinglePhaseThermalConductivity/temperatureDependentSinglePhaseThermalConductivity_plot.hires.png new file mode 100644 index 00000000000..1e6e86f138e Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentSinglePhaseThermalConductivity/temperatureDependentSinglePhaseThermalConductivity_plot.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentSinglePhaseThermalConductivity/temperatureDependentSinglePhaseThermalConductivity_plot.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentSinglePhaseThermalConductivity/temperatureDependentSinglePhaseThermalConductivity_plot.pdf new file mode 100644 index 00000000000..b4b5a89d239 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentSinglePhaseThermalConductivity/temperatureDependentSinglePhaseThermalConductivity_plot.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentSinglePhaseThermalConductivity/temperatureDependentSinglePhaseThermalConductivity_plot.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentSinglePhaseThermalConductivity/temperatureDependentSinglePhaseThermalConductivity_plot.png new file mode 100644 index 00000000000..e88e208eb2a Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentSinglePhaseThermalConductivity/temperatureDependentSinglePhaseThermalConductivity_plot.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentSinglePhaseThermalConductivity/temperatureDependentSinglePhaseThermalConductivity_plot.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentSinglePhaseThermalConductivity/temperatureDependentSinglePhaseThermalConductivity_plot.py new file mode 100644 index 00000000000..74dc2483e90 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentSinglePhaseThermalConductivity/temperatureDependentSinglePhaseThermalConductivity_plot.py @@ -0,0 +1,218 @@ +import os +import sys +import os +import argparse + +import numpy as np +import matplotlib.pyplot as plt +import pandas as pd +import scipy.linalg +from scipy import special + +from scipy.sparse import diags +from scipy.sparse.linalg import spsolve + +from xml.etree import ElementTree + +# Analytical results for linear thermal behavior +def steadyState(Tin, Tout, Rin, Rout, radialCoordinate): + return Tin + (Tout - Tin) * (np.log(radialCoordinate) - np.log(Rin)) / (np.log(Rout) - np.log(Rin)) + +def diffusionFunction(radialCoordinate, Rin, diffusionCoefficient, diffusionTime): + return special.erfc( (radialCoordinate - Rin) / 2.0 / np.sqrt( diffusionCoefficient * diffusionTime ) ) + +def computeTransientTemperature(Tin, Tout, Rin, radialCoordinate, thermalDiffusionCoefficient, diffusionTime): + # Ref. Wang and Papamichos (1994), https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/94WR01774 + return Tout + (Tin-Tout) * np.sqrt(Rin/radialCoordinate) * diffusionFunction(radialCoordinate, Rin, thermalDiffusionCoefficient, diffusionTime) + +def computeThermalDiffusionCoefficient(thermalConductivity, volumetricHeatCapacity): + return thermalConductivity / volumetricHeatCapacity + +# Finite difference results for non-linear thermal behavior +def temperatureDependentThermalConductivity(lambda0, lambda_gradient, T, Treference): + return lambda0 + lambda_gradient*(T-Treference) + +def temperatureDependentVolumetricHeat(c0, c_gradient, T, Treference): + return c0 + c_gradient*(T-Treference) + +def coefficientMatrix(thermalConductivity, volumetricHeatCapacity, r, dt, N): + # Coefficients for the matrix + A = np.zeros((N+1, N+1)) + + for i in range(1,N): + dr = r[i] - r[i-1] + r_i = r[i] + + diffusivity_i = thermalConductivity[i]/volumetricHeatCapacity[i] + A[i, i-1] = - diffusivity_i * (dt/(dr**2) - dt/(2 * r_i * dr)) \ + + (thermalConductivity[i+1] - thermalConductivity[i-1])/volumetricHeatCapacity[i]*dt/4/(dr**2) + A[i, i] = 1.0 + 2.0 * diffusivity_i * dt / (dr**2) + A[i, i+1] = - diffusivity_i * (dt/(dr**2) + dt/(2 * r_i * dr)) \ + - (thermalConductivity[i+1] - thermalConductivity[i-1])/volumetricHeatCapacity[i]*dt/4/(dr**2) + + # Boundary conditions + # No-flux at r=0 approximated by setting the flux between the first two cells to zero + A[0, 0] = 1.0 + A[N, N] = 1.0 + return A + +def solve_radial_diffusion(r, tmax, dt, Tin, Tout, lambda0, lambda_gradient, c0, c_gradient, Treference): + N = len(r)-1 + # Time setup + n_steps = int(tmax / dt) + + # Time-stepping + T = np.zeros(N+1) + Tout # initial condition u(r, 0) + T[0] = Tin + for step in range(n_steps): + thermalConductivity = temperatureDependentThermalConductivity(lambda0, lambda_gradient, T, Treference) + + volumetricHeatCapacity = temperatureDependentVolumetricHeat(c0, c_gradient, T, Treference) + + A = coefficientMatrix(thermalConductivity, volumetricHeatCapacity, r, dt, N) + T = spsolve(A, T) + + return T + + +def extractDataFromXMLList(paramList): + # Extract data from a list in XML such as "{ 1, 2, 3}" + return paramList.replace('{', '').replace('}', '').strip().split(',') + +def getWellboreGeometryFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + meshParam = tree.find('Mesh/InternalWellbore') + radii = extractDataFromXMLList( meshParam.get("radius") ) + + Rin = float(radii[0]) + Rout = float(radii[-1]) + + return [Rin, Rout] + +def getLoadingFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + fsParams = tree.findall('FieldSpecifications/FieldSpecification') + + for fsParam in fsParams: + if ( (fsParam.get('fieldName') == "pressure") & (fsParam.get('initialCondition') != "1") ): + if fsParam.get('setNames') == "{ rneg }": + Pin = float(fsParam.get('scale')) + if fsParam.get('setNames') == "{ rpos }": + Pout = float(fsParam.get('scale')) + + for fsParam in fsParams: + if ( (fsParam.get('fieldName') == "temperature") & (fsParam.get('initialCondition') != "1") ): + if fsParam.get('setNames') == "{ rneg }": + Tin = float(fsParam.get('scale')) + if fsParam.get('setNames') == "{ rpos }": + Tout = float(fsParam.get('scale')) + + + tree_SinglePhaseThermalConductivities = tree.findall('Constitutive/SinglePhaseThermalConductivity') + + for tree_SinglePhaseThermalConductivity in tree_SinglePhaseThermalConductivities: + if tree_SinglePhaseThermalConductivity.get('name') == "thermalCond_nonLinear": + defaultThermalConductivity = float( extractDataFromXMLList( tree_SinglePhaseThermalConductivity.get('defaultThermalConductivityComponents') )[0] ) + + thermalConductivityGradient = float( extractDataFromXMLList( tree_SinglePhaseThermalConductivity.get('thermalConductivityGradientComponents') )[0] ) + referenceTemperature = float( tree_SinglePhaseThermalConductivity.get('referenceTemperature') ) + + + tree_SolidInternalEnergies = tree.findall('Constitutive/SolidInternalEnergy') + + for tree_SolidInternalEnergy in tree_SolidInternalEnergies: + if tree_SolidInternalEnergy.get('name') == "rockInternalEnergy_linear": + volumetricHeatCapacity = float( tree_SolidInternalEnergy.get('referenceVolumetricHeatCapacity') ) + dVolumetricHeatCapacity_dTemperature = 0.0 + + + permeability = float( extractDataFromXMLList( tree.find('Constitutive/ConstantPermeability').get('permeabilityComponents') )[0] ) + + porosity = float( tree.find('Constitutive/PressurePorosity').get('defaultReferencePorosity') ) + + fluidViscosity = float( tree.find('Constitutive/ThermalCompressibleSinglePhaseFluid').get('defaultViscosity') ) + + fluidCompressibility = float( tree.find('Constitutive/ThermalCompressibleSinglePhaseFluid').get('compressibility') ) + + fluidThermalExpansionCoefficient = float( tree.find('Constitutive/ThermalCompressibleSinglePhaseFluid').get('thermalExpansionCoeff') ) + + return [Pin, Pout, Tin, Tout, defaultThermalConductivity, thermalConductivityGradient, referenceTemperature, volumetricHeatCapacity, dVolumetricHeatCapacity_dTemperature, permeability, porosity, fluidViscosity, fluidCompressibility, fluidThermalExpansionCoefficient] + + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../../..') + + # Parse the command-line arguments + args = parser.parse_args() + + geosDir = args.geosDir + + xmlFilePath = geosDir + "/inputFiles/singlePhaseFlow/" + + Rin, Rout = getWellboreGeometryFromXML(xmlFilePath+"thermalCompressible_temperatureDependentSinglePhaseThermalConductivity_benchmark.xml") + + Pin, Pout, Tin, Tout, defaultThermalConductivity, thermalConductivityGradient, referenceTemperature, volumetricHeatCapacity, dVolumetricHeatCapacity_dTemperature, permeability, porosity, fluidViscosity, fluidCompressibility, fluidThermalExpansionCoefficient = getLoadingFromXML(xmlFilePath+"thermalCompressible_2d_base.xml") + + plt.figure(figsize=(10,7)) + font = {'size' : 16} + plt.rc('font', **font) + + for chart_idx, idx in enumerate([1, 2, 5, 10]): + # Numerical results + data = pd.read_csv(f'data_{idx}.csv') + data.dropna(inplace=True) + data.drop_duplicates(inplace=True) + data.reset_index(drop=True, inplace=True) + + radialCoordinate = (data['elementCenter:0']**2.0 + data['elementCenter:1']**2.0)**0.5 + temperature = data['temperature'] + #pressure = data['pressure'] + diffusionTime = data['Time'][0] + + # Analytical results for linear thermal behavior, for comparison + radialCoordinate_anal = np.arange(Rin, Rout, (Rout-Rin)/100) + + thermalDiffusionCoefficient = computeThermalDiffusionCoefficient(defaultThermalConductivity, volumetricHeatCapacity) + + T_transient_linear = computeTransientTemperature(Tin, Tout, Rin, radialCoordinate_anal, thermalDiffusionCoefficient, diffusionTime) + + # Analytical results of the steady state regime for comparison + T_steadyState = steadyState(Tin, Tout, Rin, Rout, radialCoordinate_anal) + + # Finite different results for non-linear thermal behavior + + T_transient_nonLinear = solve_radial_diffusion(radialCoordinate_anal, diffusionTime, diffusionTime/1000, Tin, Tout, defaultThermalConductivity, thermalConductivityGradient, volumetricHeatCapacity, dVolumetricHeatCapacity_dTemperature, referenceTemperature) + + # Visualization + # Temperature + plt.subplot(2,2,chart_idx+1) + plt.plot( radialCoordinate, temperature, 'k+' , label='GEOS' ) + plt.plot( radialCoordinate_anal, T_transient_nonLinear, 'g.' , label='FDM Non-Linear' ) + plt.plot( radialCoordinate_anal, T_transient_linear, 'r-' , label='Analytic Linear' ) + plt.plot( radialCoordinate_anal, T_steadyState, 'b-' , label='Steady State' ) + + if chart_idx==1: + plt.legend() + + if chart_idx in [2,3]: + plt.xlabel('Radial distance from well center') + + if chart_idx in [0,2]: + plt.ylabel('Temperature (°C)') + + plt.ylim(Tin-10,Tout+10) + plt.xlim(0.1,0.3) + plt.title('t = '+str(diffusionTime)+'(s)') + plt.tight_layout() + + plt.show() + +if __name__ == "__main__": + main() + diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentVolumetricHeatCapacity/temperatureDependentVolumetricHeatCapacity_plot.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentVolumetricHeatCapacity/temperatureDependentVolumetricHeatCapacity_plot.hires.png new file mode 100644 index 00000000000..4532213441f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentVolumetricHeatCapacity/temperatureDependentVolumetricHeatCapacity_plot.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentVolumetricHeatCapacity/temperatureDependentVolumetricHeatCapacity_plot.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentVolumetricHeatCapacity/temperatureDependentVolumetricHeatCapacity_plot.pdf new file mode 100644 index 00000000000..d4fbe22eabd Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentVolumetricHeatCapacity/temperatureDependentVolumetricHeatCapacity_plot.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentVolumetricHeatCapacity/temperatureDependentVolumetricHeatCapacity_plot.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentVolumetricHeatCapacity/temperatureDependentVolumetricHeatCapacity_plot.png new file mode 100644 index 00000000000..a9a75e3e6f2 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentVolumetricHeatCapacity/temperatureDependentVolumetricHeatCapacity_plot.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentVolumetricHeatCapacity/temperatureDependentVolumetricHeatCapacity_plot.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentVolumetricHeatCapacity/temperatureDependentVolumetricHeatCapacity_plot.py new file mode 100644 index 00000000000..20d7eed6613 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/advancedExamples/validationStudies/wellboreProblems/nonLinearThermalDiffusion_TemperatureDependentVolumetricHeatCapacity/temperatureDependentVolumetricHeatCapacity_plot.py @@ -0,0 +1,216 @@ +import os +import sys +import os +import argparse + +import numpy as np +import matplotlib.pyplot as plt +import pandas as pd +import scipy.linalg +from scipy import special + +from scipy.sparse import diags +from scipy.sparse.linalg import spsolve + +from xml.etree import ElementTree + +# Analytical results for linear thermal behavior +def steadyState(Tin, Tout, Rin, Rout, radialCoordinate): + return Tin + (Tout - Tin) * (np.log(radialCoordinate) - np.log(Rin)) / (np.log(Rout) - np.log(Rin)) + +def diffusionFunction(radialCoordinate, Rin, diffusionCoefficient, diffusionTime): + return special.erfc( (radialCoordinate - Rin) / 2.0 / np.sqrt( diffusionCoefficient * diffusionTime ) ) + +def computeTransientTemperature(Tin, Tout, Rin, radialCoordinate, thermalDiffusionCoefficient, diffusionTime): + # Ref. Wang and Papamichos (1994), https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/94WR01774 + return Tout + (Tin-Tout) * np.sqrt(Rin/radialCoordinate) * diffusionFunction(radialCoordinate, Rin, thermalDiffusionCoefficient, diffusionTime) + +def computeThermalDiffusionCoefficient(thermalConductivity, volumetricHeatCapacity): + return thermalConductivity / volumetricHeatCapacity + +# Finite difference results for non-linear thermal behavior +def temperatureDependentThermalConductivity(lambda0, lambda_gradient, T, Treference): + return lambda0 + lambda_gradient*(T-Treference) + +def temperatureDependentVolumetricHeat(c0, c_gradient, T, Treference): + return c0 + c_gradient*(T-Treference) + +def coefficientMatrix(thermalConductivity, volumetricHeatCapacity, r, dt, N): + # Coefficients for the matrix + A = np.zeros((N+1, N+1)) + + for i in range(1,N): + dr = r[i] - r[i-1] + r_i = r[i] + + diffusivity_i = thermalConductivity[i]/volumetricHeatCapacity[i] + A[i, i-1] = - diffusivity_i * (dt/(dr**2) - dt/(2 * r_i * dr)) \ + + (thermalConductivity[i+1] - thermalConductivity[i-1])/volumetricHeatCapacity[i]*dt/4/(dr**2) + A[i, i] = 1.0 + 2.0 * diffusivity_i * dt / (dr**2) + A[i, i+1] = - diffusivity_i * (dt/(dr**2) + dt/(2 * r_i * dr)) \ + - (thermalConductivity[i+1] - thermalConductivity[i-1])/volumetricHeatCapacity[i]*dt/4/(dr**2) + + # Boundary conditions + # No-flux at r=0 approximated by setting the flux between the first two cells to zero + A[0, 0] = 1.0 + A[N, N] = 1.0 + return A + +def solve_radial_diffusion(r, tmax, dt, Tin, Tout, lambda0, lambda_gradient, c0, c_gradient, Treference): + N = len(r)-1 + # Time setup + n_steps = int(tmax / dt) + + # Time-stepping + T = np.zeros(N+1) + Tout # initial condition u(r, 0) + T[0] = Tin + for step in range(n_steps): + thermalConductivity = temperatureDependentThermalConductivity(lambda0, lambda_gradient, T, Treference) + + volumetricHeatCapacity = temperatureDependentVolumetricHeat(c0, c_gradient, T, Treference) + + A = coefficientMatrix(thermalConductivity, volumetricHeatCapacity, r, dt, N) + T = spsolve(A, T) + + return T + + +def extractDataFromXMLList(paramList): + # Extract data from a list in XML such as "{ 1, 2, 3}" + return paramList.replace('{', '').replace('}', '').strip().split(',') + +def getWellboreGeometryFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + meshParam = tree.find('Mesh/InternalWellbore') + radii = extractDataFromXMLList( meshParam.get("radius") ) + + Rin = float(radii[0]) + Rout = float(radii[-1]) + + return [Rin, Rout] + +def getLoadingFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + fsParams = tree.findall('FieldSpecifications/FieldSpecification') + + for fsParam in fsParams: + if ( (fsParam.get('fieldName') == "pressure") & (fsParam.get('initialCondition') != "1") ): + if fsParam.get('setNames') == "{ rneg }": + Pin = float(fsParam.get('scale')) + if fsParam.get('setNames') == "{ rpos }": + Pout = float(fsParam.get('scale')) + + for fsParam in fsParams: + if ( (fsParam.get('fieldName') == "temperature") & (fsParam.get('initialCondition') != "1") ): + if fsParam.get('setNames') == "{ rneg }": + Tin = float(fsParam.get('scale')) + if fsParam.get('setNames') == "{ rpos }": + Tout = float(fsParam.get('scale')) + + + tree_SinglePhaseThermalConductivities = tree.findall('Constitutive/SinglePhaseThermalConductivity') + + for tree_SinglePhaseThermalConductivity in tree_SinglePhaseThermalConductivities: + if tree_SinglePhaseThermalConductivity.get('name') == "thermalCond_linear": + defaultThermalConductivity = float( extractDataFromXMLList( tree_SinglePhaseThermalConductivity.get('defaultThermalConductivityComponents') )[0] ) + thermalConductivityGradient = 0.0 + + tree_SolidInternalEnergies = tree.findall('Constitutive/SolidInternalEnergy') + + for tree_SolidInternalEnergy in tree_SolidInternalEnergies: + if tree_SolidInternalEnergy.get('name') == "rockInternalEnergy_nonLinear": + referenceVolumetricHeatCapacity = float( tree_SolidInternalEnergy.get('referenceVolumetricHeatCapacity') ) + dVolumetricHeatCapacity_dTemperature = float( tree_SolidInternalEnergy.get('dVolumetricHeatCapacity_dTemperature') ) + referenceTemperature = float( tree_SolidInternalEnergy.get('referenceTemperature') ) + + + permeability = float( extractDataFromXMLList( tree.find('Constitutive/ConstantPermeability').get('permeabilityComponents') )[0] ) + + porosity = float( tree.find('Constitutive/PressurePorosity').get('defaultReferencePorosity') ) + + fluidViscosity = float( tree.find('Constitutive/ThermalCompressibleSinglePhaseFluid').get('defaultViscosity') ) + + fluidCompressibility = float( tree.find('Constitutive/ThermalCompressibleSinglePhaseFluid').get('compressibility') ) + + fluidThermalExpansionCoefficient = float( tree.find('Constitutive/ThermalCompressibleSinglePhaseFluid').get('thermalExpansionCoeff') ) + + return [Pin, Pout, Tin, Tout, defaultThermalConductivity, thermalConductivityGradient, referenceTemperature, referenceVolumetricHeatCapacity, dVolumetricHeatCapacity_dTemperature, permeability, porosity, fluidViscosity, fluidCompressibility, fluidThermalExpansionCoefficient] + + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../../../..') + + # Parse the command-line arguments + args = parser.parse_args() + + geosDir = args.geosDir + + xmlFilePath = geosDir + "/inputFiles/singlePhaseFlow/" + + Rin, Rout = getWellboreGeometryFromXML(xmlFilePath+"thermalCompressible_temperatureDependentVolumetricHeatCapacity_benchmark.xml") + + Pin, Pout, Tin, Tout, defaultThermalConductivity, thermalConductivityGradient, referenceTemperature, volumetricHeatCapacity, dVolumetricHeatCapacity_dTemperature, permeability, porosity, fluidViscosity, fluidCompressibility, fluidThermalExpansionCoefficient = getLoadingFromXML(xmlFilePath+"thermalCompressible_2d_base.xml") + + plt.figure(figsize=(10,7)) + font = {'size' : 16} + plt.rc('font', **font) + + for chart_idx, idx in enumerate([1, 2, 5, 10]): + # Numerical results + data = pd.read_csv(f'data_{idx}.csv') + data.dropna(inplace=True) + data.drop_duplicates(inplace=True) + data.reset_index(drop=True, inplace=True) + + radialCoordinate = (data['elementCenter:0']**2.0 + data['elementCenter:1']**2.0)**0.5 + temperature = data['temperature'] + #pressure = data['pressure'] + diffusionTime = data['Time'][0] + + # Analytical results for linear thermal behavior, for comparison + radialCoordinate_anal = radialCoordinate# np.arange(Rin, Rout, (Rout-Rin)/100) + + thermalDiffusionCoefficient = computeThermalDiffusionCoefficient(defaultThermalConductivity, volumetricHeatCapacity) + + T_transient_linear = computeTransientTemperature(Tin, Tout, Rin, radialCoordinate_anal, thermalDiffusionCoefficient, diffusionTime) + + # Analytical results of the steady state regime for comparison + T_steadyState = steadyState(Tin, Tout, Rin, Rout, radialCoordinate_anal) + + # Finite different results for non-linear thermal behavior + + T_transient_nonLinear = solve_radial_diffusion(radialCoordinate_anal, diffusionTime, diffusionTime/100, Tin, Tout, defaultThermalConductivity, thermalConductivityGradient, volumetricHeatCapacity, dVolumetricHeatCapacity_dTemperature, referenceTemperature) + + # Visualization + # Temperature + plt.subplot(2,2,chart_idx+1) + plt.plot( radialCoordinate, temperature, 'k+' , label='GEOS' ) + plt.plot( radialCoordinate_anal, T_transient_nonLinear, 'g-' , label='FDM Non-Linear' ) + plt.plot( radialCoordinate_anal, T_transient_linear, 'r-' , label='Analytic Linear' ) + plt.plot( radialCoordinate_anal, T_steadyState, 'b-' , label='Steady State' ) + + if chart_idx==1: + plt.legend() + + if chart_idx in [2,3]: + plt.xlabel('Radial distance from well center') + + if chart_idx in [0,2]: + plt.ylabel('Temperature (°C)') + + plt.ylim(-30,110) + plt.xlim(0.,0.5) + plt.title('t = '+str(diffusionTime)+'(s)') + plt.tight_layout() + + plt.show() + +if __name__ == "__main__": + main() + diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/multiphaseFlowWithWells/multiphaseFlowWithWellsFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/multiphaseFlowWithWells/multiphaseFlowWithWellsFigure.hires.png new file mode 100644 index 00000000000..417fefc5c10 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/multiphaseFlowWithWells/multiphaseFlowWithWellsFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/multiphaseFlowWithWells/multiphaseFlowWithWellsFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/multiphaseFlowWithWells/multiphaseFlowWithWellsFigure.pdf new file mode 100644 index 00000000000..b4dc5efbccf Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/multiphaseFlowWithWells/multiphaseFlowWithWellsFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/multiphaseFlowWithWells/multiphaseFlowWithWellsFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/multiphaseFlowWithWells/multiphaseFlowWithWellsFigure.png new file mode 100644 index 00000000000..74b038bb899 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/multiphaseFlowWithWells/multiphaseFlowWithWellsFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/multiphaseFlowWithWells/multiphaseFlowWithWellsFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/multiphaseFlowWithWells/multiphaseFlowWithWellsFigure.py new file mode 100644 index 00000000000..7ef4dd4c370 --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/multiphaseFlowWithWells/multiphaseFlowWithWellsFigure.py @@ -0,0 +1,52 @@ +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import h5py + + +def main(): + + numWells = 4 + iplt = -1 + cmap = plt.get_cmap("tab10") + + # Loop over the four producers + for iw in range(1, numWells + 1): + # File path + hdf5FilePath = 'wellRateHistory' + str(iw) + '.hdf5' + + # Read HDF5 + hf = h5py.File(hdf5FilePath, 'r') + time = hf.get('Time') + time = np.asarray(time) + massRate = hf.get('wellElementMixtureConnectionRate') + massRate = np.asarray(massRate) + + # Some comments about the computation of the volumetric rate here: + # A proper oil rate constraint for individual wells is currently being implemented + # In the meantime, the volume rate is (wrongly) computed by dividing + # the total mass rate by the surface oil density + + # Conversions + inCubicMeters = 1 / 848.9 + inDays = 1.0 / (24 * 3600) + + # Plot HDF5 content (here, the rate at the well) + iplt += 1 + plt.plot(time[:, 0] * inDays, + abs(massRate[:, 0]) * inCubicMeters / inDays, + '-o', + color=cmap(iplt), + label='Producer #' + str(iw)) + + plt.xlim(-1, 175) + plt.ylim(0, 3800) + plt.grid() + plt.xlabel('time [days]') + plt.ylabel('total rate [cubic meters per day]') + plt.legend(bbox_to_anchor=(0.025, 0.975), loc='upper left', borderaxespad=0.) + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/poromechanics/poromechanicsFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/poromechanics/poromechanicsFigure.hires.png new file mode 100644 index 00000000000..18c828044db Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/poromechanics/poromechanicsFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/poromechanics/poromechanicsFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/poromechanics/poromechanicsFigure.pdf new file mode 100644 index 00000000000..5067ca625b9 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/poromechanics/poromechanicsFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/poromechanics/poromechanicsFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/poromechanics/poromechanicsFigure.png new file mode 100644 index 00000000000..6dc85d17b4f Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/poromechanics/poromechanicsFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/poromechanics/poromechanicsFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/poromechanics/poromechanicsFigure.py new file mode 100644 index 00000000000..43e76a3a72b --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/poromechanics/poromechanicsFigure.py @@ -0,0 +1,155 @@ +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import h5py +import xml.etree.ElementTree as ElementTree +from mpmath import * +import math +import os +import argparse + + +class terzaghi: + + def __init__(self, hydromechanicalParameters, xMin, xMax, appliedTraction): + E = hydromechanicalParameters["youngModulus"] + nu = hydromechanicalParameters["poissonRation"] + b = hydromechanicalParameters["biotCoefficient"] + mu = hydromechanicalParameters["fluidViscosity"] + cf = hydromechanicalParameters["fluidCompressibility"] + phi = hydromechanicalParameters["porosity"] + k = hydromechanicalParameters["permeability"] + + K = E / 3.0 / (1.0 - 2.0 * nu) # bulk modulus + Kv = E * (1.0 - nu) / ((1.0 + nu) * (1.0 - 2.0 * nu)) # uniaxial bulk modulus + Se = (b - phi) * (1.0 - b) / K + phi * cf # constrained specific storage + + self.characteristicLength = xMax - xMin + self.appliedTraction = abs(appliedTraction) + self.loadingEfficiency = b / (Kv * Se + b**2) + self.consolidationCoefficient = (k / mu) * Kv / (Se * Kv + b**2) + self.consolidationTime = self.characteristicLength**2 / self.consolidationCoefficient + self.initialPressure = self.loadingEfficiency * self.appliedTraction + + def computePressure(self, x, t): + if t == 0.0: + return self.initialPressure + else: + cc = self.consolidationCoefficient + L = self.characteristicLength + p = nsum( + lambda m: 1 / (2 * m + 1) * exp(-((2 * m + 1)**2) * (math.pi**2) * cc * t / 4 / L / L) * sin( + (2 * m + 1) * math.pi * x / 2 / L), [0, inf]) + return 4 * self.initialPressure / math.pi * p + + +def getHydromechanicalParametersFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + param1 = tree.find('Constitutive/ElasticIsotropic') + param2 = tree.find('Constitutive/BiotPorosity') + param3 = tree.find('Constitutive/CompressibleSinglePhaseFluid') + param4 = tree.find('Constitutive/ConstantPermeability') + + hydromechanicalParameters = dict.fromkeys([ + "youngModulus", "poissonRation", "biotCoefficient", "fluidViscosity", "fluidCompressibility", "porosity", + "permeability" + ]) + + hydromechanicalParameters["youngModulus"] = float(param1.get("defaultYoungModulus")) + hydromechanicalParameters["poissonRation"] = float(param1.get("defaultPoissonRatio")) + + E = hydromechanicalParameters["youngModulus"] + nu = hydromechanicalParameters["poissonRation"] + K = E / 3.0 / (1.0 - 2.0 * nu) + Kg = float(param2.get("defaultGrainBulkModulus")) + + hydromechanicalParameters["biotCoefficient"] = 1.0 - K / Kg + hydromechanicalParameters["porosity"] = float(param2.get("defaultReferencePorosity")) + hydromechanicalParameters["fluidViscosity"] = float(param3.get("defaultViscosity")) + hydromechanicalParameters["fluidCompressibility"] = float(param3.get("compressibility")) + + perm = param4.get("permeabilityComponents") + perm = np.array(perm[1:-1].split(','), float) + hydromechanicalParameters["permeability"] = perm[0] + + return hydromechanicalParameters + + +def getAppliedTractionFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + param = tree.find('FieldSpecifications/Traction') + return float(param.get("scale")) + + +def getDomainMaxMinXCoordFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + meshElement = tree.find('Mesh/InternalMesh') + nodeXCoords = meshElement.get("xCoords") + nodeXCoords = [float(i) for i in nodeXCoords[1:-1].split(",")] + xMin = nodeXCoords[0] + xMax = nodeXCoords[-1] + return xMin, xMax + + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + outputDir = args.outputDir + geosDir = args.geosDir + + # File path + hdf5FilePath = outputDir + "/pressure_history.hdf5" + xmlBaseFilePath = geosDir + "/inputFiles/poromechanics/PoroElastic_Terzaghi_base_direct.xml" + xmlSmokeFilePath = geosDir + "/inputFiles/poromechanics/PoroElastic_Terzaghi_smoke.xml" + + # Read HDF5 + hf = h5py.File(hdf5FilePath, 'r') + time = hf.get('pressure Time') + pressure = hf.get('pressure') + x = hf.get('pressure elementCenter') + + # Extract info from XML + hydromechanicalParameters = getHydromechanicalParametersFromXML(xmlBaseFilePath) + appliedTraction = getAppliedTractionFromXML(xmlBaseFilePath) + + # Get domain min/max coordinate in the x-direction + xMin, xMax = getDomainMaxMinXCoordFromXML(xmlSmokeFilePath) + + # Initialize Terzaghi's analytical solution + terzaghiAnalyticalSolution = terzaghi(hydromechanicalParameters, xMin, xMax, appliedTraction) + + # Plot analytical (continuous line) and numerical (markers) pressure solution + x_analytical = np.linspace(xMin, xMax, 51, endpoint=True) + pressure_analytical = np.empty(len(x_analytical)) + + cmap = plt.get_cmap("tab10") + iplt = -1 + for k in range(0, len(time), 2): + iplt += 1 + t = time[k, 0] + i = 0 + for xCell in x_analytical: + xScaled = terzaghiAnalyticalSolution.characteristicLength * (xCell - xMin) / (xMax - xMin) + pressure_analytical[i] = terzaghiAnalyticalSolution.computePressure(xScaled, t) + i += 1 + plt.plot(x_analytical, pressure_analytical, color=cmap(iplt), label='t = ' + str(t) + ' s') + plt.plot(x[k, :, 0], pressure[k, :], 'o', color=cmap(iplt)) + + plt.grid() + plt.xlabel('$x$ [m]') + plt.ylabel('pressure [Pa]') + plt.legend(bbox_to_anchor=(0.1, 0.55), loc='lower left', borderaxespad=0.) + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/triaxialDriver/triaxialDriverFigure.hires.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/triaxialDriver/triaxialDriverFigure.hires.png new file mode 100644 index 00000000000..0d24b309ca8 Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/triaxialDriver/triaxialDriverFigure.hires.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/triaxialDriver/triaxialDriverFigure.pdf b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/triaxialDriver/triaxialDriverFigure.pdf new file mode 100644 index 00000000000..f3bc7b195ca Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/triaxialDriver/triaxialDriverFigure.pdf differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/triaxialDriver/triaxialDriverFigure.png b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/triaxialDriver/triaxialDriverFigure.png new file mode 100644 index 00000000000..493a5fd247d Binary files /dev/null and b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/triaxialDriver/triaxialDriverFigure.png differ diff --git a/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/triaxialDriver/triaxialDriverFigure.py b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/triaxialDriver/triaxialDriverFigure.py new file mode 100644 index 00000000000..b46ec1f300f --- /dev/null +++ b/src/imgmath_latex=/usr/bin/tex/plot_directive/docs/sphinx/basicExamples/triaxialDriver/triaxialDriverFigure.py @@ -0,0 +1,287 @@ +import sys +import matplotlib +import numpy as np +import matplotlib.pyplot as plt +import math +from math import sin, cos, tan, exp, atan +import xml.etree.ElementTree as ElementTree +import os +import argparse + + +def yieldSurface(xmlFilePath, mechanicalParameters): + tree = ElementTree.parse(xmlFilePath) + + model = tree.find('Tasks/TriaxialDriver') + + if model.get("material") == "DruckerPrager": + + param = tree.find('Constitutive/DruckerPrager') + yieldParameters = dict.fromkeys(["p_Yield", "q_iniYield"]) + + phi_i = mechanicalParameters["frictionAngle"] + c_i = mechanicalParameters["cohesion"] / 1.0e6 + f_i = atan(6.0 * sin(phi_i / 180 * np.pi) / (3.0 - sin(phi_i / 180 * np.pi))) * 180 / np.pi + d_i = 6.0 * c_i * cos(phi_i / 180 * np.pi) / (3.0 - sin(phi_i / 180 * np.pi)) + k_i = tan(f_i / 180 * np.pi) + p_Yield = np.linspace(0, 50, 100) + q_iniYield = k_i * p_Yield + d_i + yieldParameters["p_Yield"] = p_Yield + yieldParameters["q_iniYield"] = q_iniYield + + elif model.get("material") == "ExtendedDruckerPrager": + + param = tree.find('Constitutive/ExtendedDruckerPrager') + yieldParameters = dict.fromkeys(["p_Yield", "q_iniYield", "q_resYield"]) + + phi_i = mechanicalParameters["initialFrictionAngle"] + phi_r = mechanicalParameters["residualFrictionAngle"] + c_i = mechanicalParameters["cohesion"] / 1.0e6 + f_i = atan(6.0 * sin(phi_i / 180 * np.pi) / (3.0 - sin(phi_i / 180 * np.pi))) * 180 / np.pi + f_r = atan(6.0 * sin(phi_r / 180 * np.pi) / (3.0 - sin(phi_r / 180 * np.pi))) * 180 / np.pi + d_i = 6.0 * c_i * cos(phi_i / 180 * np.pi) / (3.0 - sin(phi_i / 180 * np.pi)) + po = d_i / tan(f_i / 180 * np.pi) + d_r = po * tan(f_r / 180 * np.pi) + + k_i = tan(f_i / 180 * np.pi) + p_Yield = np.linspace(0, 50, 100) + q_iniYield = k_i * p_Yield + d_i + k_r = tan(f_r / 180 * np.pi) + q_resYield = k_r * p_Yield + d_r + + yieldParameters["p_Yield"] = p_Yield + yieldParameters["q_iniYield"] = q_iniYield + yieldParameters["q_resYield"] = q_resYield + + elif model.get("material") == "DelftEgg": + + param = tree.find('Constitutive/DelftEgg') + yieldParameters = dict.fromkeys(["p_Yield", "q_iniYield", "p_CSL", "q_CSL"]) + + pc0 = -mechanicalParameters["preConsolidationPressure"] / 1.0e6 + alpha = mechanicalParameters["shapeParameter"] + M = mechanicalParameters["cslSlope"] + + p_CSL = np.linspace(0, pc0 * 2, 500) + q_CSL = M * p_CSL + qlist2 = np.zeros(len(p_CSL)) + for i in range(0, len(p_CSL)): + if alpha**2 * p_CSL[i] * (2.0 * alpha * pc0 / (alpha + 1.0) - + p_CSL[i]) - alpha**2 * (alpha - 1.0) / (alpha + 1.0) * pc0**2 < 0.0: + qlist2[i] = 0.0 + else: + qlist2[i] = M * pow( + alpha**2 * p_CSL[i] * (2.0 * alpha * pc0 / (alpha + 1.0) - p_CSL[i]) - alpha**2 * (alpha - 1.0) / + (alpha + 1.0) * pc0**2, 0.5) + idx = np.argwhere(np.diff(np.sign(q_CSL - qlist2))).flatten() + pc1 = p_CSL[idx[-1]] * 2 + plist_MCC = np.linspace(0, pc1 / 2.0, 500) + qlist_MCC = M * pow(plist_MCC * (pc1 - plist_MCC), 0.5) + plist_DE = np.linspace(pc1 / 2.0, pc0, 5000) + qlist_DE = M * pow( + alpha**2 * plist_DE * (2.0 * alpha * pc0 / (alpha + 1.0) - plist_DE) - alpha**2 * (alpha - 1.0) / + (alpha + 1.0) * pc0**2, 0.5) + p_Yield = np.concatenate((plist_MCC, plist_DE)) + q_iniYield = np.concatenate((qlist_MCC, qlist_DE)) + + yieldParameters["p_Yield"] = p_Yield + yieldParameters["q_iniYield"] = q_iniYield + yieldParameters["p_CSL"] = p_CSL + yieldParameters["q_CSL"] = q_CSL + + elif model.get("material") == "ModifiedCamClay": + + param = tree.find('Constitutive/DelftEgg') + yieldParameters = dict.fromkeys(["p_Yield", "q_iniYield", "p_CSL", "q_CSL"]) + + pc0 = -mechanicalParameters["preConsolidationPressure"] / 1.0e6 + alpha = 1.0 + M = mechanicalParameters["cslSlope"] + + p_CSL = np.linspace(0, pc0 * 2, 500) + q_CSL = M * p_CSL + p_Yield = np.linspace(0, pc0, 500) + q_iniYield = M * pow(p_Yield * (pc0 - p_Yield), 0.5) + + yieldParameters["p_Yield"] = p_Yield + yieldParameters["q_iniYield"] = q_iniYield + yieldParameters["p_CSL"] = p_CSL + yieldParameters["q_CSL"] = q_CSL + + return yieldParameters + + +def getMechanicalParametersFromXML(xmlFilePath): + tree = ElementTree.parse(xmlFilePath) + + model = tree.find('Tasks/TriaxialDriver') + + if model.get("material") == "DruckerPrager": + param = tree.find('Constitutive/DruckerPrager') + + mechanicalParameters = dict.fromkeys(["bulkModulus", "shearModulus", "cohesion", "frictionangle"]) + mechanicalParameters["bulkModulus"] = float(param.get("defaultBulkModulus")) + mechanicalParameters["shearModulus"] = float(param.get("defaultShearModulus")) + mechanicalParameters["cohesion"] = float(param.get("defaultCohesion")) + mechanicalParameters["frictionAngle"] = float(param.get("defaultFrictionAngle")) + + elif model.get("material") == "ExtendedDruckerPrager": + param = tree.find('Constitutive/ExtendedDruckerPrager') + + mechanicalParameters = dict.fromkeys( + ["bulkModulus", "shearModulus", "cohesion", "initialFrictionAngle", "residualFrictionAngle"]) + mechanicalParameters["bulkModulus"] = float(param.get("defaultBulkModulus")) + mechanicalParameters["shearModulus"] = float(param.get("defaultShearModulus")) + mechanicalParameters["cohesion"] = float(param.get("defaultCohesion")) + mechanicalParameters["initialFrictionAngle"] = float(param.get("defaultInitialFrictionAngle")) + mechanicalParameters["residualFrictionAngle"] = float(param.get("defaultResidualFrictionAngle")) + + elif model.get("material") == "Elastic": + param = tree.find('Constitutive/ElasticIsotropic') + + mechanicalParameters = dict.fromkeys(["bulkModulus", "shearModulus"]) + mechanicalParameters["bulkModulus"] = float(param.get("defaultBulkModulus")) + mechanicalParameters["shearModulus"] = float(param.get("defaultShearModulus")) + + elif model.get("material") == "DelftEgg": + param = tree.find('Constitutive/DelftEgg') + + mechanicalParameters = dict.fromkeys( + ["bulkModulus", "shearModulus", "preConsolidationPressure", "shapeParameter", "cslSlope"]) + mechanicalParameters["bulkModulus"] = float(param.get("defaultBulkModulus")) + mechanicalParameters["shearModulus"] = float(param.get("defaultShearModulus")) + mechanicalParameters["preConsolidationPressure"] = float(param.get("defaultPreConsolidationPressure")) + mechanicalParameters["shapeParameter"] = float(param.get("defaultShapeParameter")) + mechanicalParameters["cslSlope"] = float(param.get("defaultCslSlope")) + + elif model.get("material") == "ModifiedCamClay": + param = tree.find('Constitutive/ModifiedCamClay') + + mechanicalParameters = dict.fromkeys( + ["shearModulus", "preConsolidationPressure", "cslSlope", "recompressionIndex"]) + mechanicalParameters["shearModulus"] = float(param.get("defaultShearModulus")) + mechanicalParameters["preConsolidationPressure"] = float(param.get("defaultPreConsolidationPressure")) + mechanicalParameters["cslSlope"] = float(param.get("defaultCslSlope")) + mechanicalParameters["recompressionIndex"] = float(param.get("defaultRecompressionIndex")) + + return mechanicalParameters + + +def main(): + + # Initialize the argument parser + parser = argparse.ArgumentParser(description="Script to generate figure from tutorial.") + + # Add arguments to accept individual file paths + parser.add_argument('--geosDir', help='Path to the GEOS repository ', default='../../../../..') + parser.add_argument('--outputDir', help='Path to output directory', default='.') + + # Parse the command-line arguments + args = parser.parse_args() + + # File path + outputDir = args.outputDir + geosDir = args.geosDir + xmlFilePath = geosDir + "/inputFiles/triaxialDriver/triaxialDriver_ExtendedDruckerPrager_basicExample.xml" + + # Extract info from XML + mechanicalParameters = getMechanicalParametersFromXML(xmlFilePath) + + # Load GEOSX results + path = outputDir + "/simulationResults.txt" + time, ax_strain, ra_strain1, ra_strain2, ax_stress, ra_stress1, ra_stress2, newton_iter, residual_norm = np.loadtxt( + path, skiprows=5, unpack=True) + p_num = -(ax_stress + 2.0 * ra_stress1) / 3.0 / 1.0e6 + q_num = -(ax_stress - ra_stress1) / 1.0e6 + strain_vol = ax_strain + 2.0 * ra_strain1 + + #Visulization + N1 = 1 + fsize = 30 + msize = 12 + lw = 6 + malpha = 0.5 + fig, ax = plt.subplots(3, 1, figsize=(15, 27)) + cmap = plt.get_cmap("tab10") + + ax[0].plot(-ax_strain * 100, + q_num, + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[0].plot(-ra_strain1 * 100, q_num, 'o', color=cmap(0), mec='b', markersize=msize, alpha=malpha) + ax[0].set_xlabel(r'Strain (%)', size=fsize, weight="bold") + ax[0].set_ylabel(r'Deviatoric Stress (MPa)', size=fsize, weight="bold") + ax[0].legend(loc='lower right', fontsize=fsize) + ax[0].xaxis.set_tick_params(labelsize=fsize) + ax[0].yaxis.set_tick_params(labelsize=fsize) + + ax[1].plot(p_num, q_num, 'o', color=cmap(0), mec='b', markersize=msize, alpha=malpha, label='Triaxial Driver') + # Yield surface for plastic models + tree = ElementTree.parse(xmlFilePath) + model = tree.find('Tasks/TriaxialDriver') + if model.get("material") == "DruckerPrager": + yieldParameters = yieldSurface(xmlFilePath, mechanicalParameters) + p_Yield = yieldParameters["p_Yield"] + q_iniYield = yieldParameters["q_iniYield"] + ax[1].plot(p_Yield, q_iniYield, lw=lw, alpha=0.8, color='k', linestyle='--', label='Initial Yield Surface') + elif model.get("material") == "ExtendedDruckerPrager": + yieldParameters = yieldSurface(xmlFilePath, mechanicalParameters) + p_Yield = yieldParameters["p_Yield"] + q_iniYield = yieldParameters["q_iniYield"] + q_resYield = yieldParameters["q_resYield"] + ax[1].plot(p_Yield, q_iniYield, lw=lw, alpha=0.8, color='k', linestyle='--', label='Initial Yield Surface') + ax[1].plot(p_Yield, + q_resYield, + lw=lw, + alpha=0.8, + color='orange', + linestyle='--', + label='Residual Yield Surface') + elif model.get("material") == "DelftEgg": + yieldParameters = yieldSurface(xmlFilePath, mechanicalParameters) + p_Yield = yieldParameters["p_Yield"] + q_iniYield = yieldParameters["q_iniYield"] + p_CSL = yieldParameters["p_CSL"] + q_CSL = yieldParameters["q_CSL"] + ax[1].plot(p_Yield, q_iniYield, lw=lw, alpha=0.8, color='k', linestyle='--', label='Initial Yield Surface') + ax[1].plot(p_CSL, q_CSL, lw=lw, alpha=0.8, color='orange', linestyle='--', label='Critical State Line') + elif model.get("material") == "ModifiedCamClay": + yieldParameters = yieldSurface(xmlFilePath, mechanicalParameters) + p_Yield = yieldParameters["p_Yield"] + q_iniYield = yieldParameters["q_iniYield"] + p_CSL = yieldParameters["p_CSL"] + q_CSL = yieldParameters["q_CSL"] + ax[1].plot(p_Yield, q_iniYield, lw=lw, alpha=0.8, color='k', linestyle='--', label='Initial Yield Surface') + ax[1].plot(p_CSL, q_CSL, lw=lw, alpha=0.8, color='orange', linestyle='--', label='Critical State Line') + + ax[1].set_xlabel(r'p (MPa)', size=fsize, weight="bold") + ax[1].set_ylabel(r'q (MPa)', size=fsize, weight="bold") + ax[1].legend(loc='lower right', fontsize=fsize) + ax[1].xaxis.set_tick_params(labelsize=fsize) + ax[1].yaxis.set_tick_params(labelsize=fsize) + + ax[2].plot(-ax_strain * 100, + -strain_vol * 100, + 'o', + color=cmap(0), + mec='b', + markersize=msize, + alpha=malpha, + label='Triaxial Driver') + ax[2].set_xlabel(r'Axial Strain (%)', size=fsize, weight="bold") + ax[2].set_ylabel(r'Volumetric Strain (%)', size=fsize, weight="bold") + ax[2].legend(loc='lower right', fontsize=fsize) + ax[2].xaxis.set_tick_params(labelsize=fsize) + ax[2].yaxis.set_tick_params(labelsize=fsize) + + plt.subplots_adjust(left=0.2, bottom=0.1, right=0.9, top=0.9, wspace=0.4, hspace=0.4) + + plt.show() + + +if __name__ == "__main__": + main()