diff --git a/src/coreComponents/constitutive/capillaryPressure/VanGenuchtenCapillaryPressure.cpp b/src/coreComponents/constitutive/capillaryPressure/VanGenuchtenCapillaryPressure.cpp
index 9a94764de5b..9fe34af0649 100644
--- a/src/coreComponents/constitutive/capillaryPressure/VanGenuchtenCapillaryPressure.cpp
+++ b/src/coreComponents/constitutive/capillaryPressure/VanGenuchtenCapillaryPressure.cpp
@@ -93,7 +93,7 @@ void VanGenuchtenCapillaryPressure::postProcessInput()
if( m_phaseTypes[ip] != CapillaryPressureBase::REFERENCE_PHASE )
{
- GEOSX_THROW_IF_LT_MSG( m_phaseCapPressureExponentInv[ip], 0.0,
+ GEOSX_THROW_IF_LE_MSG( m_phaseCapPressureExponentInv[ip], 0.0,
errorMsg( viewKeyStruct::phaseCapPressureExponentInvString() ),
InputError );
GEOSX_THROW_IF_GT_MSG( m_phaseCapPressureExponentInv[ip], 1.0,
diff --git a/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseBaseExtrinsicData.hpp b/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseBaseExtrinsicData.hpp
index 3ef09f864d4..bf9518930b4 100644
--- a/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseBaseExtrinsicData.hpp
+++ b/src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseBaseExtrinsicData.hpp
@@ -47,6 +47,14 @@ EXTRINSIC_MESH_DATA_TRAIT( temperature,
WRITE_AND_READ,
"Temperature" );
+EXTRINSIC_MESH_DATA_TRAIT( deltaTemperature,
+ "deltaTemperature",
+ array1d< real64 >,
+ 0,
+ NOPLOT,
+ NO_WRITE,
+ "Accumulated temperature updates" );
+
EXTRINSIC_MESH_DATA_TRAIT( globalCompDensity,
"globalCompDensity",
array2dLayoutComp,
@@ -95,6 +103,14 @@ EXTRINSIC_MESH_DATA_TRAIT( dPhaseVolumeFraction_dPressure,
NO_WRITE,
"Derivative of phase volume fraction with respect to pressure" );
+EXTRINSIC_MESH_DATA_TRAIT( dPhaseVolumeFraction_dTemperature,
+ "dPhaseVolumeFraction_dTemperature",
+ array2dLayoutPhase,
+ 0,
+ NOPLOT,
+ NO_WRITE,
+ "Derivative of phase volume fraction with respect to temperature" );
+
EXTRINSIC_MESH_DATA_TRAIT( dPhaseVolumeFraction_dGlobalCompDensity,
"dPhaseVolumeFraction_dGlobalCompDensity",
array3dLayoutPhase_dC,
@@ -119,6 +135,14 @@ EXTRINSIC_MESH_DATA_TRAIT( dPhaseMobility_dPressure,
NO_WRITE,
"Derivative of phase mobility with respect to pressure" );
+EXTRINSIC_MESH_DATA_TRAIT( dPhaseMobility_dTemperature,
+ "dPhaseMobility_dTemperature",
+ array2dLayoutPhase,
+ 0,
+ NOPLOT,
+ NO_WRITE,
+ "Derivative of phase mobility with respect to temperature" );
+
EXTRINSIC_MESH_DATA_TRAIT( dPhaseMobility_dGlobalCompDensity,
"dPhaseMobility_dGlobalCompDensity",
array3dLayoutPhase_dC,
diff --git a/src/coreComponents/schema/docs/AcousticSEM_other.rst b/src/coreComponents/schema/docs/AcousticSEM_other.rst
index edd823f6468..71642d4c7ae 100644
--- a/src/coreComponents/schema/docs/AcousticSEM_other.rst
+++ b/src/coreComponents/schema/docs/AcousticSEM_other.rst
@@ -1,20 +1,20 @@
-========================= =================================================================================================================================================== =======================================================================
-Name Type Description
-========================= =================================================================================================================================================== =======================================================================
-indexSeismoTrace integer Count for output pressure at receivers
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-pressureNp1AtReceivers real64_array2d Pressure value at each receiver for each timestep
-receiverIsLocal integer_array Flag that indicates whether the receiver is local to this MPI rank
-receiverNodeIds integer_array2d Indices of the nodes (in the right order) for each receiver point
-sourceConstants real64_array2d Constant part of the receiver for the nodes listed in m_receiverNodeIds
-sourceIsLocal integer_array Flag that indicates whether the source is local to this MPI rank
-sourceNodeIds integer_array2d Indices of the nodes (in the right order) for each source point
-sourceValue real64_array2d Source Value of the sources
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== =======================================================================
+========================= =============================================================================================================================================================================================================================================================================================== =======================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== =======================================================================
+indexSeismoTrace integer Count for output pressure at receivers
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+pressureNp1AtReceivers real64_array2d Pressure value at each receiver for each timestep
+receiverIsLocal integer_array Flag that indicates whether the receiver is local to this MPI rank
+receiverNodeIds integer_array2d Indices of the nodes (in the right order) for each receiver point
+sourceConstants real64_array2d Constant part of the receiver for the nodes listed in m_receiverNodeIds
+sourceIsLocal integer_array Flag that indicates whether the source is local to this MPI rank
+sourceNodeIds integer_array2d Indices of the nodes (in the right order) for each source point
+sourceValue real64_array2d Source Value of the sources
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== =======================================================================
diff --git a/src/coreComponents/schema/docs/CompositionalMultiphaseFVM_other.rst b/src/coreComponents/schema/docs/CompositionalMultiphaseFVM_other.rst
index 5b4f62fa9a3..c874c188464 100644
--- a/src/coreComponents/schema/docs/CompositionalMultiphaseFVM_other.rst
+++ b/src/coreComponents/schema/docs/CompositionalMultiphaseFVM_other.rst
@@ -1,12 +1,12 @@
-========================= =================================================================================================================================================== ================================================================
-Name Type Description
-========================= =================================================================================================================================================== ================================================================
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
diff --git a/src/coreComponents/schema/docs/CompositionalMultiphaseHybridFVM_other.rst b/src/coreComponents/schema/docs/CompositionalMultiphaseHybridFVM_other.rst
index 8e2f2eb6a85..bf32e9bac59 100644
--- a/src/coreComponents/schema/docs/CompositionalMultiphaseHybridFVM_other.rst
+++ b/src/coreComponents/schema/docs/CompositionalMultiphaseHybridFVM_other.rst
@@ -1,14 +1,14 @@
-========================= =================================================================================================================================================== ================================ ================================================================
-Name Type Registered On Description
-========================= =================================================================================================================================================== ================================ ================================================================
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-deltaFacePressure real64_array :ref:`DATASTRUCTURE_FaceManager` Accumulated face pressure updates
-mimGravityCoefficient real64_array :ref:`DATASTRUCTURE_FaceManager` Mimetic gravity coefficient
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ================================ ================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ================================ ================================================================
+Name Type Registered On Description
+========================= =============================================================================================================================================================================================================================================================================================== ================================ ================================================================
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+deltaFacePressure real64_array :ref:`DATASTRUCTURE_FaceManager` Accumulated face pressure updates
+mimGravityCoefficient real64_array :ref:`DATASTRUCTURE_FaceManager` Mimetic gravity coefficient
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ================================ ================================================================
diff --git a/src/coreComponents/schema/docs/CompositionalMultiphaseReservoir_other.rst b/src/coreComponents/schema/docs/CompositionalMultiphaseReservoir_other.rst
index 7acea5a6dbf..aa08bcefbb0 100644
--- a/src/coreComponents/schema/docs/CompositionalMultiphaseReservoir_other.rst
+++ b/src/coreComponents/schema/docs/CompositionalMultiphaseReservoir_other.rst
@@ -1,13 +1,13 @@
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
-Name Type Description
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
-discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
diff --git a/src/coreComponents/schema/docs/CompositionalMultiphaseWell_other.rst b/src/coreComponents/schema/docs/CompositionalMultiphaseWell_other.rst
index 48a09333642..b3804961a57 100644
--- a/src/coreComponents/schema/docs/CompositionalMultiphaseWell_other.rst
+++ b/src/coreComponents/schema/docs/CompositionalMultiphaseWell_other.rst
@@ -1,14 +1,14 @@
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
-Name Type Description
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
-discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-WellControls node :ref:`DATASTRUCTURE_WellControls`
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+WellControls node :ref:`DATASTRUCTURE_WellControls`
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
diff --git a/src/coreComponents/schema/docs/EmbeddedSurfaceGenerator_other.rst b/src/coreComponents/schema/docs/EmbeddedSurfaceGenerator_other.rst
index b53cb9d3cce..8bd71bf6b41 100644
--- a/src/coreComponents/schema/docs/EmbeddedSurfaceGenerator_other.rst
+++ b/src/coreComponents/schema/docs/EmbeddedSurfaceGenerator_other.rst
@@ -1,14 +1,14 @@
-========================= =================================================================================================================================================== ================================================ ========================================================================================================================================================================================================================================================================================================================
-Name Type Registered On Description
-========================= =================================================================================================================================================== ================================================ ========================================================================================================================================================================================================================================================================================================================
-discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-parentEdgeIndex integer_array :ref:`DATASTRUCTURE_embeddedSurfacesNodeManager` Index of parent edge within the mesh object it is registered on.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ================================================ ========================================================================================================================================================================================================================================================================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ================================================ ========================================================================================================================================================================================================================================================================================================================
+Name Type Registered On Description
+========================= =============================================================================================================================================================================================================================================================================================== ================================================ ========================================================================================================================================================================================================================================================================================================================
+discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+parentEdgeIndex integer_array :ref:`DATASTRUCTURE_embeddedSurfacesNodeManager` Index of parent edge within the mesh object it is registered on.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ================================================ ========================================================================================================================================================================================================================================================================================================================
diff --git a/src/coreComponents/schema/docs/FlowProppantTransport_other.rst b/src/coreComponents/schema/docs/FlowProppantTransport_other.rst
index 7acea5a6dbf..aa08bcefbb0 100644
--- a/src/coreComponents/schema/docs/FlowProppantTransport_other.rst
+++ b/src/coreComponents/schema/docs/FlowProppantTransport_other.rst
@@ -1,13 +1,13 @@
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
-Name Type Description
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
-discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
diff --git a/src/coreComponents/schema/docs/Hydrofracture_other.rst b/src/coreComponents/schema/docs/Hydrofracture_other.rst
index 5b4f62fa9a3..c874c188464 100644
--- a/src/coreComponents/schema/docs/Hydrofracture_other.rst
+++ b/src/coreComponents/schema/docs/Hydrofracture_other.rst
@@ -1,12 +1,12 @@
-========================= =================================================================================================================================================== ================================================================
-Name Type Description
-========================= =================================================================================================================================================== ================================================================
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
diff --git a/src/coreComponents/schema/docs/LagrangianContact_other.rst b/src/coreComponents/schema/docs/LagrangianContact_other.rst
index 7acea5a6dbf..aa08bcefbb0 100644
--- a/src/coreComponents/schema/docs/LagrangianContact_other.rst
+++ b/src/coreComponents/schema/docs/LagrangianContact_other.rst
@@ -1,13 +1,13 @@
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
-Name Type Description
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
-discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
diff --git a/src/coreComponents/schema/docs/LaplaceFEM_other.rst b/src/coreComponents/schema/docs/LaplaceFEM_other.rst
index 5b4f62fa9a3..c874c188464 100644
--- a/src/coreComponents/schema/docs/LaplaceFEM_other.rst
+++ b/src/coreComponents/schema/docs/LaplaceFEM_other.rst
@@ -1,12 +1,12 @@
-========================= =================================================================================================================================================== ================================================================
-Name Type Description
-========================= =================================================================================================================================================== ================================================================
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
diff --git a/src/coreComponents/schema/docs/MultiphasePoromechanics_other.rst b/src/coreComponents/schema/docs/MultiphasePoromechanics_other.rst
index 5b4f62fa9a3..c874c188464 100644
--- a/src/coreComponents/schema/docs/MultiphasePoromechanics_other.rst
+++ b/src/coreComponents/schema/docs/MultiphasePoromechanics_other.rst
@@ -1,12 +1,12 @@
-========================= =================================================================================================================================================== ================================================================
-Name Type Description
-========================= =================================================================================================================================================== ================================================================
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
diff --git a/src/coreComponents/schema/docs/PhaseFieldDamageFEM_other.rst b/src/coreComponents/schema/docs/PhaseFieldDamageFEM_other.rst
index 5b4f62fa9a3..c874c188464 100644
--- a/src/coreComponents/schema/docs/PhaseFieldDamageFEM_other.rst
+++ b/src/coreComponents/schema/docs/PhaseFieldDamageFEM_other.rst
@@ -1,12 +1,12 @@
-========================= =================================================================================================================================================== ================================================================
-Name Type Description
-========================= =================================================================================================================================================== ================================================================
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
diff --git a/src/coreComponents/schema/docs/PhaseFieldFracture_other.rst b/src/coreComponents/schema/docs/PhaseFieldFracture_other.rst
index 5b4f62fa9a3..c874c188464 100644
--- a/src/coreComponents/schema/docs/PhaseFieldFracture_other.rst
+++ b/src/coreComponents/schema/docs/PhaseFieldFracture_other.rst
@@ -1,12 +1,12 @@
-========================= =================================================================================================================================================== ================================================================
-Name Type Description
-========================= =================================================================================================================================================== ================================================================
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
diff --git a/src/coreComponents/schema/docs/ProppantTransport_other.rst b/src/coreComponents/schema/docs/ProppantTransport_other.rst
index 5b4f62fa9a3..c874c188464 100644
--- a/src/coreComponents/schema/docs/ProppantTransport_other.rst
+++ b/src/coreComponents/schema/docs/ProppantTransport_other.rst
@@ -1,12 +1,12 @@
-========================= =================================================================================================================================================== ================================================================
-Name Type Description
-========================= =================================================================================================================================================== ================================================================
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
diff --git a/src/coreComponents/schema/docs/SinglePhaseFVM_other.rst b/src/coreComponents/schema/docs/SinglePhaseFVM_other.rst
index 5b4f62fa9a3..c874c188464 100644
--- a/src/coreComponents/schema/docs/SinglePhaseFVM_other.rst
+++ b/src/coreComponents/schema/docs/SinglePhaseFVM_other.rst
@@ -1,12 +1,12 @@
-========================= =================================================================================================================================================== ================================================================
-Name Type Description
-========================= =================================================================================================================================================== ================================================================
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
diff --git a/src/coreComponents/schema/docs/SinglePhaseHybridFVM_other.rst b/src/coreComponents/schema/docs/SinglePhaseHybridFVM_other.rst
index 56309599fa0..7cd3eeef08a 100644
--- a/src/coreComponents/schema/docs/SinglePhaseHybridFVM_other.rst
+++ b/src/coreComponents/schema/docs/SinglePhaseHybridFVM_other.rst
@@ -1,13 +1,13 @@
-========================= =================================================================================================================================================== ================================ ================================================================
-Name Type Registered On Description
-========================= =================================================================================================================================================== ================================ ================================================================
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-deltaFacePressure real64_array :ref:`DATASTRUCTURE_FaceManager` Accumulated face pressure updates
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ================================ ================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ================================ ================================================================
+Name Type Registered On Description
+========================= =============================================================================================================================================================================================================================================================================================== ================================ ================================================================
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+deltaFacePressure real64_array :ref:`DATASTRUCTURE_FaceManager` Accumulated face pressure updates
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ================================ ================================================================
diff --git a/src/coreComponents/schema/docs/SinglePhasePoromechanicsEmbeddedFractures_other.rst b/src/coreComponents/schema/docs/SinglePhasePoromechanicsEmbeddedFractures_other.rst
index 7acea5a6dbf..aa08bcefbb0 100644
--- a/src/coreComponents/schema/docs/SinglePhasePoromechanicsEmbeddedFractures_other.rst
+++ b/src/coreComponents/schema/docs/SinglePhasePoromechanicsEmbeddedFractures_other.rst
@@ -1,13 +1,13 @@
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
-Name Type Description
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
-discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
diff --git a/src/coreComponents/schema/docs/SinglePhasePoromechanics_other.rst b/src/coreComponents/schema/docs/SinglePhasePoromechanics_other.rst
index 5b4f62fa9a3..c874c188464 100644
--- a/src/coreComponents/schema/docs/SinglePhasePoromechanics_other.rst
+++ b/src/coreComponents/schema/docs/SinglePhasePoromechanics_other.rst
@@ -1,12 +1,12 @@
-========================= =================================================================================================================================================== ================================================================
-Name Type Description
-========================= =================================================================================================================================================== ================================================================
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
diff --git a/src/coreComponents/schema/docs/SinglePhaseProppantFVM_other.rst b/src/coreComponents/schema/docs/SinglePhaseProppantFVM_other.rst
index 5b4f62fa9a3..c874c188464 100644
--- a/src/coreComponents/schema/docs/SinglePhaseProppantFVM_other.rst
+++ b/src/coreComponents/schema/docs/SinglePhaseProppantFVM_other.rst
@@ -1,12 +1,12 @@
-========================= =================================================================================================================================================== ================================================================
-Name Type Description
-========================= =================================================================================================================================================== ================================================================
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
diff --git a/src/coreComponents/schema/docs/SinglePhaseReservoir_other.rst b/src/coreComponents/schema/docs/SinglePhaseReservoir_other.rst
index 7acea5a6dbf..aa08bcefbb0 100644
--- a/src/coreComponents/schema/docs/SinglePhaseReservoir_other.rst
+++ b/src/coreComponents/schema/docs/SinglePhaseReservoir_other.rst
@@ -1,13 +1,13 @@
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
-Name Type Description
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
-discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
diff --git a/src/coreComponents/schema/docs/SinglePhaseWell_other.rst b/src/coreComponents/schema/docs/SinglePhaseWell_other.rst
index 48a09333642..b3804961a57 100644
--- a/src/coreComponents/schema/docs/SinglePhaseWell_other.rst
+++ b/src/coreComponents/schema/docs/SinglePhaseWell_other.rst
@@ -1,14 +1,14 @@
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
-Name Type Description
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
-discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-WellControls node :ref:`DATASTRUCTURE_WellControls`
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+WellControls node :ref:`DATASTRUCTURE_WellControls`
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
diff --git a/src/coreComponents/schema/docs/SolidMechanicsEmbeddedFractures_other.rst b/src/coreComponents/schema/docs/SolidMechanicsEmbeddedFractures_other.rst
index 7acea5a6dbf..aa08bcefbb0 100644
--- a/src/coreComponents/schema/docs/SolidMechanicsEmbeddedFractures_other.rst
+++ b/src/coreComponents/schema/docs/SolidMechanicsEmbeddedFractures_other.rst
@@ -1,13 +1,13 @@
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
-Name Type Description
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
-discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
diff --git a/src/coreComponents/schema/docs/SolidMechanicsLagrangianSSLE_other.rst b/src/coreComponents/schema/docs/SolidMechanicsLagrangianSSLE_other.rst
index 8ab18aa4617..d6506d6fedf 100644
--- a/src/coreComponents/schema/docs/SolidMechanicsLagrangianSSLE_other.rst
+++ b/src/coreComponents/schema/docs/SolidMechanicsLagrangianSSLE_other.rst
@@ -1,13 +1,13 @@
-========================= =================================================================================================================================================== ================================================================
-Name Type Description
-========================= =================================================================================================================================================== ================================================================
-maxForce real64 The maximum force contribution in the problem domain.
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+maxForce real64 The maximum force contribution in the problem domain.
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
diff --git a/src/coreComponents/schema/docs/SolidMechanics_LagrangianFEM_other.rst b/src/coreComponents/schema/docs/SolidMechanics_LagrangianFEM_other.rst
index 8ab18aa4617..d6506d6fedf 100644
--- a/src/coreComponents/schema/docs/SolidMechanics_LagrangianFEM_other.rst
+++ b/src/coreComponents/schema/docs/SolidMechanics_LagrangianFEM_other.rst
@@ -1,13 +1,13 @@
-========================= =================================================================================================================================================== ================================================================
-Name Type Description
-========================= =================================================================================================================================================== ================================================================
-maxForce real64 The maximum force contribution in the problem domain.
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
+maxForce real64 The maximum force contribution in the problem domain.
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ================================================================
diff --git a/src/coreComponents/schema/docs/SurfaceGenerator_other.rst b/src/coreComponents/schema/docs/SurfaceGenerator_other.rst
index 96cfc6ecec7..37b9b97583d 100644
--- a/src/coreComponents/schema/docs/SurfaceGenerator_other.rst
+++ b/src/coreComponents/schema/docs/SurfaceGenerator_other.rst
@@ -1,18 +1,18 @@
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
-Name Type Description
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
-discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
-failCriterion integer (no description available)
-maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
-meshTargets geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
-tipEdges LvArray_SortedArray< int, int, LvArray_ChaiBuffer > Set containing all the tip edges
-tipFaces LvArray_SortedArray< int, int, LvArray_ChaiBuffer > Set containing all the tip faces
-tipNodes LvArray_SortedArray< int, int, LvArray_ChaiBuffer > Set containing all the nodes at the fracture tip
-trailingFaces LvArray_SortedArray< int, int, LvArray_ChaiBuffer > Set containing all the trailing faces
-LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
-NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
-========================= =================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+Name Type Description
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
+discretization string Name of discretization object (defined in the :ref:`NumericalMethodsManager`) to use for this solver. For instance, if this is a Finite Element Solver, the name of a :ref:`FiniteElement` should be specified. If this is a Finite Volume Method, the name of a :ref:`FiniteVolume` discretization should be specified.
+failCriterion integer (no description available)
+maxStableDt real64 Value of the Maximum Stable Timestep for this solver.
+meshTargets geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > MeshBody/Region combinations that the solver will be applied to.
+tipEdges LvArray_SortedArray< int, int, LvArray_ChaiBuffer > Set containing all the tip edges
+tipFaces LvArray_SortedArray< int, int, LvArray_ChaiBuffer > Set containing all the tip faces
+tipNodes LvArray_SortedArray< int, int, LvArray_ChaiBuffer > Set containing all the nodes at the fracture tip
+trailingFaces LvArray_SortedArray< int, int, LvArray_ChaiBuffer > Set containing all the trailing faces
+LinearSolverParameters node :ref:`DATASTRUCTURE_LinearSolverParameters`
+NonlinearSolverParameters node :ref:`DATASTRUCTURE_NonlinearSolverParameters`
+========================= =============================================================================================================================================================================================================================================================================================== ========================================================================================================================================================================================================================================================================================================================
diff --git a/src/coreComponents/schema/docs/TwoPointFluxApproximation_other.rst b/src/coreComponents/schema/docs/TwoPointFluxApproximation_other.rst
index 825f9d230d6..b1b2c45ed80 100644
--- a/src/coreComponents/schema/docs/TwoPointFluxApproximation_other.rst
+++ b/src/coreComponents/schema/docs/TwoPointFluxApproximation_other.rst
@@ -1,15 +1,15 @@
-======================== =================================================================================================================================================== ========================================
-Name Type Description
-======================== =================================================================================================================================================== ========================================
-cellStencil geosx_CellElementStencilTPFA (no description available)
-coefficientName string Name of coefficient field
-edfmStencil geosx_EmbeddedSurfaceToCellStencil (no description available)
-faceElementToCellStencil geosx_FaceElementToCellStencil (no description available)
-fieldName string Name of primary solution field
-fractureStencil geosx_SurfaceElementStencil (no description available)
-targetRegions geosx_mapBase< std_string, LvArray_Array< std_string, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > List of regions to build the stencil for
-======================== =================================================================================================================================================== ========================================
+======================== =============================================================================================================================================================================================================================================================================================== ========================================
+Name Type Description
+======================== =============================================================================================================================================================================================================================================================================================== ========================================
+cellStencil geosx_CellElementStencilTPFA (no description available)
+coefficientName string Name of coefficient field
+edfmStencil geosx_EmbeddedSurfaceToCellStencil (no description available)
+faceElementToCellStencil geosx_FaceElementToCellStencil (no description available)
+fieldName string Name of primary solution field
+fractureStencil geosx_SurfaceElementStencil (no description available)
+targetRegions geosx_mapBase< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, LvArray_Array< std___cxx11_basic_string< char, std_char_traits< char >, std_allocator< char > >, 1, camp_int_seq< long, 0l >, int, LvArray_ChaiBuffer >, std_integral_constant< bool, true > > List of regions to build the stencil for
+======================== =============================================================================================================================================================================================================================================================================================== ========================================
diff --git a/src/coreComponents/schema/schema.xsd.other b/src/coreComponents/schema/schema.xsd.other
index c03354add08..67ed8be6142 100644
--- a/src/coreComponents/schema/schema.xsd.other
+++ b/src/coreComponents/schema/schema.xsd.other
@@ -412,7 +412,7 @@
-
+
@@ -480,7 +480,7 @@
-
+
@@ -504,7 +504,7 @@
-
+
@@ -514,7 +514,7 @@
-
+
@@ -526,7 +526,7 @@
-
+
@@ -539,7 +539,7 @@
-
+
@@ -552,7 +552,7 @@
-
+
@@ -564,7 +564,7 @@
-
+
@@ -574,7 +574,7 @@
-
+
@@ -586,7 +586,7 @@
-
+
@@ -596,7 +596,7 @@
-
+
@@ -606,7 +606,7 @@
-
+
@@ -616,7 +616,7 @@
-
+
@@ -626,7 +626,7 @@
-
+
@@ -636,7 +636,7 @@
-
+
@@ -646,7 +646,7 @@
-
+
@@ -656,7 +656,7 @@
-
+
@@ -666,7 +666,7 @@
-
+
@@ -678,7 +678,7 @@
-
+
@@ -688,7 +688,7 @@
-
+
@@ -700,7 +700,7 @@
-
+
@@ -713,7 +713,7 @@
-
+
@@ -725,7 +725,7 @@
-
+
@@ -737,7 +737,7 @@
-
+
@@ -749,7 +749,7 @@
-
+
@@ -763,7 +763,7 @@
-
+
diff --git a/src/coreComponents/unitTests/fluidFlowTests/testCompFlowUtils.hpp b/src/coreComponents/unitTests/fluidFlowTests/testCompFlowUtils.hpp
index 340aff5f658..52dcf0665f0 100644
--- a/src/coreComponents/unitTests/fluidFlowTests/testCompFlowUtils.hpp
+++ b/src/coreComponents/unitTests/fluidFlowTests/testCompFlowUtils.hpp
@@ -17,9 +17,13 @@
#include "codingUtilities/UnitTestUtilities.hpp"
#include "constitutive/ConstitutiveManager.hpp"
+#include "constitutive/fluid/MultiFluidBase.hpp"
#include "mesh/MeshManager.hpp"
#include "mainInterface/ProblemManager.hpp"
#include "physicsSolvers/fluidFlow/CompositionalMultiphaseBase.hpp"
+#include "physicsSolvers/fluidFlow/CompositionalMultiphaseBaseExtrinsicData.hpp"
+#include "physicsSolvers/fluidFlow/CompositionalMultiphaseFVM.hpp"
+#include "physicsSolvers/fluidFlow/FlowSolverBaseExtrinsicData.hpp"
namespace geosx
{
@@ -27,6 +31,9 @@ namespace geosx
namespace testing
{
+using namespace geosx::constitutive;
+using namespace geosx::constitutive::multifluid;
+
void checkDerivative( real64 const valueEps,
real64 const value,
real64 const deriv,
@@ -212,6 +219,576 @@ void setupProblemFromXML( ProblemManager & problemManager, char const * const xm
problemManager.applyInitialConditions();
}
+void testCompositionNumericalDerivatives( CompositionalMultiphaseFVM & solver,
+ DomainPartition & domain,
+ real64 const perturbParameter,
+ real64 const relTol )
+{
+ integer const numComp = solver.numFluidComponents();
+
+ solver.forMeshTargets( domain.getMeshBodies(),
+ [&]( string const,
+ MeshLevel & mesh,
+ arrayView1d< string const > const & regionNames )
+ {
+ ElementRegionManager & elementRegionManager = mesh.getElemManager();
+ elementRegionManager.forElementSubRegions( regionNames,
+ [&]( localIndex const,
+ ElementSubRegionBase & subRegion )
+ {
+ SCOPED_TRACE( subRegion.getParent().getParent().getName() + "/" + subRegion.getName() );
+
+ string const & fluidName = subRegion.getReference< string >( CompositionalMultiphaseBase::viewKeyStruct::fluidNamesString() );
+ MultiFluidBase const & fluid = subRegion.getConstitutiveModel< MultiFluidBase >( fluidName );
+ arrayView1d< string const > const & components = fluid.componentNames();
+
+ arrayView2d< real64, compflow::USD_COMP > const compDens =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::globalCompDensity >();
+
+ arrayView2d< real64, compflow::USD_COMP > const dCompDens =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::deltaGlobalCompDensity >();
+
+ arrayView2d< real64, compflow::USD_COMP > const compFrac =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::globalCompFraction >();
+
+ arrayView3d< real64, compflow::USD_COMP_DC > const dCompFrac_dCompDens =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::dGlobalCompFraction_dGlobalCompDensity >();
+
+ // reset the solver state to zero out variable updates
+ solver.resetStateToBeginningOfStep( domain );
+
+ // make a copy of unperturbed values of component fractions
+ array2d< real64, compflow::LAYOUT_COMP > compFracOrig( subRegion.size(), numComp );
+ compFracOrig.setValues< serialPolicy >( compFrac );
+
+ // update component density and check derivatives
+ for( integer jc = 0; jc < numComp; ++jc )
+ {
+ // reset the solver state to zero out variable updates (resetting the whole domain is overkill...)
+ solver.resetStateToBeginningOfStep( domain );
+
+ // perturb a single component density in each cell
+ forAll< serialPolicy >( subRegion.size(), [=] ( localIndex const ei )
+ {
+ real64 const dRho = perturbParameter * ( compDens[ei][jc] + perturbParameter );
+ dCompDens[ei][jc] = dRho;
+ } );
+
+ // recompute component fractions
+ solver.updateComponentFraction( subRegion );
+
+ // check values in each cell
+ forAll< serialPolicy >( subRegion.size(), [=] ( localIndex const ei )
+ {
+ SCOPED_TRACE( "Element " + std::to_string( ei ) );
+
+ auto dZ_dRho = invertLayout( dCompFrac_dCompDens[ei].toSliceConst(), numComp, numComp );
+ string var = "compDens[" + components[jc] + "]";
+
+ checkDerivative( compFrac[ei].toSliceConst(),
+ compFracOrig[ei].toSliceConst(),
+ dZ_dRho[jc].toSliceConst(),
+ dCompDens[ei][jc],
+ relTol,
+ "compFrac",
+ var,
+ components );
+ } );
+ }
+ } );
+ } );
+}
+
+void testPhaseVolumeFractionNumericalDerivatives( CompositionalMultiphaseFVM & solver,
+ DomainPartition & domain,
+ bool const isThermal,
+ real64 const perturbParameter,
+ real64 const relTol )
+{
+ integer const numComp = solver.numFluidComponents();
+ integer const numPhase = solver.numFluidPhases();
+
+ solver.forMeshTargets( domain.getMeshBodies(),
+ [&]( string const,
+ MeshLevel & mesh,
+ arrayView1d< string const > const & regionNames )
+ {
+ ElementRegionManager & elementRegionManager = mesh.getElemManager();
+ elementRegionManager.forElementSubRegions( regionNames,
+ [&]( localIndex const,
+ ElementSubRegionBase & subRegion )
+ {
+ SCOPED_TRACE( subRegion.getParent().getParent().getName() + "/" + subRegion.getName() );
+
+ string const & fluidName = subRegion.getReference< string >( CompositionalMultiphaseFVM::viewKeyStruct::fluidNamesString() );
+ MultiFluidBase const & fluid = subRegion.getConstitutiveModel< MultiFluidBase >( fluidName );
+ arrayView1d< string const > const & components = fluid.componentNames();
+ arrayView1d< string const > const & phases = fluid.phaseNames();
+
+ arrayView1d< real64 > const pres =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::pressure >();
+
+ arrayView1d< real64 > const dPres =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::deltaPressure >();
+
+ arrayView2d< real64, compflow::USD_COMP > const compDens =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::globalCompDensity >();
+
+ arrayView2d< real64, compflow::USD_COMP > const dCompDens =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::deltaGlobalCompDensity >();
+
+ arrayView2d< real64, compflow::USD_PHASE > const phaseVolFrac =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::phaseVolumeFraction >();
+
+ arrayView2d< real64, compflow::USD_PHASE > const dPhaseVolFrac_dPres =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::dPhaseVolumeFraction_dPressure >();
+
+ arrayView3d< real64, compflow::USD_PHASE_DC > const dPhaseVolFrac_dCompDens =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::dPhaseVolumeFraction_dGlobalCompDensity >();
+
+ // reset the solver state to zero out variable updates
+ solver.resetStateToBeginningOfStep( domain );
+
+ // make a copy of unperturbed values of component fractions
+ array2d< real64, compflow::LAYOUT_PHASE > phaseVolFracOrig( subRegion.size(), numPhase );
+ phaseVolFracOrig.setValues< serialPolicy >( phaseVolFrac );
+
+ // Step 1: update pressure and check derivatives
+
+ {
+ // perturb pressure in each cell
+ forAll< serialPolicy >( subRegion.size(), [=] ( localIndex const ei )
+ {
+ real64 const dP = perturbParameter * ( pres[ei] + perturbParameter );
+ dPres[ei] = dP;
+ } );
+
+ // recompute component fractions
+ solver.updateFluidState( subRegion );
+
+ // check values in each cell
+ forAll< serialPolicy >( subRegion.size(), [=, &phaseVolFracOrig] ( localIndex const ei )
+ {
+ SCOPED_TRACE( "Element " + std::to_string( ei ) );
+
+ checkDerivative( phaseVolFrac[ei].toSliceConst(),
+ phaseVolFracOrig[ei].toSliceConst(),
+ dPhaseVolFrac_dPres[ei].toSliceConst(),
+ dPres[ei],
+ relTol,
+ "phaseVolFrac",
+ "Pres",
+ phases );
+ } );
+ }
+
+ // Step 2: update component density and check derivatives
+
+ for( integer jc = 0; jc < numComp; ++jc )
+ {
+ // reset the solver state to zero out variable updates (resetting the whole domain is overkill...)
+ solver.resetStateToBeginningOfStep( domain );
+
+ // perturb a single component density in each cell
+ forAll< serialPolicy >( subRegion.size(), [=] ( localIndex const ei )
+ {
+ real64 const dRho = perturbParameter * ( compDens[ei][jc] + perturbParameter );
+ dCompDens[ei][jc] = dRho;
+ } );
+
+ // recompute component fractions
+ solver.updateFluidState( subRegion );
+
+ // check values in each cell
+ forAll< serialPolicy >( subRegion.size(), [=, &phaseVolFracOrig] ( localIndex const ei )
+ {
+ SCOPED_TRACE( "Element " + std::to_string( ei ) );
+
+ auto dS_dRho = invertLayout( dPhaseVolFrac_dCompDens[ei].toSliceConst(), numPhase, numComp );
+ string var = "compDens[" + components[jc] + "]";
+
+ checkDerivative( phaseVolFrac[ei].toSliceConst(),
+ phaseVolFracOrig[ei].toSliceConst(),
+ dS_dRho[jc].toSliceConst(),
+ dCompDens[ei][jc],
+ relTol,
+ "phaseVolFrac",
+ var,
+ phases );
+ } );
+ }
+
+ // Step 3: update temperature and check derivatives
+
+ if( isThermal )
+ {
+ arrayView1d< real64 > const temp =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::temperature >();
+
+ arrayView1d< real64 > const dTemp =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::deltaTemperature >();
+
+ arrayView2d< real64, compflow::USD_PHASE > const dPhaseVolFrac_dTemp =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::dPhaseVolumeFraction_dTemperature >();
+
+ // reset the solver state to zero out variable updates
+ solver.resetStateToBeginningOfStep( domain );
+
+ // perturb temperature in each cell
+ forAll< serialPolicy >( subRegion.size(), [=] ( localIndex const ei )
+ {
+ real64 const dT = perturbParameter * ( temp[ei] + perturbParameter );
+ dTemp[ei] = dT;
+ } );
+
+ // recompute all fluid properties
+ solver.updateFluidState( subRegion );
+
+ // check values in each cell
+ forAll< serialPolicy >( subRegion.size(), [=, &phaseVolFracOrig] ( localIndex const ei )
+ {
+ SCOPED_TRACE( "Element " + std::to_string( ei ) );
+
+ checkDerivative( phaseVolFrac[ei].toSliceConst(),
+ phaseVolFracOrig[ei].toSliceConst(),
+ dPhaseVolFrac_dTemp[ei].toSliceConst(),
+ dTemp[ei],
+ relTol,
+ "phaseVolFrac",
+ "Temp",
+ phases );
+ } );
+ }
+
+ } );
+ } );
+}
+
+void testPhaseMobilityNumericalDerivatives( CompositionalMultiphaseFVM & solver,
+ DomainPartition & domain,
+ bool const isThermal,
+ real64 const perturbParameter,
+ real64 const relTol )
+{
+ integer const numComp = solver.numFluidComponents();
+ integer const numPhase = solver.numFluidPhases();
+
+ solver.forMeshTargets( domain.getMeshBodies(),
+ [&]( string const,
+ MeshLevel & mesh,
+ arrayView1d< string const > const & regionNames )
+ {
+ ElementRegionManager & elementRegionManager = mesh.getElemManager();
+ elementRegionManager.forElementSubRegions( regionNames,
+ [&]( localIndex const,
+ ElementSubRegionBase & subRegion )
+ {
+ SCOPED_TRACE( subRegion.getParent().getParent().getName() + "/" + subRegion.getName() );
+
+ string const & fluidName = subRegion.getReference< string >( CompositionalMultiphaseFVM::viewKeyStruct::fluidNamesString() );
+ MultiFluidBase const & fluid = subRegion.getConstitutiveModel< MultiFluidBase >( fluidName );
+ arrayView1d< string const > const & components = fluid.componentNames();
+ arrayView1d< string const > const & phases = fluid.phaseNames();
+
+ arrayView1d< real64 > const pres =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::pressure >();
+
+ arrayView1d< real64 > const dPres =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::deltaPressure >();
+
+ arrayView2d< real64, compflow::USD_COMP > const compDens =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::globalCompDensity >();
+
+ arrayView2d< real64, compflow::USD_COMP > const dCompDens =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::deltaGlobalCompDensity >();
+
+ arrayView2d< real64, compflow::USD_PHASE > const phaseMob =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::phaseMobility >();
+
+ arrayView2d< real64, compflow::USD_PHASE > const dPhaseMob_dPres =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::dPhaseMobility_dPressure >();
+
+ arrayView3d< real64, compflow::USD_PHASE_DC > const dPhaseMob_dCompDens =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::dPhaseMobility_dGlobalCompDensity >();
+
+ // reset the solver state to zero out variable updates
+ solver.resetStateToBeginningOfStep( domain );
+
+ // make a copy of unperturbed values of component fractions
+ array2d< real64, compflow::LAYOUT_PHASE > phaseMobOrig( subRegion.size(), numPhase );
+ phaseMobOrig.setValues< serialPolicy >( phaseMob );
+
+ // Step 1: update pressure and check derivatives
+
+ {
+ // perturb pressure in each cell
+ forAll< serialPolicy >( subRegion.size(), [=] ( localIndex const ei )
+ {
+ real64 const dP = perturbParameter * ( pres[ei] + perturbParameter );
+ dPres[ei] = dP;
+ } );
+
+ // recompute component fractions
+ solver.updateFluidState( subRegion );
+
+ // check values in each cell
+ forAll< serialPolicy >( subRegion.size(), [=, &phaseMobOrig] ( localIndex const ei )
+ {
+ SCOPED_TRACE( "Element " + std::to_string( ei ) );
+
+ checkDerivative( phaseMob[ei].toSliceConst(),
+ phaseMobOrig[ei].toSliceConst(),
+ dPhaseMob_dPres[ei].toSliceConst(),
+ dPres[ei],
+ relTol,
+ "phaseMob",
+ "Pres",
+ phases );
+ } );
+ }
+
+ // Step 2: update component density and check derivatives
+
+ for( integer jc = 0; jc < numComp; ++jc )
+ {
+ // reset the solver state to zero out variable updates (resetting the whole domain is overkill...)
+ solver.resetStateToBeginningOfStep( domain );
+
+ // perturb a single component density in each cell
+ forAll< serialPolicy >( subRegion.size(), [=] ( localIndex const ei )
+ {
+ real64 const dRho = perturbParameter * ( compDens[ei][jc] + perturbParameter );
+ dCompDens[ei][jc] = dRho;
+ } );
+
+ // recompute component fractions
+ solver.updateFluidState( subRegion );
+
+ // check values in each cell
+ forAll< serialPolicy >( subRegion.size(), [=, &phaseMobOrig] ( localIndex const ei )
+ {
+ SCOPED_TRACE( "Element " + std::to_string( ei ) );
+
+ auto dS_dRho = invertLayout( dPhaseMob_dCompDens[ei].toSliceConst(), numPhase, numComp );
+ string var = "compDens[" + components[jc] + "]";
+
+ checkDerivative( phaseMob[ei].toSliceConst(),
+ phaseMobOrig[ei].toSliceConst(),
+ dS_dRho[jc].toSliceConst(),
+ dCompDens[ei][jc],
+ relTol,
+ "phaseMob",
+ var,
+ phases );
+ } );
+ }
+
+ // Step 3: update temperature and check derivatives
+
+ if( isThermal )
+ {
+ arrayView1d< real64 > const temp =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::temperature >();
+
+ arrayView1d< real64 > const dTemp =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::deltaTemperature >();
+
+ arrayView2d< real64, compflow::USD_PHASE > const dPhaseMob_dTemp =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::dPhaseMobility_dTemperature >();
+
+ // reset the solver state to zero out variable updates (resetting the whole domain is overkill...)
+ solver.resetStateToBeginningOfStep( domain );
+
+ // perturb temperature in each cell
+ forAll< serialPolicy >( subRegion.size(), [=] ( localIndex const ei )
+ {
+ real64 const dT = perturbParameter * ( temp[ei] + perturbParameter );
+ dTemp[ei] = dT;
+ } );
+
+ // recompute component fractions
+ solver.updateFluidState( subRegion );
+
+ // check values in each cell
+ forAll< serialPolicy >( subRegion.size(), [=, &phaseMobOrig] ( localIndex const ei )
+ {
+ SCOPED_TRACE( "Element " + std::to_string( ei ) );
+
+ checkDerivative( phaseMob[ei].toSliceConst(),
+ phaseMobOrig[ei].toSliceConst(),
+ dPhaseMob_dTemp[ei].toSliceConst(),
+ dTemp[ei],
+ relTol,
+ "phaseMob",
+ "Temp",
+ phases );
+ } );
+ }
+
+ } );
+ } );
+}
+
+template< typename COMPOSITIONAL_SOLVER, typename LAMBDA >
+void fillCellCenteredNumericalJacobian( COMPOSITIONAL_SOLVER & solver,
+ DomainPartition & domain,
+ bool const isThermal,
+ real64 const perturbParameter,
+ arrayView1d< real64 > residual,
+ arrayView1d< real64 > residualOrig,
+ CRSMatrixView< real64, globalIndex > jacobian,
+ CRSMatrixView< real64, globalIndex > jacobianFD,
+ LAMBDA assembleFunction )
+{
+ integer const numComp = solver.numFluidComponents();
+
+ DofManager const & dofManager = solver.getDofManager();
+ string const elemDofKey = dofManager.getKey( COMPOSITIONAL_SOLVER::viewKeyStruct::elemDofFieldString() );
+
+ solver.forMeshTargets( domain.getMeshBodies(), [&] ( string const &,
+ MeshLevel & mesh,
+ arrayView1d< string const > const & regionNames )
+ {
+ mesh.getElemManager().forElementSubRegions( regionNames,
+ [&]( localIndex const,
+ ElementSubRegionBase & subRegion )
+ {
+ arrayView1d< integer const > const & elemGhostRank = subRegion.ghostRank();
+ arrayView1d< globalIndex const > const & elemDofNumber =
+ subRegion.getReference< array1d< globalIndex > >( elemDofKey );
+
+ arrayView1d< real64 const > const pres =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::pressure >();
+ pres.move( LvArray::MemorySpace::host, false );
+
+ arrayView1d< real64 > const dPres =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::deltaPressure >();
+
+ arrayView2d< real64 const, compflow::USD_COMP > const compDens =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::globalCompDensity >();
+ compDens.move( LvArray::MemorySpace::host, false );
+
+ arrayView2d< real64, compflow::USD_COMP > const dCompDens =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::deltaGlobalCompDensity >();
+
+ for( localIndex ei = 0; ei < subRegion.size(); ++ei )
+ {
+ if( elemGhostRank[ei] >= 0 )
+ {
+ continue;
+ }
+
+ real64 totalDensity = 0.0;
+ for( integer ic = 0; ic < numComp; ++ic )
+ {
+ totalDensity += compDens[ei][ic];
+ }
+
+ // Step 1: compute numerical derivatives wrt pressure
+
+ {
+ solver.resetStateToBeginningOfStep( domain );
+
+ real64 const dP = perturbParameter * ( pres[ei] + perturbParameter );
+ dPres.move( LvArray::MemorySpace::host, true );
+ dPres[ei] = dP;
+#if defined(GEOSX_USE_CUDA)
+ dPres.move( LvArray::MemorySpace::cuda, false );
+#endif
+
+
+ mesh.getElemManager().forElementSubRegions( regionNames,
+ [&]( localIndex const,
+ ElementSubRegionBase & subRegion2 )
+ {
+ solver.updateFluidState( subRegion2 );
+ } );
+
+ residual.zero();
+ jacobian.zero();
+ assembleFunction( jacobian.toViewConstSizes(), residual.toView() );
+
+ fillNumericalJacobian( residual.toViewConst(),
+ residualOrig.toViewConst(),
+ elemDofNumber[ei],
+ dP,
+ jacobianFD.toViewConstSizes() );
+ }
+
+ // Step 2: compute numerical derivatives wrt component densities
+
+ for( integer jc = 0; jc < numComp; ++jc )
+ {
+ solver.resetStateToBeginningOfStep( domain );
+
+ real64 const dRho = perturbParameter * totalDensity;
+ dCompDens.move( LvArray::MemorySpace::host, true );
+ dCompDens[ei][jc] = dRho;
+#if defined(GEOSX_USE_CUDA)
+ dCompDens.move( LvArray::MemorySpace::cuda, false );
+#endif
+
+
+ mesh.getElemManager().forElementSubRegions( regionNames,
+ [&]( localIndex const,
+ ElementSubRegionBase & subRegion2 )
+ {
+ solver.updateFluidState( subRegion2 );
+ } );
+
+ residual.zero();
+ jacobian.zero();
+ assembleFunction( jacobian.toViewConstSizes(), residual.toView() );
+
+ fillNumericalJacobian( residual.toViewConst(),
+ residualOrig.toViewConst(),
+ elemDofNumber[ei] + jc + 1,
+ dRho,
+ jacobianFD.toViewConstSizes() );
+ }
+
+ // Step 3: compute numerical derivatives wrt temperature
+
+ if( isThermal )
+ {
+ arrayView1d< real64 const > const temp =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::temperature >();
+ temp.move( LvArray::MemorySpace::host, false );
+
+ arrayView1d< real64 > const dTemp =
+ subRegion.getExtrinsicData< extrinsicMeshData::flow::deltaTemperature >();
+
+ solver.resetStateToBeginningOfStep( domain );
+
+ real64 const dT = perturbParameter * ( temp[ei] + perturbParameter );
+ dTemp.move( LvArray::MemorySpace::host, true );
+ dTemp[ei] = dT;
+#if defined(GEOSX_USE_CUDA)
+ dTemp.move( LvArray::MemorySpace::cuda, false );
+#endif
+
+ // here, we make sure that rock internal energy is updated
+ // in other words, a call to updateFluidState would not work
+ solver.updateState( domain );
+
+ residual.zero();
+ jacobian.zero();
+ assembleFunction( jacobian.toViewConstSizes(), residual.toView() );
+
+ fillNumericalJacobian( residual.toViewConst(),
+ residualOrig.toViewConst(),
+ elemDofNumber[ei] + numComp + 1,
+ dT,
+ jacobianFD.toViewConstSizes() );
+
+ }
+
+ }
+ } );
+ } );
+}
+
+
} // namespace testing
} // namespace geosx
diff --git a/src/coreComponents/unitTests/fluidFlowTests/testCompMultiphaseFlow.cpp b/src/coreComponents/unitTests/fluidFlowTests/testCompMultiphaseFlow.cpp
index 8fa6270022f..13b9d1304b1 100644
--- a/src/coreComponents/unitTests/fluidFlowTests/testCompMultiphaseFlow.cpp
+++ b/src/coreComponents/unitTests/fluidFlowTests/testCompMultiphaseFlow.cpp
@@ -152,326 +152,6 @@ char const * xmlInput =
// Sphinx end before input XML
-void testCompositionNumericalDerivatives( CompositionalMultiphaseFVM & solver,
- DomainPartition & domain,
- real64 const perturbParameter,
- real64 const relTol )
-{
- localIndex const NC = solver.numFluidComponents();
-
-
- solver.forMeshTargets( domain.getMeshBodies(),
- [&]( string const,
- MeshLevel & mesh,
- arrayView1d< string const > const & regionNames )
- {
- ElementRegionManager & elementRegionManager = mesh.getElemManager();
- elementRegionManager.forElementSubRegions( regionNames,
- [&]( localIndex const,
- ElementSubRegionBase & subRegion )
- {
- SCOPED_TRACE( subRegion.getParent().getParent().getName() + "/" + subRegion.getName() );
-
- string const & fluidName = subRegion.getReference< string >( CompositionalMultiphaseFVM::viewKeyStruct::fluidNamesString() );
- MultiFluidBase const & fluid = subRegion.getConstitutiveModel< MultiFluidBase >( fluidName );
- arrayView1d< string const > const & components = fluid.componentNames();
-
- arrayView2d< real64, compflow::USD_COMP > & compDens =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::globalCompDensity >();
-
- arrayView2d< real64, compflow::USD_COMP > & dCompDens =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::deltaGlobalCompDensity >();
-
- arrayView2d< real64, compflow::USD_COMP > & compFrac =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::globalCompFraction >();
-
- arrayView3d< real64, compflow::USD_COMP_DC > & dCompFrac_dCompDens =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::dGlobalCompFraction_dGlobalCompDensity >();
-
- // reset the solver state to zero out variable updates
- solver.resetStateToBeginningOfStep( domain );
-
- // make a copy of unperturbed values of component fractions
- array2d< real64, compflow::LAYOUT_COMP > compFracOrig( subRegion.size(), NC );
- compFracOrig.setValues< serialPolicy >( compFrac );
-
- // update component density and check derivatives
- for( localIndex jc = 0; jc < NC; ++jc )
- {
- // reset the solver state to zero out variable updates (resetting the whole domain is overkill...)
- solver.resetStateToBeginningOfStep( domain );
-
- // perturb a single component density in each cell
- forAll< serialPolicy >( subRegion.size(), [=] ( localIndex const ei )
- {
- real64 const dRho = perturbParameter * ( compDens[ei][jc] + perturbParameter );
- dCompDens[ei][jc] = dRho;
- } );
-
- // recompute component fractions
- solver.updateComponentFraction( subRegion );
-
- // check values in each cell
- forAll< serialPolicy >( subRegion.size(), [=] ( localIndex const ei )
- {
- SCOPED_TRACE( "Element " + std::to_string( ei ) );
-
- auto dZ_dRho = invertLayout( dCompFrac_dCompDens[ei].toSliceConst(), NC, NC );
- string var = "compDens[" + components[jc] + "]";
-
- checkDerivative( compFrac[ei].toSliceConst(),
- compFracOrig[ei].toSliceConst(),
- dZ_dRho[jc].toSliceConst(),
- dCompDens[ei][jc],
- relTol,
- "compFrac",
- var,
- components );
- } );
- }
- } );
- } );
-}
-
-
-void testPhaseVolumeFractionNumericalDerivatives( CompositionalMultiphaseFVM & solver,
- DomainPartition & domain,
- real64 const perturbParameter,
- real64 const relTol )
-{
- localIndex const NC = solver.numFluidComponents();
- localIndex const NP = solver.numFluidPhases();
-
- solver.forMeshTargets( domain.getMeshBodies(),
- [&]( string const,
- MeshLevel & mesh,
- arrayView1d< string const > const & regionNames )
- {
- ElementRegionManager & elementRegionManager = mesh.getElemManager();
- elementRegionManager.forElementSubRegions( regionNames,
- [&]( localIndex const,
- ElementSubRegionBase & subRegion )
- {
- SCOPED_TRACE( subRegion.getParent().getParent().getName() + "/" + subRegion.getName() );
-
- string const & fluidName = subRegion.getReference< string >( CompositionalMultiphaseFVM::viewKeyStruct::fluidNamesString() );
- MultiFluidBase const & fluid = subRegion.getConstitutiveModel< MultiFluidBase >( fluidName );
- arrayView1d< string const > const & components = fluid.componentNames();
- arrayView1d< string const > const & phases = fluid.phaseNames();
-
- arrayView1d< real64 > & pres =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::pressure >();
-
- arrayView1d< real64 > & dPres =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::deltaPressure >();
-
- arrayView2d< real64, compflow::USD_COMP > & compDens =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::globalCompDensity >();
-
- arrayView2d< real64, compflow::USD_COMP > & dCompDens =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::deltaGlobalCompDensity >();
-
- arrayView2d< real64, compflow::USD_PHASE > & phaseVolFrac =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::phaseVolumeFraction >();
-
- arrayView2d< real64, compflow::USD_PHASE > & dPhaseVolFrac_dPres =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::dPhaseVolumeFraction_dPressure >();
-
- arrayView3d< real64, compflow::USD_PHASE_DC > & dPhaseVolFrac_dCompDens =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::dPhaseVolumeFraction_dGlobalCompDensity >();
-
- // reset the solver state to zero out variable updates
- solver.resetStateToBeginningOfStep( domain );
-
- // make a copy of unperturbed values of component fractions
- array2d< real64, compflow::LAYOUT_PHASE > phaseVolFracOrig( subRegion.size(), NP );
- phaseVolFracOrig.setValues< serialPolicy >( phaseVolFrac );
-
- // update pressure and check derivatives
- {
- // perturb pressure in each cell
- forAll< serialPolicy >( subRegion.size(), [=] ( localIndex const ei )
- {
- real64 const dP = perturbParameter * ( pres[ei] + perturbParameter );
- dPres[ei] = dP;
- } );
-
- // recompute component fractions
- solver.updateFluidState( subRegion );
-
- // check values in each cell
- forAll< serialPolicy >( subRegion.size(), [=, &phaseVolFracOrig] ( localIndex const ei )
- {
- SCOPED_TRACE( "Element " + std::to_string( ei ) );
-
- checkDerivative( phaseVolFrac[ei].toSliceConst(),
- phaseVolFracOrig[ei].toSliceConst(),
- dPhaseVolFrac_dPres[ei].toSliceConst(),
- dPres[ei],
- relTol,
- "phaseVolFrac",
- "Pres",
- phases );
- } );
- }
-
- // update component density and check derivatives
- for( localIndex jc = 0; jc < NC; ++jc )
- {
- // reset the solver state to zero out variable updates (resetting the whole domain is overkill...)
- solver.resetStateToBeginningOfStep( domain );
-
- // perturb a single component density in each cell
- forAll< serialPolicy >( subRegion.size(), [=] ( localIndex const ei )
- {
- real64 const dRho = perturbParameter * ( compDens[ei][jc] + perturbParameter );
- dCompDens[ei][jc] = dRho;
- } );
-
- // recompute component fractions
- solver.updateFluidState( subRegion );
-
- // check values in each cell
- forAll< serialPolicy >( subRegion.size(), [=, &phaseVolFracOrig] ( localIndex const ei )
- {
- SCOPED_TRACE( "Element " + std::to_string( ei ) );
-
- auto dS_dRho = invertLayout( dPhaseVolFrac_dCompDens[ei].toSliceConst(), NP, NC );
- string var = "compDens[" + components[jc] + "]";
-
- checkDerivative( phaseVolFrac[ei].toSliceConst(),
- phaseVolFracOrig[ei].toSliceConst(),
- dS_dRho[jc].toSliceConst(),
- dCompDens[ei][jc],
- relTol,
- "phaseVolFrac",
- var,
- phases );
- } );
- }
- } );
- } );
-}
-
-void testPhaseMobilityNumericalDerivatives( CompositionalMultiphaseFVM & solver,
- DomainPartition & domain,
- real64 const perturbParameter,
- real64 const relTol )
-{
- localIndex const NC = solver.numFluidComponents();
- localIndex const NP = solver.numFluidPhases();
-
- solver.forMeshTargets( domain.getMeshBodies(),
- [&]( string const,
- MeshLevel & mesh,
- arrayView1d< string const > const & regionNames )
- {
- ElementRegionManager & elementRegionManager = mesh.getElemManager();
- elementRegionManager.forElementSubRegions( regionNames,
- [&]( localIndex const,
- ElementSubRegionBase & subRegion )
- {
- SCOPED_TRACE( subRegion.getParent().getParent().getName() + "/" + subRegion.getName() );
-
- string const & fluidName = subRegion.getReference< string >( CompositionalMultiphaseFVM::viewKeyStruct::fluidNamesString() );
- MultiFluidBase const & fluid = subRegion.getConstitutiveModel< MultiFluidBase >( fluidName );
- arrayView1d< string const > const & components = fluid.componentNames();
- arrayView1d< string const > const & phases = fluid.phaseNames();
-
- arrayView1d< real64 > & pres =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::pressure >();
-
- arrayView1d< real64 > & dPres =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::deltaPressure >();
-
- arrayView2d< real64, compflow::USD_COMP > & compDens =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::globalCompDensity >();
-
- arrayView2d< real64, compflow::USD_COMP > & dCompDens =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::deltaGlobalCompDensity >();
-
- arrayView2d< real64, compflow::USD_PHASE > & phaseMob =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::phaseMobility >();
-
- arrayView2d< real64, compflow::USD_PHASE > & dPhaseMob_dPres =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::dPhaseMobility_dPressure >();
-
- arrayView3d< real64, compflow::USD_PHASE_DC > & dPhaseMob_dCompDens =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::dPhaseMobility_dGlobalCompDensity >();
-
- // reset the solver state to zero out variable updates
- solver.resetStateToBeginningOfStep( domain );
-
- // make a copy of unperturbed values of component fractions
- array2d< real64, compflow::LAYOUT_PHASE > phaseVolFracOrig( subRegion.size(), NP );
- phaseVolFracOrig.setValues< serialPolicy >( phaseMob );
-
- // update pressure and check derivatives
- {
- // perturb pressure in each cell
- forAll< serialPolicy >( subRegion.size(), [=] ( localIndex const ei )
- {
- real64 const dP = perturbParameter * ( pres[ei] + perturbParameter );
- dPres[ei] = dP;
- } );
-
- // recompute component fractions
- solver.updateFluidState( subRegion );
-
- // check values in each cell
- forAll< serialPolicy >( subRegion.size(), [=, &phaseVolFracOrig] ( localIndex const ei )
- {
- SCOPED_TRACE( "Element " + std::to_string( ei ) );
-
- checkDerivative( phaseMob[ei].toSliceConst(),
- phaseVolFracOrig[ei].toSliceConst(),
- dPhaseMob_dPres[ei].toSliceConst(),
- dPres[ei],
- relTol,
- "phaseVolFrac",
- "Pres",
- phases );
- } );
- }
-
- // update component density and check derivatives
- for( localIndex jc = 0; jc < NC; ++jc )
- {
- // reset the solver state to zero out variable updates (resetting the whole domain is overkill...)
- solver.resetStateToBeginningOfStep( domain );
-
- // perturb a single component density in each cell
- forAll< serialPolicy >( subRegion.size(), [=] ( localIndex const ei )
- {
- real64 const dRho = perturbParameter * ( compDens[ei][jc] + perturbParameter );
- dCompDens[ei][jc] = dRho;
- } );
-
- // recompute component fractions
- solver.updateFluidState( subRegion );
-
- // check values in each cell
- forAll< serialPolicy >( subRegion.size(), [=, &phaseVolFracOrig] ( localIndex const ei )
- {
- SCOPED_TRACE( "Element " + std::to_string( ei ) );
-
- auto dS_dRho = invertLayout( dPhaseMob_dCompDens[ei].toSliceConst(), NP, NC );
- string var = "compDens[" + components[jc] + "]";
-
- checkDerivative( phaseMob[ei].toSliceConst(),
- phaseVolFracOrig[ei].toSliceConst(),
- dS_dRho[jc].toSliceConst(),
- dCompDens[ei][jc],
- relTol,
- "phaseMob",
- var,
- phases );
- } );
- }
- } );
- } );
-}
-
template< typename LAMBDA >
void testNumericalJacobian( CompositionalMultiphaseFVM & solver,
DomainPartition & domain,
@@ -479,11 +159,8 @@ void testNumericalJacobian( CompositionalMultiphaseFVM & solver,
real64 const relTol,
LAMBDA assembleFunction )
{
- localIndex const NC = solver.numFluidComponents();
-
CRSMatrix< real64, globalIndex > const & jacobian = solver.getLocalMatrix();
array1d< real64 > residual( jacobian.numRows() );
- DofManager const & dofManager = solver.getDofManager();
// assemble the analytical residual
solver.resetStateToBeginningOfStep( domain );
@@ -502,121 +179,16 @@ void testNumericalJacobian( CompositionalMultiphaseFVM & solver,
CRSMatrix< real64, globalIndex > jacobianFD( jacobian );
jacobianFD.zero();
- string const dofKey = dofManager.getKey( CompositionalMultiphaseFVM::viewKeyStruct::elemDofFieldString() );
-
- solver.forMeshTargets( domain.getMeshBodies(),
- [&]( string const,
- MeshLevel & mesh,
- arrayView1d< string const > const & regionNames )
- {
- ElementRegionManager & elementRegionManager = mesh.getElemManager();
- elementRegionManager.forElementSubRegions( regionNames,
- [&]( localIndex const,
- ElementSubRegionBase & subRegion )
- {
- arrayView1d< integer const > const & elemGhostRank = subRegion.ghostRank();
-
- arrayView1d< globalIndex const > const & dofNumber =
- subRegion.getReference< array1d< globalIndex > >( dofKey );
-
- arrayView1d< real64 const > const & pres =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::pressure >();
- pres.move( LvArray::MemorySpace::host, false );
-
- arrayView1d< real64 > const & dPres =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::deltaPressure >();
-
- arrayView2d< real64 const, compflow::USD_COMP > const & compDens =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::globalCompDensity >();
- compDens.move( LvArray::MemorySpace::host, false );
-
- arrayView2d< real64, compflow::USD_COMP > const & dCompDens =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::deltaGlobalCompDensity >();
-
- for( localIndex ei = 0; ei < subRegion.size(); ++ei )
- {
- if( elemGhostRank[ei] >= 0 )
- {
- continue;
- }
-
- real64 totalDensity = 0.0;
- for( localIndex ic = 0; ic < NC; ++ic )
- {
- totalDensity += compDens[ei][ic];
- }
-
- {
- solver.resetStateToBeginningOfStep( domain );
-
- real64 const dP = perturbParameter * ( pres[ei] + perturbParameter );
- dPres.move( LvArray::MemorySpace::host, true );
- dPres[ei] = dP;
-#if defined(GEOSX_USE_CUDA)
- dPres.move( LvArray::MemorySpace::cuda, false );
-#endif
-
-
- solver.forMeshTargets( domain.getMeshBodies(),
- [&]( string const,
- MeshLevel & mesh2,
- arrayView1d< string const > const & regionNames2 )
- {
- ElementRegionManager & elementRegionManager2 = mesh2.getElemManager();
- elementRegionManager2.forElementSubRegions( regionNames2,
- [&]( localIndex const,
- ElementSubRegionBase & subRegion2 )
- {
- solver.updateFluidState( subRegion2 );
- } );
- } );
-
- residual.zero();
- jacobian.zero();
- assembleFunction( jacobian.toViewConstSizes(), residual.toView() );
-
- fillNumericalJacobian( residual.toViewConst(),
- residualOrig.toViewConst(),
- dofNumber[ei],
- dP,
- jacobianFD.toViewConstSizes() );
- }
-
- for( localIndex jc = 0; jc < NC; ++jc )
- {
- solver.resetStateToBeginningOfStep( domain );
-
- real64 const dRho = perturbParameter * totalDensity;
- dCompDens.move( LvArray::MemorySpace::host, true );
- dCompDens[ei][jc] = dRho;
-
- solver.forMeshTargets( domain.getMeshBodies(),
- [&]( string const,
- MeshLevel & mesh2,
- arrayView1d< string const > const & regionNames2 )
- {
- ElementRegionManager & elementRegionManager2 = mesh2.getElemManager();
- elementRegionManager2.forElementSubRegions( regionNames2,
- [&]( localIndex const,
- ElementSubRegionBase & subRegion2 )
- {
- solver.updateFluidState( subRegion2 );
- } );
- } );
-
- residual.zero();
- jacobian.zero();
- assembleFunction( jacobian.toViewConstSizes(), residual.toView() );
-
- fillNumericalJacobian( residual.toViewConst(),
- residualOrig.toViewConst(),
- dofNumber[ei] + jc + 1,
- dRho,
- jacobianFD.toViewConstSizes() );
- }
- }
- } );
- } );
+ // fill jacobian FD
+ fillCellCenteredNumericalJacobian( solver,
+ domain,
+ false,
+ perturbParameter,
+ residual.toView(),
+ residualOrig.toView(),
+ jacobian.toView(),
+ jacobianFD.toView(),
+ assembleFunction );
// assemble the analytical jacobian
solver.resetStateToBeginningOfStep( domain );
@@ -682,7 +254,7 @@ TEST_F( CompositionalMultiphaseFlowTest, derivativeNumericalCheck_phaseVolumeFra
real64 const tol = 5e-2; // 5% error margin
DomainPartition & domain = state.getProblemManager().getDomainPartition();
- testPhaseVolumeFractionNumericalDerivatives( *solver, domain, perturb, tol );
+ testPhaseVolumeFractionNumericalDerivatives( *solver, domain, false, perturb, tol );
}
TEST_F( CompositionalMultiphaseFlowTest, derivativeNumericalCheck_phaseMobility )
@@ -692,7 +264,7 @@ TEST_F( CompositionalMultiphaseFlowTest, derivativeNumericalCheck_phaseMobility
DomainPartition & domain = state.getProblemManager().getDomainPartition();
- testPhaseMobilityNumericalDerivatives( *solver, domain, perturb, tol );
+ testPhaseMobilityNumericalDerivatives( *solver, domain, false, perturb, tol );
}
TEST_F( CompositionalMultiphaseFlowTest, jacobianNumericalCheck_flux )
@@ -736,7 +308,6 @@ int main( int argc, char * * argv )
{
::testing::InitGoogleTest( &argc, argv );
g_commandLineOptions = *geosx::basicSetup( argc, argv );
-// chai::ArrayManager::getInstance()->disableCallbacks();
int const result = RUN_ALL_TESTS();
geosx::basicCleanup();
return result;
diff --git a/src/coreComponents/unitTests/fluidFlowTests/testCompMultiphaseFlowHybrid.cpp b/src/coreComponents/unitTests/fluidFlowTests/testCompMultiphaseFlowHybrid.cpp
index 1c6c9cae452..90f0521e8f6 100644
--- a/src/coreComponents/unitTests/fluidFlowTests/testCompMultiphaseFlowHybrid.cpp
+++ b/src/coreComponents/unitTests/fluidFlowTests/testCompMultiphaseFlowHybrid.cpp
@@ -161,8 +161,6 @@ void testNumericalJacobian( CompositionalMultiphaseHybridFVM & solver,
real64 const relTol,
LAMBDA assembleFunction )
{
- localIndex const NC = solver.numFluidComponents();
-
CRSMatrix< real64, globalIndex > const & jacobian = solver.getLocalMatrix();
array1d< real64 > residual( jacobian.numRows() );
DofManager const & dofManager = solver.getDofManager();
@@ -184,99 +182,21 @@ void testNumericalJacobian( CompositionalMultiphaseHybridFVM & solver,
CRSMatrix< real64, globalIndex > jacobianFD( jacobian );
jacobianFD.zero();
- string const elemDofKey = dofManager.getKey( CompositionalMultiphaseHybridFVM::viewKeyStruct::elemDofFieldString() );
+ // fill jacobian FD for cell centered variables
+ fillCellCenteredNumericalJacobian( solver,
+ domain,
+ false,
+ perturbParameter,
+ residual.toView(),
+ residualOrig.toView(),
+ jacobian.toView(),
+ jacobianFD.toView(),
+ assembleFunction );
solver.forMeshTargets( domain.getMeshBodies(), [&] ( string const &,
MeshLevel & mesh,
- arrayView1d< string const > const & regionNames )
+ arrayView1d< string const > const & )
{
- mesh.getElemManager().forElementSubRegions( regionNames,
- [&]( localIndex const,
- ElementSubRegionBase & subRegion )
- {
- arrayView1d< integer const > const & elemGhostRank = subRegion.ghostRank();
- arrayView1d< globalIndex const > const & elemDofNumber =
- subRegion.getReference< array1d< globalIndex > >( elemDofKey );
-
- arrayView1d< real64 const > const & pres =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::pressure >();
- pres.move( LvArray::MemorySpace::host, false );
-
- arrayView1d< real64 > const & dPres =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::deltaPressure >();
-
- arrayView2d< real64 const, compflow::USD_COMP > const & compDens =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::globalCompDensity >();
- compDens.move( LvArray::MemorySpace::host, false );
-
- arrayView2d< real64, compflow::USD_COMP > const & dCompDens =
- subRegion.getExtrinsicData< extrinsicMeshData::flow::deltaGlobalCompDensity >();
-
- for( localIndex ei = 0; ei < subRegion.size(); ++ei )
- {
- if( elemGhostRank[ei] >= 0 )
- {
- continue;
- }
-
- real64 totalDensity = 0.0;
- for( localIndex ic = 0; ic < NC; ++ic )
- {
- totalDensity += compDens[ei][ic];
- }
-
- {
- solver.resetStateToBeginningOfStep( domain );
-
- real64 const dP = perturbParameter * ( pres[ei] + perturbParameter );
- dPres.move( LvArray::MemorySpace::host, true );
- dPres[ei] = dP;
-
- mesh.getElemManager().forElementSubRegions( regionNames,
- [&]( localIndex const,
- ElementSubRegionBase & subRegion2 )
- {
- solver.updateFluidState( subRegion2 );
- } );
-
- residual.zero();
- jacobian.zero();
- assembleFunction( jacobian.toViewConstSizes(), residual.toView() );
-
- fillNumericalJacobian( residual.toViewConst(),
- residualOrig.toViewConst(),
- elemDofNumber[ei],
- dP,
- jacobianFD.toViewConstSizes() );
- }
-
- for( localIndex jc = 0; jc < NC; ++jc )
- {
- solver.resetStateToBeginningOfStep( domain );
-
- real64 const dRho = perturbParameter * totalDensity;
- dCompDens.move( LvArray::MemorySpace::host, true );
- dCompDens[ei][jc] = dRho;
-
- mesh.getElemManager().forElementSubRegions( regionNames,
- [&]( localIndex const,
- ElementSubRegionBase & subRegion2 )
- {
- solver.updateFluidState( subRegion2 );
- } );
-
- residual.zero();
- jacobian.zero();
- assembleFunction( jacobian.toViewConstSizes(), residual.toView() );
-
- fillNumericalJacobian( residual.toViewConst(),
- residualOrig.toViewConst(),
- elemDofNumber[ei] + jc + 1,
- dRho,
- jacobianFD.toViewConstSizes() );
- }
- }
- } );
FaceManager & faceManager = mesh.getFaceManager();