-
Notifications
You must be signed in to change notification settings - Fork 89
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
chore: update trilinos, hypre and fmt. #3214
Conversation
* Add coarse matrix truncation * Fix Non-Galerkin truncation * Remove galerkinRAI option in favor of just galerkin * Adjust threshold
#if GEOS_USE_HYPRE_DEVICE == GEOS_USE_HYPRE_CPU | ||
HYPRE_Real m_coarseGridThreshold{ 1.0e-20 }; ///< Coarse grid truncation threshold | ||
#else | ||
HYPRE_Real m_coarseGridThreshold{ 0.0 }; ///< Coarse grid truncation threshold | ||
#endif |
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 doesn't make sense to me? I read it as
"If we GEOS_USE_HYPRE_DEVICE
is the same as GEOS_USE_HYPRE_CPU
then do something"...but should these ever be the same?
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've seen a few test cases with GPUs where threshold > 0
causes a crash in hypre, which does not seem straightforward to resolve. Since threshold > 0
works for CPUs, and for the sake of getting this new truncation functionality used in GEOS, I'm currently setting different threshold according to the architecture. After the GPU path in hypre is improved, I will change back the threshold
parameter to the same default for CPUs and GPUs in GEOS
@@ -73,7 +73,7 @@ class CompositionalMultiphaseFVM : public MGRStrategyBase< 2 > | |||
m_levelFRelaxType[1] = MGRFRelaxationType::none; | |||
m_levelInterpType[1] = MGRInterpolationType::injection; | |||
m_levelRestrictType[1] = MGRRestrictionType::blockColLumped; // True-IMPES | |||
m_levelCoarseGridMethod[1] = MGRCoarseGridMethod::galerkinRAI; | |||
m_levelCoarseGridMethod[1] = MGRCoarseGridMethod::galerkin; |
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.
are these settings documented somewhere?
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.
There is some documentation via doxygen, see https://geosx-geosx.readthedocs-hosted.com/en/latest/doxygen_output/html/namespacegeos_1_1hypre.html#a05c6983a0ed8e068d0861c91767e83da
We've talked about adding a more detailed description on RTD. Should we re-prioritize that? cc @castelletto1
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 meant to ask whether there is a discussion on the documentation regarding the strategy? So in this case, for CompositionalMultiphaseFVM
there is a strategy that consists of:
m_levelFRelaxType[0] = MGRFRelaxationType::jacobi;
m_levelFRelaxIters[0] = 1;
m_levelInterpType[0] = MGRInterpolationType::jacobi;
m_levelRestrictType[0] = MGRRestrictionType::injection;
m_levelCoarseGridMethod[0] = MGRCoarseGridMethod::galerkin;
m_levelGlobalSmootherType[0] = MGRGlobalSmootherType::none;
m_levelFRelaxType[1] = MGRFRelaxationType::none;
m_levelInterpType[1] = MGRInterpolationType::injection;
m_levelRestrictType[1] = MGRRestrictionType::blockColLumped; // True-IMPES
m_levelCoarseGridMethod[1] = MGRCoarseGridMethod::galerkin;
m_levelGlobalSmootherType[1] = MGRGlobalSmootherType::ilu0;
m_levelGlobalSmootherIters[1] = 1;
And is there an easily accessible explanation for all of these options, and why they go together in the geos
documentation....or in the hypre
documentation? I suspect the hypre
documentation is more of an expert level documentation??
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.
There isn't an easily accessible explanation in neither documentations. I believe hypre's documentation is a better place for a detailed documentation, while in GEOS, we could provide an overview of these preconditioning techniques for each physics model, e.g., the strategy above resembles the commonly used CPR method
...ponents/linearAlgebra/interfaces/hypre/mgrStrategies/MultiphasePoromechanicsReservoirFVM.hpp
Show resolved
Hide resolved
@@ -64,7 +64,7 @@ class SolidMechanicsEmbeddedFractures : public MGRStrategyBase< 1 > | |||
setupLabels(); | |||
|
|||
// Level 0 | |||
m_levelFRelaxType[0] = MGRFRelaxationType::gsElimWInverse; | |||
m_levelFRelaxType[0] = MGRFRelaxationType::jacobi; |
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.
what is the effect of this?
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.
My guess is that the gsElimWInverse
is not really scalable. Shouldn't we do block jacobi though? It's a block diagonal matrix so wouldn't block jacobi be exact?
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.
Yes, we should be doing block jacobi
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, now I recall what's going on here...
Under the hood, hypre does block-Jacobi because of the interpolation choice m_levelInterpType[0] = MGRInterpolationType::blockJacobi
. However, this logic is confusing (it shouldn't depend on the interpolation) and hypre should have a specific option for doing block-Jacobi F-relaxation.
I can work on that.
Hello @CusiniM |
direct dependencies:
|
254c876
to
dafdf54
Compare
@cssherman can you approve this? |
I am looking a bit more to the Lvarray dependencies:
Can lvarray live without raja ? |
RAJA is one of the few hard dependencies of LvArray. |
Updated tpls: - Trilinos: 15.1.1 - Hypre: hypre-v2.31.0-26-gf6cfb0355. Contains MGR improvements that required GEOS code changes. - fmt 11.01.1
Updated tpls: - Trilinos: 15.1.1 - Hypre: hypre-v2.31.0-26-gf6cfb0355. Contains MGR improvements that required GEOS code changes. - fmt 11.01.1
GEOS-DEV/thirdPartyLibs#273
GEOS-DEV/LvArray#322
Updated tpls: