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()