mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: overset: allow use in non-dynamicMesh applications
This is to avoid overset interpolation in the calculation of the stencil itself since this triggers a loop.
This commit is contained in:
@ -35,6 +35,7 @@ License
|
|||||||
#include "oversetFvPatch.H"
|
#include "oversetFvPatch.H"
|
||||||
#include "zeroGradientFvPatchFields.H"
|
#include "zeroGradientFvPatchFields.H"
|
||||||
#include "syncTools.H"
|
#include "syncTools.H"
|
||||||
|
#include "dynamicOversetFvMesh.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -1116,7 +1117,12 @@ bool Foam::cellCellStencils::cellVolumeWeight::update()
|
|||||||
{
|
{
|
||||||
patchTypes[cellI] = allPatchTypes[cellI];
|
patchTypes[cellI] = allPatchTypes[cellI];
|
||||||
}
|
}
|
||||||
patchTypes.correctBoundaryConditions();
|
//patchTypes.correctBoundaryConditions();
|
||||||
|
dynamicOversetFvMesh::correctBoundaryConditions
|
||||||
|
<
|
||||||
|
volScalarField,
|
||||||
|
oversetFvPatchField<scalar>
|
||||||
|
>(patchTypes.boundaryFieldRef(), false);
|
||||||
patchTypes.write();
|
patchTypes.write();
|
||||||
}
|
}
|
||||||
if (debug)
|
if (debug)
|
||||||
@ -1141,7 +1147,12 @@ bool Foam::cellCellStencils::cellVolumeWeight::update()
|
|||||||
{
|
{
|
||||||
volTypes[cellI] = allCellTypes[cellI];
|
volTypes[cellI] = allCellTypes[cellI];
|
||||||
}
|
}
|
||||||
volTypes.correctBoundaryConditions();
|
//volTypes.correctBoundaryConditions();
|
||||||
|
dynamicOversetFvMesh::correctBoundaryConditions
|
||||||
|
<
|
||||||
|
volScalarField,
|
||||||
|
oversetFvPatchField<scalar>
|
||||||
|
>(volTypes.boundaryFieldRef(), false);
|
||||||
volTypes.write();
|
volTypes.write();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1185,7 +1196,12 @@ bool Foam::cellCellStencils::cellVolumeWeight::update()
|
|||||||
cellStencil_.transfer(allStencil);
|
cellStencil_.transfer(allStencil);
|
||||||
cellInterpolationWeights_.transfer(allWeights);
|
cellInterpolationWeights_.transfer(allWeights);
|
||||||
cellInterpolationWeight_.transfer(allWeight);
|
cellInterpolationWeight_.transfer(allWeight);
|
||||||
cellInterpolationWeight_.correctBoundaryConditions();
|
//cellInterpolationWeight_.correctBoundaryConditions();
|
||||||
|
dynamicOversetFvMesh::correctBoundaryConditions
|
||||||
|
<
|
||||||
|
volScalarField,
|
||||||
|
oversetFvPatchField<scalar>
|
||||||
|
>(cellInterpolationWeight_.boundaryFieldRef(), false);
|
||||||
|
|
||||||
DynamicList<label> interpolationCells;
|
DynamicList<label> interpolationCells;
|
||||||
forAll(cellStencil_, cellI)
|
forAll(cellStencil_, cellI)
|
||||||
|
|||||||
@ -37,6 +37,7 @@ License
|
|||||||
#include "waveMethod.H"
|
#include "waveMethod.H"
|
||||||
|
|
||||||
#include "regionSplit.H"
|
#include "regionSplit.H"
|
||||||
|
#include "dynamicOversetFvMesh.H"
|
||||||
//#include "minData.H"
|
//#include "minData.H"
|
||||||
//#include "FaceCellWave.H"
|
//#include "FaceCellWave.H"
|
||||||
|
|
||||||
@ -2152,7 +2153,11 @@ bool Foam::cellCellStencils::inverseDistance::update()
|
|||||||
new mapDistribute(globalCells, cellStencil_, compactMap)
|
new mapDistribute(globalCells, cellStencil_, compactMap)
|
||||||
);
|
);
|
||||||
cellInterpolationWeight_.transfer(allWeight);
|
cellInterpolationWeight_.transfer(allWeight);
|
||||||
cellInterpolationWeight_.correctBoundaryConditions();
|
dynamicOversetFvMesh::correctBoundaryConditions
|
||||||
|
<
|
||||||
|
volScalarField,
|
||||||
|
oversetFvPatchField<scalar>
|
||||||
|
>(cellInterpolationWeight_.boundaryFieldRef(), false);
|
||||||
|
|
||||||
|
|
||||||
if (debug&2)
|
if (debug&2)
|
||||||
@ -2226,7 +2231,11 @@ bool Foam::cellCellStencils::inverseDistance::update()
|
|||||||
(
|
(
|
||||||
createField(mesh_, "maxMagWeight", maxMagWeight)
|
createField(mesh_, "maxMagWeight", maxMagWeight)
|
||||||
);
|
);
|
||||||
tfld.ref().correctBoundaryConditions();
|
dynamicOversetFvMesh::correctBoundaryConditions
|
||||||
|
<
|
||||||
|
volScalarField,
|
||||||
|
oversetFvPatchField<scalar>
|
||||||
|
>(tfld.ref().boundaryFieldRef(), false);
|
||||||
tfld().write();
|
tfld().write();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2236,7 +2245,12 @@ bool Foam::cellCellStencils::inverseDistance::update()
|
|||||||
(
|
(
|
||||||
createField(mesh_, "cellTypes", cellTypes_)
|
createField(mesh_, "cellTypes", cellTypes_)
|
||||||
);
|
);
|
||||||
tfld.ref().correctBoundaryConditions();
|
//tfld.ref().correctBoundaryConditions();
|
||||||
|
dynamicOversetFvMesh::correctBoundaryConditions
|
||||||
|
<
|
||||||
|
volScalarField,
|
||||||
|
oversetFvPatchField<scalar>
|
||||||
|
>(tfld.ref().boundaryFieldRef(), false);
|
||||||
tfld().write();
|
tfld().write();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -34,6 +34,7 @@ License
|
|||||||
#include "syncTools.H"
|
#include "syncTools.H"
|
||||||
#include "treeBoundBoxList.H"
|
#include "treeBoundBoxList.H"
|
||||||
#include "voxelMeshSearch.H"
|
#include "voxelMeshSearch.H"
|
||||||
|
#include "dynamicOversetFvMesh.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -961,7 +962,12 @@ bool Foam::cellCellStencils::trackingInverseDistance::update()
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
cellInterpolationWeight_.transfer(allWeight);
|
cellInterpolationWeight_.transfer(allWeight);
|
||||||
cellInterpolationWeight_.correctBoundaryConditions();
|
//cellInterpolationWeight_.correctBoundaryConditions();
|
||||||
|
dynamicOversetFvMesh::correctBoundaryConditions
|
||||||
|
<
|
||||||
|
volScalarField,
|
||||||
|
oversetFvPatchField<scalar>
|
||||||
|
>(cellInterpolationWeight_.boundaryFieldRef(), false);
|
||||||
|
|
||||||
|
|
||||||
if (debug & 2)
|
if (debug & 2)
|
||||||
@ -1024,7 +1030,12 @@ bool Foam::cellCellStencils::trackingInverseDistance::update()
|
|||||||
{
|
{
|
||||||
volTypes[celli] = cellTypes_[celli];
|
volTypes[celli] = cellTypes_[celli];
|
||||||
}
|
}
|
||||||
volTypes.correctBoundaryConditions();
|
//volTypes.correctBoundaryConditions();
|
||||||
|
dynamicOversetFvMesh::correctBoundaryConditions
|
||||||
|
<
|
||||||
|
volScalarField,
|
||||||
|
oversetFvPatchField<scalar>
|
||||||
|
>(volTypes.boundaryFieldRef(), false);
|
||||||
volTypes.write();
|
volTypes.write();
|
||||||
|
|
||||||
// Dump stencil
|
// Dump stencil
|
||||||
|
|||||||
@ -128,15 +128,6 @@ protected:
|
|||||||
//template<class GeoField, class PatchType>
|
//template<class GeoField, class PatchType>
|
||||||
//lduInterfaceFieldPtrsList scalarInterfaces(const GeoField& psi) const;
|
//lduInterfaceFieldPtrsList scalarInterfaces(const GeoField& psi) const;
|
||||||
|
|
||||||
//- Correct boundary conditions of certain type (typeOnly = true)
|
|
||||||
// or explicitly not of the type (typeOnly = false)
|
|
||||||
template<class GeoField, class PatchType>
|
|
||||||
static void correctBoundaryConditions
|
|
||||||
(
|
|
||||||
typename GeoField::Boundary& bfld,
|
|
||||||
const bool typeOnly
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Determine normalisation for interpolation. This equals the
|
//- Determine normalisation for interpolation. This equals the
|
||||||
// original diagonal except stabilised for zero diagonals (possible
|
// original diagonal except stabilised for zero diagonals (possible
|
||||||
// in hole cells)
|
// in hole cells)
|
||||||
@ -358,6 +349,15 @@ public:
|
|||||||
//- Debug: check halo swap is ok
|
//- Debug: check halo swap is ok
|
||||||
template<class GeoField>
|
template<class GeoField>
|
||||||
static void checkCoupledBC(const GeoField& fld);
|
static void checkCoupledBC(const GeoField& fld);
|
||||||
|
|
||||||
|
//- Correct boundary conditions of certain type (typeOnly = true)
|
||||||
|
// or explicitly not of the type (typeOnly = false)
|
||||||
|
template<class GeoField, class PatchType>
|
||||||
|
static void correctBoundaryConditions
|
||||||
|
(
|
||||||
|
typename GeoField::Boundary& bfld,
|
||||||
|
const bool typeOnly
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -155,11 +155,10 @@ Foam::tmp<Foam::scalarField> Foam::dynamicOversetFvMesh::normalisation
|
|||||||
tmp<scalarField> tnorm(tmp<scalarField>::New(m.diag()));
|
tmp<scalarField> tnorm(tmp<scalarField>::New(m.diag()));
|
||||||
scalarField& norm = tnorm.ref();
|
scalarField& norm = tnorm.ref();
|
||||||
|
|
||||||
// Add boundary coeffs to duplicate behaviour of fvMatrix
|
// Add boundary coeffs to duplicate behaviour of fvMatrix::addBoundaryDiag
|
||||||
const FieldField<Field, Type>& internalCoeffs = m.internalCoeffs();
|
const FieldField<Field, Type>& internalCoeffs = m.internalCoeffs();
|
||||||
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
||||||
{
|
{
|
||||||
//m.addBoundaryDiag(norm, cmpt);
|
|
||||||
forAll(internalCoeffs, patchi)
|
forAll(internalCoeffs, patchi)
|
||||||
{
|
{
|
||||||
const labelUList& fc = lduAddr().patchAddr(patchi);
|
const labelUList& fc = lduAddr().patchAddr(patchi);
|
||||||
|
|||||||
Reference in New Issue
Block a user