-
Notifications
You must be signed in to change notification settings - Fork 91
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Kernels for poroelastic solvers #1353
Conversation
src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoroelasticKernel.hpp
Show resolved
Hide resolved
@castelletto1 @rrsettgast I am interested in poroelastic coupling, so read through your PR and add some comments, Hope this help. Do you want to add a class for computing the poroelastic constants, i.e. the transformation between the poroelastic constants? |
src/coreComponents/finiteElement/elementFormulations/FiniteElementBase.hpp
Outdated
Show resolved
Hide resolved
src/coreComponents/physicsSolvers/fluidFlow/CompositionalMultiphaseBase.cpp
Outdated
Show resolved
Hide resolved
src/coreComponents/physicsSolvers/multiphysics/MultiphasePoroelasticSolver.cpp
Outdated
Show resolved
Hide resolved
…mentBase.hpp Co-authored-by: Randolph Settgast <settgast1@llnl.gov>
…OSX into feature/singleKernelPoroelastic
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is great! Should also integrate very well with what I have been working on.
stack.xLocal[ a ][ i ] = m_X[ localNodeIndex ][ i ]; | ||
#endif | ||
stack.u_local[ a ][i] = m_disp[ localNodeIndex ][i]; | ||
stack.uhat_local[ a ][i] = m_uhat[ localNodeIndex ][i]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if we should use disp
and deltaDisp
like we do for the pressure instead of u
and u_hat
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree that the naming convention should be improved. However, it should be reflected across all solid mechanics kernels.
src/coreComponents/physicsSolvers/multiphysics/MultiphasePoroelasticSolver.cpp
Show resolved
Hide resolved
// update displacement field | ||
m_solidSolver->applySystemSolution( dofManager, localSolution, scalingFactor, domain ); | ||
// update pressure field | ||
m_flowSolver->applySystemSolution( dofManager, localSolution, -scalingFactor, domain ); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
at some point we should fix the signs.
src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoroelasticKernel.hpp
Outdated
Show resolved
Hide resolved
src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoroelasticKernel.hpp
Show resolved
Hide resolved
src/coreComponents/physicsSolvers/multiphysics/MultiphasePoroelasticKernel.hpp
Show resolved
Hide resolved
src/coreComponents/physicsSolvers/multiphysics/MultiphasePoroelasticKernel.hpp
Show resolved
Hide resolved
src/coreComponents/physicsSolvers/multiphysics/MultiphasePoroelasticKernel.hpp
Show resolved
Hide resolved
src/coreComponents/physicsSolvers/multiphysics/MultiphasePoroelasticKernel.hpp
Show resolved
Hide resolved
src/coreComponents/physicsSolvers/multiphysics/MultiphasePoroelasticKernel.hpp
Show resolved
Hide resolved
@castelletto1 I added some additional comments to the Multiphase class. Also I have a naive question: if multi phase solver can do the job of single phase solver just by setting 100% saturation to a phase, do we really need single phase solver? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good!
src/coreComponents/physicsSolvers/multiphysics/MultiphasePoroelasticSolver.hpp
Outdated
Show resolved
Hide resolved
src/coreComponents/physicsSolvers/multiphysics/MultiphasePoroelasticSolver.cpp
Outdated
Show resolved
Hide resolved
/// Number of nodes per element...which is equal to the | ||
/// numTestSupportPointPerElem and numTrialSupportPointPerElem by definition. | ||
static constexpr int numNodesPerElem = Base::numTestSupportPointsPerElem; | ||
static constexpr int numMaxComponentsMultiphasePoroelastic = 3; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We need to address this in a follow-up PR
src/coreComponents/physicsSolvers/multiphysics/MultiphasePoroelasticKernel.hpp
Outdated
Show resolved
Hide resolved
src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoroelasticKernel.hpp
Outdated
Show resolved
Hide resolved
src/coreComponents/physicsSolvers/multiphysics/SinglePhasePoroelasticKernel.hpp
Outdated
Show resolved
Hide resolved
template< int NUM_SUPPORT_POINTS, | ||
typename GRADIENT_TYPE > | ||
GEOSX_HOST_DEVICE | ||
static real64 symmetricGradientTrace( GRADIENT_TYPE const & gradN, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry I didn't already ask...but would it make more sense to name this traceSymmetricGradient
?
@@ -402,7 +402,8 @@ void HyprePreconditioner::createMGR( DofManager const * const dofManager ) | |||
std::vector< HYPRE_Int > mgr_level_interp_type; | |||
std::vector< HYPRE_Int > mgr_level_frelax_method; | |||
|
|||
if( ( m_parameters.mgr.strategy == "Poroelastic" ) | ( m_parameters.mgr.strategy == "Hydrofracture" ) ) | |||
if( ( m_parameters.mgr.strategy == LinearSolverParameters::MGR::StrategyType::singlePhasePoroelastic) | | |||
( m_parameters.mgr.strategy == LinearSolverParameters::MGR::StrategyType::hydrofracture ) ) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
( m_parameters.mgr.strategy == LinearSolverParameters::MGR::StrategyType::hydrofracture ) ) | |
( m_parameters.mgr.strategy == LinearSolverParameters::MGR::StrategyType::singlePhaseFractureMechanicsFlow ) ) |
Should we stop calling it hydrofracture? I think that @CusiniM also had the inclination to rebrand it in the context of a poroelastic problem...but it has a transmissibility that varies with deformation.
What would be an appropriate name for "singlePhasePoroelastic" with deformation dependent transmissibility?
@@ -426,6 +426,7 @@ void SinglePhaseBase::assembleSystem( real64 const time_n, | |||
|
|||
if( m_poroElasticFlag ) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
still can't get rid of these?
This PR adds assembly kernels for fully-implicit poroelastic simulation with both single-phase (
PoroelasticSolver
) and multiphase (MultiphasePoroelasticSolver
) flow. Capillary effects are neglected. Flow solvers can be based on either finite volumes (FVM
) or hybrid schemes (HybridFVM
). For the muliphase flow case the maximum number of components is equal to three).The kernels assemble:
Currently the porosity equation considers a linear poroelastic material and assumes incompressible solid grains (
1/N = 0
, withN
Biot's skeleton modulus):with the subscript
n
denoting the discrete time level. The porosity treatment will be generalized introducing a dedicated constitutive model (see #1311).A preliminary 2d example has been added (
PoroElastic_deadoil_3ph_baker_2d.xml
).Currently all integrated tests pass, except for the usual ones on Lassen.
Some issues to be addressed in future PR / PRs:
FVM
, and (ii) single- and multiphase poromechanics withHybridFVM
PoroelasticSolver
toSinglePhasePoroelasticSolver
(not done here to avoid new baseline in the integrated tests)SIM_FixedStress
coupling option) from the single-phase poroelastic solver.Requires a rebaseline:
https://github.com/GEOSX/integratedTests/pull/124