Change Immersed Boundary dead cell handling in matrix: boost diagonal and setValues
This commit is contained in:
parent
9ca9cabbac
commit
d4f21693fa
21 changed files with 161 additions and 9 deletions
|
@ -239,6 +239,16 @@ void fixedValueIbFvPatchField<Type>::evaluate
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
void Foam::fixedValueIbFvPatchField<Type>::manipulateMatrix
|
||||||
|
(
|
||||||
|
fvMatrix<Type>& matrix
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this->setDeadValues(matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void fixedValueIbFvPatchField<Type>::write(Ostream& os) const
|
void fixedValueIbFvPatchField<Type>::write(Ostream& os) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -191,6 +191,9 @@ public:
|
||||||
const Pstream::commsTypes commsType = Pstream::blocking
|
const Pstream::commsTypes commsType = Pstream::blocking
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Manipulate a matrix
|
||||||
|
virtual void manipulateMatrix(fvMatrix<Type>& matrix);
|
||||||
|
|
||||||
|
|
||||||
// I-O
|
// I-O
|
||||||
|
|
||||||
|
|
|
@ -257,6 +257,16 @@ void mixedIbFvPatchField<Type>::evaluate
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
void Foam::mixedIbFvPatchField<Type>::manipulateMatrix
|
||||||
|
(
|
||||||
|
fvMatrix<Type>& matrix
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this->setDeadValues(matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void mixedIbFvPatchField<Type>::write(Ostream& os) const
|
void mixedIbFvPatchField<Type>::write(Ostream& os) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -221,6 +221,9 @@ public:
|
||||||
const Pstream::commsTypes commsType = Pstream::blocking
|
const Pstream::commsTypes commsType = Pstream::blocking
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Manipulate a matrix
|
||||||
|
virtual void manipulateMatrix(fvMatrix<Type>& matrix);
|
||||||
|
|
||||||
|
|
||||||
// I-O
|
// I-O
|
||||||
|
|
||||||
|
|
|
@ -220,6 +220,15 @@ void Foam::movingImmersedBoundaryVelocityFvPatchVectorField::evaluate
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::movingImmersedBoundaryVelocityFvPatchVectorField::manipulateMatrix
|
||||||
|
(
|
||||||
|
fvVectorMatrix& matrix
|
||||||
|
)
|
||||||
|
{
|
||||||
|
setDeadValues(matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::movingImmersedBoundaryVelocityFvPatchVectorField::write
|
void Foam::movingImmersedBoundaryVelocityFvPatchVectorField::write
|
||||||
(
|
(
|
||||||
Ostream& os
|
Ostream& os
|
||||||
|
|
|
@ -163,6 +163,9 @@ public:
|
||||||
const Pstream::commsTypes commsType = Pstream::blocking
|
const Pstream::commsTypes commsType = Pstream::blocking
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Manipulate a matrix
|
||||||
|
virtual void manipulateMatrix(fvVectorMatrix& matrix);
|
||||||
|
|
||||||
|
|
||||||
// I-O
|
// I-O
|
||||||
|
|
||||||
|
|
|
@ -63,6 +63,39 @@ void Foam::immersedBoundaryFieldBase<Type>::setDeadValues
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
void Foam::immersedBoundaryFieldBase<Type>::setDeadValues
|
||||||
|
(
|
||||||
|
fvMatrix<Type>& matrix
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
// Fix the value in dead cells
|
||||||
|
if (setDeadValue_)
|
||||||
|
{
|
||||||
|
const labelList& dc = ibPatch_.ibPolyPatch().deadCells();
|
||||||
|
|
||||||
|
// Boost the diagonal of dead cells by the volume ratio
|
||||||
|
// Volume ratio is set to SMALL; revert for diagonal
|
||||||
|
// This should also guarantee strong diagonal dominance.
|
||||||
|
// HJ, 19/Jun/2019
|
||||||
|
|
||||||
|
scalarField& diag = matrix.diag();
|
||||||
|
|
||||||
|
forAll (dc, dcI)
|
||||||
|
{
|
||||||
|
diag[dc[dcI]] *= GREAT;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set values
|
||||||
|
matrix.setValues
|
||||||
|
(
|
||||||
|
dc,
|
||||||
|
Field<Type>(dc.size(), deadValue_)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void Foam::immersedBoundaryFieldBase<Type>::writeDeadData(Ostream& os) const
|
void Foam::immersedBoundaryFieldBase<Type>::writeDeadData(Ostream& os) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -123,6 +123,9 @@ public:
|
||||||
//- Set values in dead cells
|
//- Set values in dead cells
|
||||||
void setDeadValues(Field<Type>& psiI) const;
|
void setDeadValues(Field<Type>& psiI) const;
|
||||||
|
|
||||||
|
//- Set matrix constraints in dead cells
|
||||||
|
void setDeadValues(fvMatrix<Type>& matrix) const;
|
||||||
|
|
||||||
|
|
||||||
// I/O
|
// I/O
|
||||||
|
|
||||||
|
|
|
@ -1262,8 +1262,8 @@ void Foam::immersedBoundaryPolyPatch::calcCorrectedGeometry() const
|
||||||
|
|
||||||
forAll (dc, dcI)
|
forAll (dc, dcI)
|
||||||
{
|
{
|
||||||
// Set dead volume to small
|
// Scale dead volume to small
|
||||||
V[dc[dcI]] = SMALL;
|
V[dc[dcI]] *= SMALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Correct for all cut faces
|
// Correct for all cut faces
|
||||||
|
@ -1286,7 +1286,7 @@ void Foam::immersedBoundaryPolyPatch::calcCorrectedGeometry() const
|
||||||
|
|
||||||
forAll (df, dfI)
|
forAll (df, dfI)
|
||||||
{
|
{
|
||||||
// Set dead area to small
|
// Scale dead area to small
|
||||||
Sf[df[dfI]] *= SMALL;
|
Sf[df[dfI]] *= SMALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -250,6 +250,17 @@ void immersedBoundaryEpsilonWallFunctionFvPatchScalarField::evaluate
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void immersedBoundaryEpsilonWallFunctionFvPatchScalarField::manipulateMatrix
|
||||||
|
(
|
||||||
|
fvScalarMatrix& matrix
|
||||||
|
)
|
||||||
|
{
|
||||||
|
setDeadValues(matrix);
|
||||||
|
|
||||||
|
epsilonWallFunctionFvPatchScalarField::manipulateMatrix(matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void immersedBoundaryEpsilonWallFunctionFvPatchScalarField::write
|
void immersedBoundaryEpsilonWallFunctionFvPatchScalarField::write
|
||||||
(
|
(
|
||||||
Ostream& os
|
Ostream& os
|
||||||
|
|
|
@ -170,6 +170,9 @@ public:
|
||||||
const Pstream::commsTypes = Pstream::blocking
|
const Pstream::commsTypes = Pstream::blocking
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Manipulate a matrix
|
||||||
|
virtual void manipulateMatrix(fvScalarMatrix& matrix);
|
||||||
|
|
||||||
|
|
||||||
// I-O
|
// I-O
|
||||||
|
|
||||||
|
|
|
@ -220,6 +220,16 @@ void immersedBoundaryKqRWallFunctionFvPatchField<Type>::evaluate
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
void immersedBoundaryKqRWallFunctionFvPatchField<Type>::manipulateMatrix
|
||||||
|
(
|
||||||
|
fvMatrix<Type>& matrix
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this->setDeadValues(matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void immersedBoundaryKqRWallFunctionFvPatchField<Type>::write(Ostream& os) const
|
void immersedBoundaryKqRWallFunctionFvPatchField<Type>::write(Ostream& os) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -167,6 +167,9 @@ public:
|
||||||
const Pstream::commsTypes commsType = Pstream::blocking
|
const Pstream::commsTypes commsType = Pstream::blocking
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Manipulate a matrix
|
||||||
|
virtual void manipulateMatrix(fvMatrix<Type>& matrix);
|
||||||
|
|
||||||
|
|
||||||
// I-O
|
// I-O
|
||||||
|
|
||||||
|
|
|
@ -66,7 +66,7 @@ immersedBoundaryOmegaWallFunctionFvPatchScalarField
|
||||||
p,
|
p,
|
||||||
Switch(dict.lookup("setDeadValue")),
|
Switch(dict.lookup("setDeadValue")),
|
||||||
readScalar(dict.lookup("deadValue"))
|
readScalar(dict.lookup("deadValue"))
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this->readPatchType(dict);
|
this->readPatchType(dict);
|
||||||
|
|
||||||
|
@ -249,6 +249,17 @@ void immersedBoundaryOmegaWallFunctionFvPatchScalarField::evaluate
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void immersedBoundaryOmegaWallFunctionFvPatchScalarField::manipulateMatrix
|
||||||
|
(
|
||||||
|
fvScalarMatrix& matrix
|
||||||
|
)
|
||||||
|
{
|
||||||
|
setDeadValues(matrix);
|
||||||
|
|
||||||
|
omegaWallFunctionFvPatchScalarField::manipulateMatrix(matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void immersedBoundaryOmegaWallFunctionFvPatchScalarField::write
|
void immersedBoundaryOmegaWallFunctionFvPatchScalarField::write
|
||||||
(
|
(
|
||||||
Ostream& os
|
Ostream& os
|
||||||
|
|
|
@ -184,6 +184,9 @@ public:
|
||||||
const Pstream::commsTypes = Pstream::blocking
|
const Pstream::commsTypes = Pstream::blocking
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Manipulate a matrix
|
||||||
|
virtual void manipulateMatrix(fvScalarMatrix& matrix);
|
||||||
|
|
||||||
|
|
||||||
// I-O
|
// I-O
|
||||||
|
|
||||||
|
|
|
@ -222,10 +222,6 @@ void immersedBoundaryEpsilonWallFunctionFvPatchScalarField::updateCoeffs()
|
||||||
{
|
{
|
||||||
epsilonWallFunctionFvPatchScalarField::updateCoeffs();
|
epsilonWallFunctionFvPatchScalarField::updateCoeffs();
|
||||||
}
|
}
|
||||||
|
|
||||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
|
||||||
const scalarField& y = rasModel.y()[patch().index()];
|
|
||||||
Info<< "Patch y: (" << min(y) << " " << max(y) << ")" << endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -254,6 +250,17 @@ void immersedBoundaryEpsilonWallFunctionFvPatchScalarField::evaluate
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void immersedBoundaryEpsilonWallFunctionFvPatchScalarField::manipulateMatrix
|
||||||
|
(
|
||||||
|
fvScalarMatrix& matrix
|
||||||
|
)
|
||||||
|
{
|
||||||
|
setDeadValues(matrix);
|
||||||
|
|
||||||
|
epsilonWallFunctionFvPatchScalarField::manipulateMatrix(matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void immersedBoundaryEpsilonWallFunctionFvPatchScalarField::write
|
void immersedBoundaryEpsilonWallFunctionFvPatchScalarField::write
|
||||||
(
|
(
|
||||||
Ostream& os
|
Ostream& os
|
||||||
|
|
|
@ -170,6 +170,9 @@ public:
|
||||||
const Pstream::commsTypes = Pstream::blocking
|
const Pstream::commsTypes = Pstream::blocking
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Manipulate a matrix
|
||||||
|
virtual void manipulateMatrix(fvScalarMatrix& matrix);
|
||||||
|
|
||||||
|
|
||||||
// I-O
|
// I-O
|
||||||
|
|
||||||
|
|
|
@ -220,6 +220,16 @@ void immersedBoundaryKqRWallFunctionFvPatchField<Type>::evaluate
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
void immersedBoundaryKqRWallFunctionFvPatchField<Type>::manipulateMatrix
|
||||||
|
(
|
||||||
|
fvMatrix<Type>& matrix
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this->setDeadValues(matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void immersedBoundaryKqRWallFunctionFvPatchField<Type>::write(Ostream& os) const
|
void immersedBoundaryKqRWallFunctionFvPatchField<Type>::write(Ostream& os) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -167,6 +167,9 @@ public:
|
||||||
const Pstream::commsTypes commsType = Pstream::blocking
|
const Pstream::commsTypes commsType = Pstream::blocking
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Manipulate a matrix
|
||||||
|
virtual void manipulateMatrix(fvMatrix<Type>& matrix);
|
||||||
|
|
||||||
|
|
||||||
// I-O
|
// I-O
|
||||||
|
|
||||||
|
|
|
@ -66,7 +66,7 @@ immersedBoundaryOmegaWallFunctionFvPatchScalarField
|
||||||
p,
|
p,
|
||||||
Switch(dict.lookup("setDeadValue")),
|
Switch(dict.lookup("setDeadValue")),
|
||||||
readScalar(dict.lookup("deadValue"))
|
readScalar(dict.lookup("deadValue"))
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this->readPatchType(dict);
|
this->readPatchType(dict);
|
||||||
|
|
||||||
|
@ -249,6 +249,17 @@ void immersedBoundaryOmegaWallFunctionFvPatchScalarField::evaluate
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void immersedBoundaryOmegaWallFunctionFvPatchScalarField::manipulateMatrix
|
||||||
|
(
|
||||||
|
fvScalarMatrix& matrix
|
||||||
|
)
|
||||||
|
{
|
||||||
|
setDeadValues(matrix);
|
||||||
|
|
||||||
|
omegaWallFunctionFvPatchScalarField::manipulateMatrix(matrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void immersedBoundaryOmegaWallFunctionFvPatchScalarField::write
|
void immersedBoundaryOmegaWallFunctionFvPatchScalarField::write
|
||||||
(
|
(
|
||||||
Ostream& os
|
Ostream& os
|
||||||
|
|
|
@ -184,6 +184,9 @@ public:
|
||||||
const Pstream::commsTypes = Pstream::blocking
|
const Pstream::commsTypes = Pstream::blocking
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Manipulate a matrix
|
||||||
|
virtual void manipulateMatrix(fvScalarMatrix& matrix);
|
||||||
|
|
||||||
|
|
||||||
// I-O
|
// I-O
|
||||||
|
|
||||||
|
|
Reference in a new issue