mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
BUG: GAMG: revert to non-energy preserving when processor agglomerating
This commit is contained in:
@ -222,7 +222,19 @@ class GAMGSolver
|
||||
const label levelI
|
||||
);
|
||||
|
||||
//- Interpolate the correction after injected prolongation
|
||||
//- Interpolate the correction after injected prolongation
|
||||
void interpolate
|
||||
(
|
||||
scalarField& psi,
|
||||
scalarField& Apsi,
|
||||
const lduMatrix& m,
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
const direction cmpt
|
||||
) const;
|
||||
|
||||
//- Interpolate the correction after injected prolongation and
|
||||
/// re-normalise
|
||||
void interpolate
|
||||
(
|
||||
scalarField& psi,
|
||||
|
||||
@ -34,8 +34,6 @@ void Foam::GAMGSolver::interpolate
|
||||
const lduMatrix& m,
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
const labelList& restrictAddressing,
|
||||
const scalarField& psiC,
|
||||
const direction cmpt
|
||||
) const
|
||||
{
|
||||
@ -81,6 +79,34 @@ void Foam::GAMGSolver::interpolate
|
||||
{
|
||||
psiPtr[celli] = -ApsiPtr[celli]/(diagPtr[celli]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::GAMGSolver::interpolate
|
||||
(
|
||||
scalarField& psi,
|
||||
scalarField& Apsi,
|
||||
const lduMatrix& m,
|
||||
const FieldField<Field, scalar>& interfaceBouCoeffs,
|
||||
const lduInterfaceFieldPtrsList& interfaces,
|
||||
const labelList& restrictAddressing,
|
||||
const scalarField& psiC,
|
||||
const direction cmpt
|
||||
) const
|
||||
{
|
||||
interpolate
|
||||
(
|
||||
psi,
|
||||
Apsi,
|
||||
m,
|
||||
interfaceBouCoeffs,
|
||||
interfaces,
|
||||
cmpt
|
||||
);
|
||||
|
||||
register const label nCells = m.diag().size();
|
||||
scalar* __restrict__ psiPtr = psi.begin();
|
||||
const scalar* const __restrict__ diagPtr = m.diag().begin();
|
||||
|
||||
register const label nCCells = psiC.size();
|
||||
scalarField corrC(nCCells, 0);
|
||||
|
||||
@ -315,17 +315,32 @@ void Foam::GAMGSolver::Vcycle
|
||||
|
||||
if (interpolateCorrection_) //&& leveli < coarsestLevel - 2)
|
||||
{
|
||||
interpolate
|
||||
(
|
||||
coarseCorrFields[leveli],
|
||||
ACfRef,
|
||||
matrixLevels_[leveli],
|
||||
interfaceLevelsBouCoeffs_[leveli],
|
||||
interfaceLevels_[leveli],
|
||||
agglomeration_.restrictAddressing(leveli + 1),
|
||||
coarseCorrFields[leveli + 1],
|
||||
cmpt
|
||||
);
|
||||
if (coarseCorrFields.set(leveli+1))
|
||||
{
|
||||
interpolate
|
||||
(
|
||||
coarseCorrFields[leveli],
|
||||
ACfRef,
|
||||
matrixLevels_[leveli],
|
||||
interfaceLevelsBouCoeffs_[leveli],
|
||||
interfaceLevels_[leveli],
|
||||
agglomeration_.restrictAddressing(leveli + 1),
|
||||
coarseCorrFields[leveli + 1],
|
||||
cmpt
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
interpolate
|
||||
(
|
||||
coarseCorrFields[leveli],
|
||||
ACfRef,
|
||||
matrixLevels_[leveli],
|
||||
interfaceLevelsBouCoeffs_[leveli],
|
||||
interfaceLevels_[leveli],
|
||||
cmpt
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Scale coarse-grid correction field
|
||||
|
||||
Reference in New Issue
Block a user