Skip to content

Conversation

@jhuang2601
Copy link
Contributor

This PR adds MGR strategy for SinglePhasePoromechanicsConformingFracturesReservoir

@jhuang2601 jhuang2601 self-assigned this Jul 16, 2025
@jhuang2601
Copy link
Contributor Author

jhuang2601 commented Jul 25, 2025

Currently, I just borrow the MGR from SinglePhasePoromechanicsConformingFractures and it works for the cases with limited number of wells and perfs.
However, to support broader applications, we need to properly design and integrate the wellbore variables into the MGR recipe.
For this purpose, @castelletto1, @victorapm and @matteofrigo5 your support would be greatly appreciated.

@paveltomin
Copy link
Collaborator

@castelletto1 @victorapm can you please help?

@victorapm
Copy link
Contributor

@jhuang2601 Do we have an input XML to test the new MGR strategy?

@jhuang2601
Copy link
Contributor Author

@jhuang2601 Do we have an input XML to test the new MGR strategy?

Yes, @victorapm, just push an example to this PR

@herve-gross
Copy link
Contributor

Code owners' review needed (@castelletto1 or @matteofrigo5 ?)

@jhuang2601
Copy link
Contributor Author

Hello @victorapm @castelletto1 @matteofrigo5, any update on this MGR recipe, which is required for InSalah case?

@herve-gross
Copy link
Contributor

@victorapm @castelletto1 @matteofrigo5 : just checking on the status on this. Can you take a look?

@castelletto1
Copy link
Contributor

We should keep in mind that two strategies are needed, one for the isothermal case and one for the thermal case.

Comment on lines +37 to +43
* dofLabel: 0 = displacement, x-component
* dofLabel: 1 = displacement, y-component
* dofLabel: 2 = displacement, z-component
* dofLabel: 3 = face-centered lagrange multiplier (tn)
* dofLabel: 4 = face-centered lagrange multiplier (tt1)
* dofLabel: 5 = face-centered lagrange multiplier (tt2)
* dofLabel: 6 = pressure (cell elem + fracture elems)
Copy link
Contributor

@castelletto1 castelletto1 Sep 16, 2025

Choose a reason for hiding this comment

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

Isothermal case:

Suggested change
* dofLabel: 0 = displacement, x-component
* dofLabel: 1 = displacement, y-component
* dofLabel: 2 = displacement, z-component
* dofLabel: 3 = face-centered lagrange multiplier (tn)
* dofLabel: 4 = face-centered lagrange multiplier (tt1)
* dofLabel: 5 = face-centered lagrange multiplier (tt2)
* dofLabel: 6 = pressure (cell elem + fracture elems)
* dofLabel: 0 = displacement, x-component
* dofLabel: 1 = displacement, y-component
* dofLabel: 2 = displacement, z-component
* dofLabel: 3 = face-centered lagrange multiplier (tn)
* dofLabel: 4 = face-centered lagrange multiplier (tt1)
* dofLabel: 5 = face-centered lagrange multiplier (tt2)
* dofLabel: 6 = pressure (cell elem + fracture elems)
* dofLabel: 7 = well pressure
* dofLabel: 8 = well rate

Thermal case (should be another included in another strategy)

Suggested change
* dofLabel: 0 = displacement, x-component
* dofLabel: 1 = displacement, y-component
* dofLabel: 2 = displacement, z-component
* dofLabel: 3 = face-centered lagrange multiplier (tn)
* dofLabel: 4 = face-centered lagrange multiplier (tt1)
* dofLabel: 5 = face-centered lagrange multiplier (tt2)
* dofLabel: 6 = pressure (cell elem + fracture elems)
* dofLabel: 0 = displacement, x-component
* dofLabel: 1 = displacement, y-component
* dofLabel: 2 = displacement, z-component
* dofLabel: 3 = face-centered lagrange multiplier (tn)
* dofLabel: 4 = face-centered lagrange multiplier (tt1)
* dofLabel: 5 = face-centered lagrange multiplier (tt2)
* dofLabel: 6 = pressure (cell elem + fracture elems)
* dofLabel: 7 = temperature (cell elem + fracture elems)
* dofLabel: 8 = well pressure
* dofLabel: 9 = well termperature
* dofLabel: 10 = well rate

* @brief Constructor.
*/
explicit SinglePhasePoromechanicsConformingFracturesReservoirFVM( arrayView1d< int const > const & )
: MGRStrategyBase( 7 )
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
: MGRStrategyBase( 7 )
: MGRStrategyBase( 9 )

Comment on lines +64 to +91
// we keep u and p
m_labels[0].push_back( 0 );
m_labels[0].push_back( 1 );
m_labels[0].push_back( 2 );
m_labels[0].push_back( 6 );
// we keep p
m_labels[1].push_back( 6 );

setupLabels();

// Level 0
m_levelFRelaxType[0] = MGRFRelaxationType::none;
m_levelFRelaxIters[0] = 0;

m_levelGlobalSmootherType[0] = MGRGlobalSmootherType::ilu0;
m_levelGlobalSmootherIters[0] = 1;

m_levelInterpType[0] = MGRInterpolationType::blockJacobi;
m_levelRestrictType[0] = MGRRestrictionType::injection;
m_levelCoarseGridMethod[0] = MGRCoarseGridMethod::galerkin;

// Level 1
m_levelFRelaxType[1] = MGRFRelaxationType::amgVCycle;
m_levelFRelaxIters[1] = 1;
m_levelGlobalSmootherType[1] = MGRGlobalSmootherType::none;
m_levelInterpType[1] = MGRInterpolationType::jacobi;
m_levelRestrictType[1] = MGRRestrictionType::injection;
m_levelCoarseGridMethod[1] = MGRCoarseGridMethod::nonGalerkin;
Copy link
Contributor

Choose a reason for hiding this comment

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

Focusing on the isothermal case, I would first try a 3 level strategy:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants