Immersed boundary updates in fvMesh and patches

This commit is contained in:
Hrvoje Jasak 2017-11-30 23:03:28 +00:00
parent c6c7720f36
commit 140a0f45e2
30 changed files with 252 additions and 111 deletions

View file

@ -28,6 +28,7 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "coupledFvPatch.H" #include "coupledFvPatch.H"
#include "fvPatchFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -47,7 +48,7 @@ coupledFvPatch::~coupledFvPatch()
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void coupledFvPatch::makeCorrVecs(vectorField& cv) const void coupledFvPatch::makeCorrVecs(fvsPatchVectorField& cv) const
{ {
// Calculate correction vectors on coupled patches // Calculate correction vectors on coupled patches
const scalarField& patchDeltaCoeffs = deltaCoeffs(); const scalarField& patchDeltaCoeffs = deltaCoeffs();

View file

@ -64,13 +64,13 @@ protected:
// Protected Member Functions // Protected Member Functions
//- Make patch weighting factors //- Make patch weighting factors
virtual void makeWeights(scalarField&) const = 0; virtual void makeWeights(fvsPatchScalarField&) const = 0;
//- Make patch face - neighbour cell distances //- Make patch face - neighbour cell distances
virtual void makeDeltaCoeffs(scalarField&) const = 0; virtual void makeDeltaCoeffs(fvsPatchScalarField&) const = 0;
//- Make patch face non-orthogonality correction vectors //- Make patch face non-orthogonality correction vectors
virtual void makeCorrVecs(vectorField&) const; virtual void makeCorrVecs(fvsPatchVectorField&) const;
public: public:

View file

@ -24,8 +24,11 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "cyclicFvPatch.H" #include "cyclicFvPatch.H"
#include "addToRunTimeSelectionTable.H"
#include "fvMesh.H" #include "fvMesh.H"
#include "fvPatchFields.H"
#include "fvsPatchFields.H"
#include "slicedSurfaceFields.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -40,8 +43,18 @@ addToRunTimeSelectionTable(fvPatch, cyclicFvPatch, polyPatch);
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
// Make mesh cell centres. Moved from fvMeshGeometry
void cyclicFvPatch::makeC(slicedSurfaceVectorField& C) const
{
C.boundaryField()[index()].UList<vector>::operator=
(
patchSlice(cyclicPolyPatch_.boundaryMesh().mesh().faceCentres())
);
}
// Make patch weighting factors // Make patch weighting factors
void cyclicFvPatch::makeWeights(scalarField& w) const void cyclicFvPatch::makeWeights(fvsPatchScalarField& w) const
{ {
const scalarField& magFa = magSf(); const scalarField& magFa = magSf();
@ -89,7 +102,7 @@ void cyclicFvPatch::makeWeights(scalarField& w) const
{ {
scalar avFa = (magFa[errorFace] + magFa[errorFace + sizeby2])/2.0; scalar avFa = (magFa[errorFace] + magFa[errorFace + sizeby2])/2.0;
FatalErrorIn("cyclicFvPatch::makeWeights(scalarField& w) const") FatalErrorIn("cyclicFvPatch::makeWeights(fvsPatchScalarField& w) const")
<< "face " << errorFace << " and " << errorFace + sizeby2 << "face " << errorFace << " and " << errorFace + sizeby2
<< " areas do not match by " << " areas do not match by "
<< 100*mag(magFa[errorFace] - magFa[errorFace + sizeby2])/avFa << 100*mag(magFa[errorFace] - magFa[errorFace + sizeby2])/avFa
@ -102,7 +115,7 @@ void cyclicFvPatch::makeWeights(scalarField& w) const
// Make patch face - neighbour cell distances // Make patch face - neighbour cell distances
void cyclicFvPatch::makeDeltaCoeffs(scalarField& dc) const void cyclicFvPatch::makeDeltaCoeffs(fvsPatchScalarField& dc) const
{ {
vectorField d = delta(); vectorField d = delta();
vectorField n = nf(); vectorField n = nf();

View file

@ -55,6 +55,7 @@ class cyclicFvPatch
{ {
// Private data // Private data
//- Reference to cyclicPolyPatch
const cyclicPolyPatch& cyclicPolyPatch_; const cyclicPolyPatch& cyclicPolyPatch_;
@ -62,11 +63,19 @@ protected:
// Protected Member functions // Protected Member functions
//- Make patch weighting factors // Geometry correction functions
void makeWeights(scalarField&) const;
//- Make patch face - neighbour cell distances //- Make mesh cell centres. Moved from fvMeshGeometry
void makeDeltaCoeffs(scalarField&) const; virtual void makeC(slicedSurfaceVectorField&) const;
// Discretisation correction functions
//- Make patch weighting factors
void makeWeights(fvsPatchScalarField&) const;
//- Make patch face - neighbour cell distances
void makeDeltaCoeffs(fvsPatchScalarField&) const;
public: public:

View file

@ -30,8 +30,12 @@ Contributor
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "cyclicGgiFvPatch.H" #include "cyclicGgiFvPatch.H"
#include "fvMesh.H"
#include "fvPatchFields.H"
#include "fvPatchFields.H"
#include "fvsPatchFields.H"
#include "slicedSurfaceFields.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
#include "fvBoundaryMesh.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -44,8 +48,18 @@ namespace Foam
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
// Make mesh cell centres. Moved from fvMeshGeometry
void Foam::cyclicGgiFvPatch::makeC(slicedSurfaceVectorField& C) const
{
C.boundaryField()[index()].UList<vector>::operator=
(
patchSlice(cyclicGgiPolyPatch_.boundaryMesh().mesh().faceCentres())
);
}
// Make patch weighting factors // Make patch weighting factors
void Foam::cyclicGgiFvPatch::makeWeights(scalarField& w) const void Foam::cyclicGgiFvPatch::makeWeights(fvsPatchScalarField& w) const
{ {
// Calculation of weighting factors is performed from the master // Calculation of weighting factors is performed from the master
// position, using reconstructed shadow cell centres // position, using reconstructed shadow cell centres
@ -77,7 +91,12 @@ void Foam::cyclicGgiFvPatch::makeWeights(scalarField& w) const
else else
{ {
// Pick up weights from the master side // Pick up weights from the master side
scalarField masterWeights(shadow().size()); fvsPatchScalarField masterWeights
(
shadow(),
w.dimensionedInternalField()
);
shadow().makeWeights(masterWeights); shadow().makeWeights(masterWeights);
w = interpolate(1 - masterWeights); w = interpolate(1 - masterWeights);
@ -93,7 +112,7 @@ void Foam::cyclicGgiFvPatch::makeWeights(scalarField& w) const
// Make patch face - neighbour cell distances // Make patch face - neighbour cell distances
void Foam::cyclicGgiFvPatch::makeDeltaCoeffs(scalarField& dc) const void Foam::cyclicGgiFvPatch::makeDeltaCoeffs(fvsPatchScalarField& dc) const
{ {
if (cyclicGgiPolyPatch_.master()) if (cyclicGgiPolyPatch_.master())
{ {
@ -111,8 +130,14 @@ void Foam::cyclicGgiFvPatch::makeDeltaCoeffs(scalarField& dc) const
} }
else else
{ {
scalarField masterDeltas(shadow().size()); fvsPatchScalarField masterDeltas
(
shadow(),
dc.dimensionedInternalField()
);
shadow().makeDeltaCoeffs(masterDeltas); shadow().makeDeltaCoeffs(masterDeltas);
dc = interpolate(masterDeltas); dc = interpolate(masterDeltas);
if (bridgeOverlap()) if (bridgeOverlap())

View file

@ -67,11 +67,19 @@ protected:
// Protected Member functions // Protected Member functions
//- Make patch weighting factors // Geometry correction functions
virtual void makeWeights(scalarField&) const;
//- Make patch face - neighbour cell distances //- Make mesh cell centres. Moved from fvMeshGeometry
virtual void makeDeltaCoeffs(scalarField&) const; virtual void makeC(slicedSurfaceVectorField&) const;
// Discretisation correction functions
//- Make patch weighting factors
void makeWeights(fvsPatchScalarField&) const;
//- Make patch face - neighbour cell distances
void makeDeltaCoeffs(fvsPatchScalarField&) const;
public: public:

View file

@ -34,8 +34,9 @@ Contributor
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "ggiFvPatch.H" #include "ggiFvPatch.H"
#include "addToRunTimeSelectionTable.H" #include "fvPatchFields.H"
#include "fvBoundaryMesh.H" #include "fvBoundaryMesh.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -55,7 +56,7 @@ Foam::ggiFvPatch::~ggiFvPatch()
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
// Make patch weighting factors // Make patch weighting factors
void Foam::ggiFvPatch::makeWeights(scalarField& w) const void Foam::ggiFvPatch::makeWeights(fvsPatchScalarField& w) const
{ {
// Calculation of weighting factors is performed from the master // Calculation of weighting factors is performed from the master
// position, using reconstructed shadow cell centres // position, using reconstructed shadow cell centres
@ -84,7 +85,12 @@ void Foam::ggiFvPatch::makeWeights(scalarField& w) const
else else
{ {
// Pick up weights from the master side // Pick up weights from the master side
scalarField masterWeights(shadow().size()); fvsPatchScalarField masterWeights
(
shadow(),
w.dimensionedInternalField()
);
shadow().makeWeights(masterWeights); shadow().makeWeights(masterWeights);
scalarField oneMinusW = 1 - masterWeights; scalarField oneMinusW = 1 - masterWeights;
@ -102,7 +108,7 @@ void Foam::ggiFvPatch::makeWeights(scalarField& w) const
// Make patch face - neighbour cell distances // Make patch face - neighbour cell distances
void Foam::ggiFvPatch::makeDeltaCoeffs(scalarField& dc) const void Foam::ggiFvPatch::makeDeltaCoeffs(fvsPatchScalarField& dc) const
{ {
if (ggiPolyPatch_.master()) if (ggiPolyPatch_.master())
{ {
@ -120,8 +126,14 @@ void Foam::ggiFvPatch::makeDeltaCoeffs(scalarField& dc) const
} }
else else
{ {
scalarField masterDeltas(shadow().size()); fvsPatchScalarField masterDeltas
(
shadow(),
dc.dimensionedInternalField()
);
shadow().makeDeltaCoeffs(masterDeltas); shadow().makeDeltaCoeffs(masterDeltas);
dc = interpolate(masterDeltas); dc = interpolate(masterDeltas);
if (bridgeOverlap()) if (bridgeOverlap())
@ -135,7 +147,7 @@ void Foam::ggiFvPatch::makeDeltaCoeffs(scalarField& dc) const
// Make patch face non-orthogonality correction vectors // Make patch face non-orthogonality correction vectors
void Foam::ggiFvPatch::makeCorrVecs(vectorField& cv) const void Foam::ggiFvPatch::makeCorrVecs(fvsPatchVectorField& cv) const
{ {
// Non-orthogonality correction on a ggi interface // Non-orthogonality correction on a ggi interface
// MB, 7/April/2009 // MB, 7/April/2009
@ -239,7 +251,7 @@ const Foam::labelList& Foam::ggiFvPatch::zoneAddressing() const
} }
const Foam::labelListList& Foam::ggiFvPatch::addressing() const const Foam::labelListList& Foam::ggiFvPatch::ggiAddressing() const
{ {
if (ggiPolyPatch_.master()) if (ggiPolyPatch_.master())
{ {
@ -264,7 +276,7 @@ const Foam::mapDistribute& Foam::ggiFvPatch::map() const
} }
const Foam::scalarListList& Foam::ggiFvPatch::weights() const const Foam::scalarListList& Foam::ggiFvPatch::ggiWeights() const
{ {
if (ggiPolyPatch_.master()) if (ggiPolyPatch_.master())
{ {
@ -325,7 +337,7 @@ void Foam::ggiFvPatch::expandCrMatrixToZone(crMatrix& patchP) const
{ {
nZoneEntries += zoneColsFF[zfI].size(); nZoneEntries += zoneColsFF[zfI].size();
} }
// Reconstruct matrix // Reconstruct matrix
labelList zoneRowStart(zoneSize() + 1); labelList zoneRowStart(zoneSize() + 1);
labelList zoneCols(nZoneEntries); labelList zoneCols(nZoneEntries);
@ -334,12 +346,12 @@ void Foam::ggiFvPatch::expandCrMatrixToZone(crMatrix& patchP) const
zoneRowStart[0] = 0; zoneRowStart[0] = 0;
// Reset nZoneEntries for use as a counter // Reset nZoneEntries for use as a counter
nZoneEntries = 0; nZoneEntries = 0;
forAll(zoneColsFF, zfI) forAll(zoneColsFF, zfI)
{ {
const labelField& curCols = zoneColsFF[zfI]; const labelField& curCols = zoneColsFF[zfI];
const scalarField& corCoeffs = zoneCoeffsFF[zfI]; const scalarField& corCoeffs = zoneCoeffsFF[zfI];
zoneRowStart[zfI + 1] = zoneRowStart[zfI] + curCols.size(); zoneRowStart[zfI + 1] = zoneRowStart[zfI] + curCols.size();
forAll (curCols, coeffI) forAll (curCols, coeffI)
@ -358,7 +370,7 @@ void Foam::ggiFvPatch::expandCrMatrixToZone(crMatrix& patchP) const
); );
// Set coeffs // Set coeffs
patchP.coeffs() = zoneCoeffs; patchP.coeffs() = zoneCoeffs;
} }
} }

View file

@ -67,13 +67,13 @@ protected:
// Protected Member functions // Protected Member functions
//- Make patch weighting factors //- Make patch weighting factors
virtual void makeWeights(scalarField&) const; virtual void makeWeights(fvsPatchScalarField&) const;
//- Make patch face - neighbour cell distances //- Make patch face - neighbour cell distances
virtual void makeDeltaCoeffs(scalarField&) const; virtual void makeDeltaCoeffs(fvsPatchScalarField&) const;
//- Make patch face non-orthogonality correction vectors //- Make patch face non-orthogonality correction vectors
virtual void makeCorrVecs(vectorField&) const; virtual void makeCorrVecs(fvsPatchVectorField&) const;
public: public:
@ -180,7 +180,7 @@ public:
//- Return addressing. Master side returns own addressing and //- Return addressing. Master side returns own addressing and
// slave side returns addressing from master // slave side returns addressing from master
virtual const labelListList& addressing() const; virtual const labelListList& ggiAddressing() const;
//- Is the patch localised on a single processor //- Is the patch localised on a single processor
virtual bool localParallel() const; virtual bool localParallel() const;
@ -190,7 +190,7 @@ public:
//- Return weights. Master side returns own weights and //- Return weights. Master side returns own weights and
// slave side returns weights from master // slave side returns weights from master
virtual const scalarListList& weights() const; virtual const scalarListList& ggiWeights() const;
//- Return face transformation tensor //- Return face transformation tensor
virtual const tensorField& forwardT() const virtual const tensorField& forwardT() const

View file

@ -34,8 +34,10 @@ Contributor
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "mixingPlaneFvPatch.H" #include "mixingPlaneFvPatch.H"
#include "addToRunTimeSelectionTable.H" #include "fvPatchFields.H"
#include "fvsPatchFields.H"
#include "fvBoundaryMesh.H" #include "fvBoundaryMesh.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -55,7 +57,7 @@ Foam::mixingPlaneFvPatch::~mixingPlaneFvPatch()
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
// Make patch weighting factors // Make patch weighting factors
void Foam::mixingPlaneFvPatch::makeWeights(scalarField& w) const void Foam::mixingPlaneFvPatch::makeWeights(fvsPatchScalarField& w) const
{ {
// Calculation of weighting factors is performed from the master // Calculation of weighting factors is performed from the master
// position, using reconstructed shadow cell centres // position, using reconstructed shadow cell centres
@ -76,7 +78,12 @@ void Foam::mixingPlaneFvPatch::makeWeights(scalarField& w) const
else else
{ {
// Pick up weights from the master side // Pick up weights from the master side
scalarField masterWeights(shadow().size()); fvsPatchScalarField masterWeights
(
shadow(),
w.dimensionedInternalField()
);
shadow().makeWeights(masterWeights); shadow().makeWeights(masterWeights);
scalarField oneMinusW = 1 - masterWeights; scalarField oneMinusW = 1 - masterWeights;
@ -86,7 +93,7 @@ void Foam::mixingPlaneFvPatch::makeWeights(scalarField& w) const
} }
void Foam::mixingPlaneFvPatch::makeDeltaCoeffs(scalarField& dc) const void Foam::mixingPlaneFvPatch::makeDeltaCoeffs(fvsPatchScalarField& dc) const
{ {
if (mixingPlanePolyPatch_.master()) if (mixingPlanePolyPatch_.master())
{ {
@ -97,14 +104,20 @@ void Foam::mixingPlaneFvPatch::makeDeltaCoeffs(scalarField& dc) const
} }
else else
{ {
scalarField masterDeltas(shadow().size()); fvsPatchScalarField masterDeltas
(
shadow(),
dc.dimensionedInternalField()
);
shadow().makeDeltaCoeffs(masterDeltas); shadow().makeDeltaCoeffs(masterDeltas);
dc = interpolate(masterDeltas); dc = interpolate(masterDeltas);
} }
} }
void Foam::mixingPlaneFvPatch::makeCorrVecs(vectorField& cv) const void Foam::mixingPlaneFvPatch::makeCorrVecs(fvsPatchVectorField& cv) const
{ {
cv = vector::zero; cv = vector::zero;
#if 0 #if 0
@ -171,7 +184,7 @@ Foam::mixingPlaneFvPatch::shadowInterface() const
} }
const Foam::labelListList& Foam::mixingPlaneFvPatch::addressing() const const Foam::labelListList& Foam::mixingPlaneFvPatch::ggiAddressing() const
{ {
if (mixingPlanePolyPatch_.master()) if (mixingPlanePolyPatch_.master())
{ {
@ -184,7 +197,7 @@ const Foam::labelListList& Foam::mixingPlaneFvPatch::addressing() const
} }
const Foam::scalarListList& Foam::mixingPlaneFvPatch::weights() const const Foam::scalarListList& Foam::mixingPlaneFvPatch::ggiWeights() const
{ {
if (mixingPlanePolyPatch_.master()) if (mixingPlanePolyPatch_.master())
{ {

View file

@ -70,13 +70,13 @@ protected:
// Protected Member functions // Protected Member functions
//- Make patch weighting factors //- Make patch weighting factors
virtual void makeWeights(scalarField&) const; virtual void makeWeights(fvsPatchScalarField&) const;
//- Make patch face - neighbour cell distances //- Make patch face - neighbour cell distances
virtual void makeDeltaCoeffs(scalarField&) const; virtual void makeDeltaCoeffs(fvsPatchScalarField&) const;
//- Make patch face non-orthogonality correction vectors //- Make patch face non-orthogonality correction vectors
virtual void makeCorrVecs(vectorField&) const; virtual void makeCorrVecs(fvsPatchVectorField&) const;
public: public:
@ -219,11 +219,11 @@ public:
//- Return addressing. Master side returns own addressing and //- Return addressing. Master side returns own addressing and
// slave side returns addressing from master // slave side returns addressing from master
virtual const labelListList& addressing() const; virtual const labelListList& ggiAddressing() const;
//- Return weights. Master side returns own weights and //- Return weights. Master side returns own weights and
// slave side returns weights from master // slave side returns weights from master
virtual const scalarListList& weights() const; virtual const scalarListList& ggiWeights() const;
//- Return face transformation tensor //- Return face transformation tensor
virtual const tensorField& forwardT() const virtual const tensorField& forwardT() const

View file

@ -27,8 +27,10 @@ Author
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "overlapGgiFvPatch.H" #include "overlapGgiFvPatch.H"
#include "addToRunTimeSelectionTable.H" #include "fvPatchFields.H"
#include "fvsPatchFields.H"
#include "fvBoundaryMesh.H" #include "fvBoundaryMesh.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -42,7 +44,7 @@ namespace Foam
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
// Make patch weighting factors // Make patch weighting factors
void Foam::overlapGgiFvPatch::makeWeights(scalarField& w) const void Foam::overlapGgiFvPatch::makeWeights(fvsPatchScalarField& w) const
{ {
// Calculation of weighting factors is performed from the master // Calculation of weighting factors is performed from the master
// position, using reconstructed shadow cell centres // position, using reconstructed shadow cell centres
@ -64,7 +66,12 @@ void Foam::overlapGgiFvPatch::makeWeights(scalarField& w) const
else else
{ {
// Pick up weights from the master side // Pick up weights from the master side
scalarField masterWeights(shadow().size()); fvsPatchScalarField masterWeights
(
shadow(),
w.dimensionedInternalField()
);
shadow().makeWeights(masterWeights); shadow().makeWeights(masterWeights);
w = interpolate(1 - masterWeights); w = interpolate(1 - masterWeights);
@ -73,7 +80,7 @@ void Foam::overlapGgiFvPatch::makeWeights(scalarField& w) const
// Make patch face - neighbour cell distances // Make patch face - neighbour cell distances
void Foam::overlapGgiFvPatch::makeDeltaCoeffs(scalarField& dc) const void Foam::overlapGgiFvPatch::makeDeltaCoeffs(fvsPatchScalarField& dc) const
{ {
if (overlapGgiPolyPatch_.master()) if (overlapGgiPolyPatch_.master())
{ {
@ -84,14 +91,20 @@ void Foam::overlapGgiFvPatch::makeDeltaCoeffs(scalarField& dc) const
} }
else else
{ {
scalarField masterDeltas(shadow().size()); fvsPatchScalarField masterDeltas
(
shadow(),
dc.dimensionedInternalField()
);
shadow().makeDeltaCoeffs(masterDeltas); shadow().makeDeltaCoeffs(masterDeltas);
dc = interpolate(masterDeltas); dc = interpolate(masterDeltas);
} }
} }
void Foam::overlapGgiFvPatch::makeCorrVecs(vectorField& cv) const void Foam::overlapGgiFvPatch::makeCorrVecs(fvsPatchVectorField& cv) const
{ {
// Non-orthogonality correction on a ggi interface // Non-orthogonality correction on a ggi interface
// MB, 7/April/2009 // MB, 7/April/2009

View file

@ -74,13 +74,13 @@ protected:
// Protected Member functions // Protected Member functions
//- Make patch weighting factors //- Make patch weighting factors
virtual void makeWeights(scalarField&) const; virtual void makeWeights(fvsPatchScalarField&) const;
//- Make patch face - neighbour cell distances //- Make patch face - neighbour cell distances
virtual void makeDeltaCoeffs(scalarField&) const; virtual void makeDeltaCoeffs(fvsPatchScalarField&) const;
//- Make patch face non-orthogonality correction vectors //- Make patch face non-orthogonality correction vectors
virtual void makeCorrVecs(vectorField&) const; virtual void makeCorrVecs(fvsPatchVectorField&) const;
public: public:
@ -99,10 +99,9 @@ public:
{} {}
// Destructor //- Destructor
virtual ~overlapGgiFvPatch()
virtual ~overlapGgiFvPatch() {}
{}
// Member functions // Member functions

View file

@ -24,9 +24,10 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "processorFvPatch.H" #include "processorFvPatch.H"
#include "addToRunTimeSelectionTable.H"
#include "transformField.H"
#include "crMatrix.H" #include "crMatrix.H"
#include "transformField.H"
#include "fvPatchFields.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -41,7 +42,7 @@ addToRunTimeSelectionTable(fvPatch, processorFvPatch, polyPatch);
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
void processorFvPatch::makeWeights(scalarField& w) const void processorFvPatch::makeWeights(fvsPatchScalarField& w) const
{ {
if (Pstream::parRun()) if (Pstream::parRun())
{ {
@ -75,7 +76,7 @@ void processorFvPatch::makeWeights(scalarField& w) const
} }
void processorFvPatch::makeDeltaCoeffs(scalarField& dc) const void processorFvPatch::makeDeltaCoeffs(fvsPatchScalarField& dc) const
{ {
if (Pstream::parRun()) if (Pstream::parRun())
{ {

View file

@ -64,10 +64,10 @@ protected:
// Protected Member functions // Protected Member functions
//- Make patch weighting factors //- Make patch weighting factors
void makeWeights(scalarField&) const; void makeWeights(fvsPatchScalarField&) const;
//- Make patch face - neighbour cell distances //- Make patch face - neighbour cell distances
void makeDeltaCoeffs(scalarField&) const; void makeDeltaCoeffs(fvsPatchScalarField&) const;
public: public:

View file

@ -30,11 +30,13 @@ Author
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "regionCoupleFvPatch.H" #include "regionCoupleFvPatch.H"
#include "addToRunTimeSelectionTable.H" #include "foamTime.H"
#include "fvMesh.H" #include "fvMesh.H"
#include "fvBoundaryMesh.H" #include "fvBoundaryMesh.H"
#include "foamTime.H"
#include "mapDistribute.H" #include "mapDistribute.H"
#include "fvPatchFields.H"
#include "fvsPatchFields.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -54,7 +56,7 @@ Foam::regionCoupleFvPatch::~regionCoupleFvPatch()
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
// Make patch weighting factors // Make patch weighting factors
void Foam::regionCoupleFvPatch::makeWeights(scalarField& w) const void Foam::regionCoupleFvPatch::makeWeights(fvsPatchScalarField& w) const
{ {
if (rcPolyPatch_.coupled()) if (rcPolyPatch_.coupled())
{ {
@ -82,7 +84,12 @@ void Foam::regionCoupleFvPatch::makeWeights(scalarField& w) const
else else
{ {
// Pick up weights from the master side // Pick up weights from the master side
scalarField masterWeights(shadow().size()); fvsPatchScalarField masterWeights
(
shadow(),
w.dimensionedInternalField()
);
shadow().makeWeights(masterWeights); shadow().makeWeights(masterWeights);
scalarField oneMinusW = 1 - masterWeights; scalarField oneMinusW = 1 - masterWeights;
@ -105,7 +112,7 @@ void Foam::regionCoupleFvPatch::makeWeights(scalarField& w) const
// Make patch face - neighbour cell distances // Make patch face - neighbour cell distances
void Foam::regionCoupleFvPatch::makeDeltaCoeffs(scalarField& dc) const void Foam::regionCoupleFvPatch::makeDeltaCoeffs(fvsPatchScalarField& dc) const
{ {
if (rcPolyPatch_.coupled()) if (rcPolyPatch_.coupled())
{ {
@ -125,8 +132,14 @@ void Foam::regionCoupleFvPatch::makeDeltaCoeffs(scalarField& dc) const
} }
else else
{ {
scalarField masterDeltas(shadow().size()); fvsPatchScalarField masterDeltas
(
shadow(),
dc.dimensionedInternalField()
);
shadow().makeDeltaCoeffs(masterDeltas); shadow().makeDeltaCoeffs(masterDeltas);
dc = interpolate(masterDeltas); dc = interpolate(masterDeltas);
if (bridgeOverlap()) if (bridgeOverlap())
@ -145,7 +158,7 @@ void Foam::regionCoupleFvPatch::makeDeltaCoeffs(scalarField& dc) const
// Make patch face non-orthogonality correction vectors // Make patch face non-orthogonality correction vectors
void Foam::regionCoupleFvPatch::makeCorrVecs(vectorField& cv) const void Foam::regionCoupleFvPatch::makeCorrVecs(fvsPatchVectorField& cv) const
{ {
if (rcPolyPatch_.coupled()) if (rcPolyPatch_.coupled())
{ {
@ -284,7 +297,7 @@ const Foam::labelList& Foam::regionCoupleFvPatch::zoneAddressing() const
} }
const Foam::labelListList& Foam::regionCoupleFvPatch::addressing() const const Foam::labelListList& Foam::regionCoupleFvPatch::ggiAddressing() const
{ {
if (rcPolyPatch_.master()) if (rcPolyPatch_.master())
{ {
@ -309,7 +322,7 @@ const Foam::mapDistribute& Foam::regionCoupleFvPatch::map() const
} }
const Foam::scalarListList& Foam::regionCoupleFvPatch::weights() const const Foam::scalarListList& Foam::regionCoupleFvPatch::ggiWeights() const
{ {
if (rcPolyPatch_.master()) if (rcPolyPatch_.master())
{ {

View file

@ -70,13 +70,13 @@ protected:
// Protected Member functions // Protected Member functions
//- Make patch weighting factors //- Make patch weighting factors
virtual void makeWeights(scalarField&) const; virtual void makeWeights(fvsPatchScalarField&) const;
//- Make patch face - neighbour cell distances //- Make patch face - neighbour cell distances
virtual void makeDeltaCoeffs(scalarField&) const; virtual void makeDeltaCoeffs(fvsPatchScalarField&) const;
//- Make patch face non-orthogonality correction vectors //- Make patch face non-orthogonality correction vectors
virtual void makeCorrVecs(vectorField&) const; virtual void makeCorrVecs(fvsPatchVectorField&) const;
public: public:
@ -189,7 +189,7 @@ public:
//- Return addressing. Master side returns own addressing and //- Return addressing. Master side returns own addressing and
// slave side returns addressing from master // slave side returns addressing from master
virtual const labelListList& addressing() const; virtual const labelListList& ggiAddressing() const;
//- Is the patch localised on a single processor //- Is the patch localised on a single processor
virtual bool localParallel() const; virtual bool localParallel() const;
@ -199,7 +199,7 @@ public:
//- Return weights. Master side returns own weights and //- Return weights. Master side returns own weights and
// slave side returns weights from master // slave side returns weights from master
virtual const scalarListList& weights() const; virtual const scalarListList& ggiWeights() const;
//- Return face transformation tensor //- Return face transformation tensor
virtual const tensorField& forwardT() const virtual const tensorField& forwardT() const

View file

@ -26,6 +26,7 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "symmetryFvPatch.H" #include "symmetryFvPatch.H"
#include "fvPatchFields.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -40,7 +41,7 @@ addToRunTimeSelectionTable(fvPatch, symmetryFvPatch, polyPatch);
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
void symmetryFvPatch::makeCorrVecs(vectorField& cv) const void symmetryFvPatch::makeCorrVecs(fvsPatchVectorField& cv) const
{ {
// Non-orthogonal correction not allowed. HJ, 16/Apr/2009 // Non-orthogonal correction not allowed. HJ, 16/Apr/2009
cv = vector::zero; cv = vector::zero;

View file

@ -57,7 +57,7 @@ protected:
// Protected Member Functions // Protected Member Functions
//- Make patch face non-orthogonality correction vectors //- Make patch face non-orthogonality correction vectors
virtual void makeCorrVecs(vectorField&) const; virtual void makeCorrVecs(fvsPatchVectorField&) const;
public: public:

View file

@ -26,6 +26,7 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "wedgeFvPatch.H" #include "wedgeFvPatch.H"
#include "fvPatchFields.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -41,7 +42,7 @@ addToRunTimeSelectionTable(fvPatch, wedgeFvPatch, polyPatch);
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
void wedgeFvPatch::makeCorrVecs(vectorField& cv) const void wedgeFvPatch::makeCorrVecs(fvsPatchVectorField& cv) const
{ {
// Non-orthogonal correction not allowed. HJ, 16/Apr/2009 // Non-orthogonal correction not allowed. HJ, 16/Apr/2009
cv = vector::zero; cv = vector::zero;

View file

@ -60,7 +60,7 @@ protected:
// Protected Member Functions // Protected Member Functions
//- Make patch face non-orthogonality correction vectors //- Make patch face non-orthogonality correction vectors
virtual void makeCorrVecs(vectorField&) const; virtual void makeCorrVecs(fvsPatchVectorField&) const;
public: public:

View file

@ -24,8 +24,9 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "cohesiveFvPatch.H" #include "cohesiveFvPatch.H"
#include "addToRunTimeSelectionTable.H"
#include "fvMesh.H" #include "fvMesh.H"
#include "fvsPatchFields.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -39,7 +40,7 @@ namespace Foam
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
void Foam::cohesiveFvPatch::makeCorrVecs(vectorField& cv) const void Foam::cohesiveFvPatch::makeCorrVecs(fvsPatchVectorField& cv) const
{ {
cv = vector::zero; cv = vector::zero;
} }

View file

@ -62,7 +62,7 @@ protected:
// Protected Member Functions // Protected Member Functions
//- Make patch face non-orthogonality correction vectors //- Make patch face non-orthogonality correction vectors
virtual void makeCorrVecs(vectorField&) const; virtual void makeCorrVecs(fvsPatchVectorField&) const;
public: public:

View file

@ -24,6 +24,7 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "directMappedFvPatch.H" #include "directMappedFvPatch.H"
#include "fvPatchFields.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -36,7 +37,7 @@ namespace Foam
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
void Foam::directMappedFvPatch::makeCorrVecs(vectorField& cv) const void Foam::directMappedFvPatch::makeCorrVecs(fvsPatchVectorField& cv) const
{ {
cv = vector::zero; cv = vector::zero;
} }

View file

@ -57,7 +57,7 @@ protected:
// Protected Member Functions // Protected Member Functions
//- Make patch face non-orthogonality correction vectors //- Make patch face non-orthogonality correction vectors
virtual void makeCorrVecs(vectorField&) const; virtual void makeCorrVecs(fvsPatchVectorField&) const;
public: public:

View file

@ -24,6 +24,7 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "directMappedWallFvPatch.H" #include "directMappedWallFvPatch.H"
#include "fvPatchFields.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -36,7 +37,7 @@ namespace Foam
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
void Foam::directMappedWallFvPatch::makeCorrVecs(vectorField& cv) const void Foam::directMappedWallFvPatch::makeCorrVecs(fvsPatchVectorField& cv) const
{ {
cv = vector::zero; cv = vector::zero;
} }

View file

@ -57,7 +57,7 @@ protected:
// Protected Member Functions // Protected Member Functions
//- Make patch face non-orthogonality correction vectors //- Make patch face non-orthogonality correction vectors
virtual void makeCorrVecs(vectorField&) const; virtual void makeCorrVecs(fvsPatchVectorField&) const;
public: public:

View file

@ -26,6 +26,7 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "wallFvPatch.H" #include "wallFvPatch.H"
#include "fvPatchFields.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -41,7 +42,7 @@ addToRunTimeSelectionTable(fvPatch, wallFvPatch, polyPatch);
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
void wallFvPatch::makeCorrVecs(vectorField& cv) const void wallFvPatch::makeCorrVecs(fvsPatchVectorField& cv) const
{ {
cv = vector::zero; cv = vector::zero;
} }

View file

@ -56,7 +56,7 @@ protected:
// Protected Member Functions // Protected Member Functions
//- Make patch face non-orthogonality correction vectors //- Make patch face non-orthogonality correction vectors
virtual void makeCorrVecs(vectorField&) const; virtual void makeCorrVecs(fvsPatchVectorField&) const;
public: public:

View file

@ -115,7 +115,9 @@ tmp<vectorField> fvPatch::Cn() const
const unallocLabelList& faceCells = this->faceCells(); const unallocLabelList& faceCells = this->faceCells();
// Get reference to global cell centres // Get reference to global cell centres
const vectorField& gcc = boundaryMesh().mesh().cellCentres(); // Bugfix: access cell centres from fvMesh data, not polyMesh.
// HJ, 30/Nov/2017
const vectorField& gcc = boundaryMesh().mesh().C().internalField();
forAll (faceCells, faceI) forAll (faceCells, faceI)
{ {
@ -150,19 +152,19 @@ tmp<vectorField> fvPatch::delta() const
} }
void fvPatch::makeWeights(scalarField& w) const void fvPatch::makeWeights(fvsPatchScalarField& w) const
{ {
w = 1.0; w = 1.0;
} }
void fvPatch::makeDeltaCoeffs(scalarField& dc) const void fvPatch::makeDeltaCoeffs(fvsPatchScalarField& dc) const
{ {
dc = 1.0/(nf() & delta()); dc = 1.0/(nf() & delta());
} }
void fvPatch::makeCorrVecs(vectorField& cv) const void fvPatch::makeCorrVecs(fvsPatchVectorField& cv) const
{ {
cv = vector::zero; cv = vector::zero;
} }

View file

@ -44,6 +44,9 @@ SourceFiles
#include "primitiveFields.H" #include "primitiveFields.H"
#include "SubField.H" #include "SubField.H"
#include "fvPatchFieldsFwd.H" #include "fvPatchFieldsFwd.H"
#include "fvsPatchFieldsFwd.H"
#include "slicedVolFieldsFwd.H"
#include "slicedSurfaceFieldsFwd.H"
#include "autoPtr.H" #include "autoPtr.H"
#include "runTimeSelectionTables.H" #include "runTimeSelectionTables.H"
@ -52,6 +55,7 @@ SourceFiles
namespace Foam namespace Foam
{ {
class fvMesh;
class fvBoundaryMesh; class fvBoundaryMesh;
class surfaceInterpolation; class surfaceInterpolation;
@ -83,26 +87,48 @@ protected:
// Protected Member Functions // Protected Member Functions
//- Make patch weighting factors // Geometry correction functions
virtual void makeWeights(scalarField&) const;
//- Make patch face - neighbour cell distances //- Make mesh face centres
virtual void makeDeltaCoeffs(scalarField&) const; virtual void makeCf(slicedSurfaceVectorField&) const
{}
//- Make patch face non-orthogonality correction vectors //- Make mesh face areas
virtual void makeCorrVecs(vectorField&) const; virtual void makeSf(slicedSurfaceVectorField&) const
{}
//- Initialise the patches for moving points //- Make mesh cell centres
virtual void initMovePoints(); virtual void makeC(slicedVolVectorField&) const
{}
//- Correct patches after moving points //- Make mesh cell volumes
virtual void movePoints(); virtual void makeV(scalarField&) const
{}
// Discretisation correction functions
//- Make patch weighting factors
virtual void makeWeights(fvsPatchScalarField&) const;
//- Make patch face - neighbour cell distances
virtual void makeDeltaCoeffs(fvsPatchScalarField&) const;
//- Make patch face non-orthogonality correction vectors
virtual void makeCorrVecs(fvsPatchVectorField&) const;
//- Initialise the patches for moving points
virtual void initMovePoints();
//- Correct patches after moving points
virtual void movePoints();
public: public:
typedef fvBoundaryMesh BoundaryMesh; typedef fvBoundaryMesh BoundaryMesh;
friend class fvMesh;
friend class fvBoundaryMesh; friend class fvBoundaryMesh;
friend class surfaceInterpolation; friend class surfaceInterpolation;