Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"build": {
"dockerfile": "Dockerfile",
"args": {
"GEOS_TPL_TAG": "324-875"
"GEOS_TPL_TAG": "332-903"
}
},
"runArgs": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -704,7 +704,7 @@ void HypreMatrix::multiplyP1tAP2( HypreMatrix const & P1,
HYPRE_ParCSRMatrix const dst_parcsr = hypre_ParCSRMatrixRAPKT( P1.unwrapped(),
m_parcsr_mat,
P2.unwrapped(),
0 );
0, 1 );

dst.parCSRtoIJ( dst_parcsr );
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -410,7 +410,7 @@ void HyprePreconditioner::setup( Matrix const & mat )
m_precond->destroy( m_precond->ptr );
}
#if defined(GEOS_USE_SUPERLU_DIST)
hypre_SLUDistSetup( &m_precond->ptr, precondMat.unwrapped(), 0 );
hypre_SLUDistSetup( &m_precond->ptr, precondMat.unwrapped(), nullptr, nullptr );
#endif
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
#include <_hypre_utilities.h>
#include <_hypre_parcsr_ls.h>
#include <_hypre_IJ_mv.h>
#include <krylov.h>
#include <HYPRE_krylov.h>

namespace geos
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ HYPRE_Int SuperLUDistSolve( HYPRE_Solver solver,
{
GEOS_UNUSED_VAR( A );
#if defined(GEOS_USE_SUPERLU_DIST)
return hypre_SLUDistSolve( solver, b, x );
return hypre_SLUDistSolve( solver, A, b, x );
#else
GEOS_UNUSED_VAR( solver );
GEOS_UNUSED_VAR( b );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -552,7 +552,8 @@ enum class MGRRestrictionType : HYPRE_Int
approximateInverse = 3, //!< Approximate inverse
blockJacobi = 12, //!< Block-Jacobi
cprLike = 13, //!< CPR-like restriction
blockColLumped = 14 //!< Block column-lumped approximation
blockColLumped = 14, //!< Block column-lumped approximation
partialColLumped = 15 //!< Partial column-lumped approximation
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What does "Partial column-lumped approximation" mean?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It means W_{TS} = 0 instead of doing colsum^{-1}(A_{TS}) * colsum^{-1}(A_{SS}) as done by blockColLumped. W_{TS} being the submatrix of the restriction operator coupling temperature and densities.

The pressure part remains the same: W_{PS} = colsum^{-1}(A_{PS}) * colsum^{-1}(A_{SS})

So, I called it a "partial" column-lumped. Let me know if you have other names in mind!

Copy link
Contributor

@castelletto1 castelletto1 Jan 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So for ThermalCompositionalMultiphaseFVM we have:

| A_SS A_SP A_ST |
| A_PS A_PP A_PT |
| A_TS A_TP A_TT |

With "Partial column-lumped approximation", the correction to block:

| A_PP A_PT |
| A_TP A_TT |

is

- | colsum(A_{PS})  | * colsum^{-1}(A_{SS}) * | A_SP A_ST |
  |       0         |

Correct?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's correct, so essentially the energy equation isn't perturbed

};

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ void HypreVector::reciprocal()
{
GEOS_LAI_ASSERT( ready() );

GEOS_LAI_CHECK_ERROR( HYPRE_ParVectorPointwiseInverse( m_vec, &m_vec ) );
GEOS_LAI_CHECK_ERROR( hypre_ParVectorPointwiseInverse( m_vec, &m_vec ) );
touch();
}

Expand Down Expand Up @@ -228,7 +228,7 @@ void HypreVector::pointwiseProduct( HypreVector const & x )
GEOS_LAI_ASSERT( x.ready() );
GEOS_LAI_ASSERT_EQ( localSize(), x.localSize() );

GEOS_LAI_CHECK_ERROR( HYPRE_ParVectorPointwiseProduct( x.m_vec, m_vec, &m_vec ) );
GEOS_LAI_CHECK_ERROR( hypre_ParVectorPointwiseProduct( x.m_vec, m_vec, &m_vec ) );
touch();
}

Expand All @@ -238,7 +238,7 @@ void HypreVector::pointwiseDivide( HypreVector const & x )
GEOS_LAI_ASSERT( x.ready() );
GEOS_LAI_ASSERT_EQ( localSize(), x.localSize() );

GEOS_LAI_CHECK_ERROR( HYPRE_ParVectorPointwiseDivision( x.m_vec, m_vec, &m_vec ) );
GEOS_LAI_CHECK_ERROR( hypre_ParVectorPointwiseDivision( x.m_vec, m_vec, &m_vec ) );
touch();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,8 @@ class ThermalCompositionalMultiphaseFVM : public MGRStrategyBase< 2 >

m_levelFRelaxType[1] = MGRFRelaxationType::none;
m_levelInterpType[1] = MGRInterpolationType::injection;
m_levelRestrictType[1] = MGRRestrictionType::injection;
m_levelCoarseGridMethod[1] = MGRCoarseGridMethod::cprLikeBlockDiag; // Non-Galerkin Quasi-IMPES CPR
m_levelRestrictType[1] = MGRRestrictionType::partialColLumped; // True-IMPES for thermal
m_levelCoarseGridMethod[1] = MGRCoarseGridMethod::galerkin;
Comment on lines +80 to +81
Copy link
Contributor

@castelletto1 castelletto1 Jan 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the use of the Galerkin projection instead of the non-Galerkin. Again, I am not sure I fully understand what partial column lumping is.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment applies also to the the other two modified strategies

m_levelGlobalSmootherType[1] = MGRGlobalSmootherType::ilu0;
m_levelGlobalSmootherIters[1] = 1;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,11 +98,10 @@ class ThermalCompositionalMultiphaseReservoirFVM : public MGRStrategyBase< 3 >
m_levelGlobalSmootherType[1] = MGRGlobalSmootherType::blockGaussSeidel;
m_levelGlobalSmootherIters[1] = 1;

m_levelFRelaxType[2] = MGRFRelaxationType::jacobi;
m_levelFRelaxIters[2] = 1;
m_levelInterpType[2] = MGRInterpolationType::injection; // Injection
m_levelRestrictType[2] = MGRRestrictionType::injection;
m_levelCoarseGridMethod[2] = MGRCoarseGridMethod::cprLikeBlockDiag; // Non-Galerkin Quasi-IMPES CPR
m_levelFRelaxType[2] = MGRFRelaxationType::none;
m_levelInterpType[2] = MGRInterpolationType::injection;
m_levelRestrictType[2] = MGRRestrictionType::partialColLumped; // True-IMPES for thermal
m_levelCoarseGridMethod[2] = MGRCoarseGridMethod::galerkin;
m_levelGlobalSmootherType[2] = MGRGlobalSmootherType::ilu0;
m_levelGlobalSmootherIters[2] = 1;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,8 @@ class ThermalMultiphasePoromechanics : public MGRStrategyBase< 3 >
// Level 2
m_levelFRelaxType[2] = MGRFRelaxationType::none;
m_levelInterpType[2] = MGRInterpolationType::injection;
m_levelRestrictType[2] = MGRRestrictionType::injection;
m_levelCoarseGridMethod[2] = MGRCoarseGridMethod::cprLikeBlockDiag;
m_levelRestrictType[2] = MGRRestrictionType::partialColLumped; // True-IMPES for thermal
m_levelCoarseGridMethod[2] = MGRCoarseGridMethod::galerkin;
m_levelGlobalSmootherType[2] = MGRGlobalSmootherType::ilu0;
m_levelGlobalSmootherIters[2] = 1;
}
Expand Down
Loading