Added master() function in lduInterface: better parallel ILU preconditioning
This commit is contained in:
parent
138d4a157d
commit
7794e76417
17 changed files with 324 additions and 36 deletions
|
@ -132,9 +132,8 @@ public:
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// Destructor
|
//- Destructor
|
||||||
|
virtual ~coupledFaPatch();
|
||||||
virtual ~coupledFaPatch();
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
|
@ -98,16 +98,21 @@ public:
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// Destructor
|
//- Destructor
|
||||||
|
virtual ~cyclicFaPatch()
|
||||||
virtual ~cyclicFaPatch()
|
{}
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// Member functions
|
// Member functions
|
||||||
|
|
||||||
// Access
|
// Access
|
||||||
|
|
||||||
|
//- Is this the master side? Yes: it contains both sets of faces
|
||||||
|
virtual bool master() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
//- Return face transformation tensor
|
//- Return face transformation tensor
|
||||||
virtual const tensorField& forwardT() const
|
virtual const tensorField& forwardT() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -176,7 +176,7 @@ public:
|
||||||
return size();
|
return size();
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Return processor number
|
//- Return processor number
|
||||||
int myProcNo() const
|
int myProcNo() const
|
||||||
{
|
{
|
||||||
return myProcNo_;
|
return myProcNo_;
|
||||||
|
@ -201,6 +201,12 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//- Is this the master side?
|
||||||
|
virtual bool master() const
|
||||||
|
{
|
||||||
|
return (myProcNo_ < neighbProcNo_);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Communications support
|
// Communications support
|
||||||
|
|
||||||
|
|
|
@ -92,9 +92,8 @@ public:
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// Destructor
|
//- Destructor
|
||||||
|
virtual ~coupledFvPatch();
|
||||||
virtual ~coupledFvPatch();
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
@ -107,6 +106,12 @@ public:
|
||||||
return coupledPolyPatch_.coupled();
|
return coupledPolyPatch_.coupled();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//- Return true if patch is coupled
|
||||||
|
virtual bool master() const
|
||||||
|
{
|
||||||
|
return coupledPolyPatch_.master();
|
||||||
|
}
|
||||||
|
|
||||||
//- Return face transformation tensor
|
//- Return face transformation tensor
|
||||||
const tensorField& forwardT() const
|
const tensorField& forwardT() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -136,14 +136,14 @@ public:
|
||||||
static autoPtr<fvPatch> New(const polyPatch&, const fvBoundaryMesh&);
|
static autoPtr<fvPatch> New(const polyPatch&, const fvBoundaryMesh&);
|
||||||
|
|
||||||
|
|
||||||
// Destructor
|
//- Destructor
|
||||||
|
|
||||||
virtual ~fvPatch();
|
virtual ~fvPatch();
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
// Access
|
// Access
|
||||||
|
|
||||||
//- Return the polyPatch
|
//- Return the polyPatch
|
||||||
const polyPatch& patch() const
|
const polyPatch& patch() const
|
||||||
|
|
|
@ -26,6 +26,7 @@ License
|
||||||
#include "lduAddressing.H"
|
#include "lduAddressing.H"
|
||||||
#include "extendedLduAddressing.H"
|
#include "extendedLduAddressing.H"
|
||||||
#include "demandDrivenData.H"
|
#include "demandDrivenData.H"
|
||||||
|
#include "dynamicLabelList.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
@ -170,6 +171,120 @@ void Foam::lduAddressing::calcLosortStart() const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::lduAddressing::calcInternalBoundaryEqnCoeffs
|
||||||
|
(
|
||||||
|
const lduInterfaceFieldPtrsList& lduInterfaces
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
if
|
||||||
|
(
|
||||||
|
internalEqnCoeffsPtr_
|
||||||
|
|| flippedInternalEqnCoeffsPtr_
|
||||||
|
|| boundaryEqnCoeffs_.size()
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorIn("lduAddressing::calcInternalBoundaryCoeffs() const")
|
||||||
|
<< "Internal/boundary equation coefficients already calculated."
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get number of internal coefficients (number of faces)
|
||||||
|
const label nInternalCoeffs = upperAddr().size();
|
||||||
|
|
||||||
|
// Allocate insertion-friendly storage with enough memory
|
||||||
|
dynamicLabelList internalCoeffs(nInternalCoeffs);
|
||||||
|
dynamicLabelList flippedInternalCoeffs(nInternalCoeffs);
|
||||||
|
|
||||||
|
// Initialise boundary equation coefficients for all coupled patches with
|
||||||
|
// enough storage
|
||||||
|
boundaryEqnCoeffs_.setSize(lduInterfaces.size());
|
||||||
|
forAll (lduInterfaces, intI)
|
||||||
|
{
|
||||||
|
if (lduInterfaces.set(intI))
|
||||||
|
{
|
||||||
|
boundaryEqnCoeffs_.set
|
||||||
|
(
|
||||||
|
intI,
|
||||||
|
new dynamicLabelList
|
||||||
|
(
|
||||||
|
lduInterfaces[intI].coupledInterface().faceCells().size()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// First, we need to mark boundary equations with associated interface
|
||||||
|
// index. Note: this does not take into account corner cells that have
|
||||||
|
// faces on more than one coupled interface. Don't care about them during
|
||||||
|
// preconditioning at the moment. VV, 23/Jun/2017.
|
||||||
|
labelList boundaryEqnInterfaceIndex(size_, -1);
|
||||||
|
|
||||||
|
// Loop through interfaces
|
||||||
|
forAll (lduInterfaces, intI)
|
||||||
|
{
|
||||||
|
// Check whether the interface is set
|
||||||
|
if (lduInterfaces.set(intI))
|
||||||
|
{
|
||||||
|
// Get boundary equations/rows (face cells)
|
||||||
|
const unallocLabelList& boundaryEqns =
|
||||||
|
lduInterfaces[intI].coupledInterface().faceCells();
|
||||||
|
|
||||||
|
// Loop through boundary equations and mark them
|
||||||
|
forAll (boundaryEqns, beI)
|
||||||
|
{
|
||||||
|
boundaryEqnInterfaceIndex[boundaryEqns[beI]] = intI;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get lower/upper (owner/neighbour) addressing
|
||||||
|
const unallocLabelList& own = lowerAddr();
|
||||||
|
const unallocLabelList& nei = upperAddr();
|
||||||
|
|
||||||
|
// Loop through upper triangle and filter coefficients (faces)
|
||||||
|
forAll (own, coeffI)
|
||||||
|
{
|
||||||
|
// Get owner/neighbour (row/column) for this coefficient
|
||||||
|
const label& ownI = own[coeffI];
|
||||||
|
const label& neiI = nei[coeffI];
|
||||||
|
|
||||||
|
if
|
||||||
|
(
|
||||||
|
boundaryEqnInterfaceIndex[ownI] != -1
|
||||||
|
&& boundaryEqnInterfaceIndex[neiI] != -1
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Both owner and neigbour are at the boundary, append to boundary
|
||||||
|
// coeffs list. Note: it is possible that owner/neighbour do not
|
||||||
|
// have the same interface index since we ignored corner cells. Take
|
||||||
|
// the owner index
|
||||||
|
boundaryEqnCoeffs_[boundaryEqnInterfaceIndex[ownI]].append(coeffI);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// If owner is a boundary cell and neighbour is not a boundary cell,
|
||||||
|
// we need to mark this face for flipping
|
||||||
|
if
|
||||||
|
(
|
||||||
|
boundaryEqnInterfaceIndex[ownI] != -1
|
||||||
|
&& boundaryEqnInterfaceIndex[neiI] == -1
|
||||||
|
)
|
||||||
|
{
|
||||||
|
flippedInternalCoeffs.append(coeffI);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
internalCoeffs.append(coeffI);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reuse dynamic lists to initialise data members
|
||||||
|
internalEqnCoeffsPtr_ = new labelList(internalCoeffs.xfer());
|
||||||
|
flippedInternalEqnCoeffsPtr_ = new labelList(flippedInternalCoeffs.xfer());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::lduAddressing::lduAddressing(const label nEqns)
|
Foam::lduAddressing::lduAddressing(const label nEqns)
|
||||||
|
@ -178,7 +293,10 @@ Foam::lduAddressing::lduAddressing(const label nEqns)
|
||||||
losortPtr_(NULL),
|
losortPtr_(NULL),
|
||||||
ownerStartPtr_(NULL),
|
ownerStartPtr_(NULL),
|
||||||
losortStartPtr_(NULL),
|
losortStartPtr_(NULL),
|
||||||
extendedAddr_(5)
|
extendedAddr_(5),
|
||||||
|
internalEqnCoeffsPtr_(NULL),
|
||||||
|
flippedInternalEqnCoeffsPtr_(NULL),
|
||||||
|
boundaryEqnCoeffs_()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
@ -189,6 +307,8 @@ Foam::lduAddressing::~lduAddressing()
|
||||||
deleteDemandDrivenData(losortPtr_);
|
deleteDemandDrivenData(losortPtr_);
|
||||||
deleteDemandDrivenData(ownerStartPtr_);
|
deleteDemandDrivenData(ownerStartPtr_);
|
||||||
deleteDemandDrivenData(losortStartPtr_);
|
deleteDemandDrivenData(losortStartPtr_);
|
||||||
|
deleteDemandDrivenData(internalEqnCoeffsPtr_);
|
||||||
|
deleteDemandDrivenData(flippedInternalEqnCoeffsPtr_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -284,4 +404,62 @@ Foam::lduAddressing::extendedAddr(const label p) const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const Foam::unallocLabelList& Foam::lduAddressing::internalEqnCoeffs
|
||||||
|
(
|
||||||
|
const lduInterfaceFieldPtrsList& lduInterfaces
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
if (!internalEqnCoeffsPtr_)
|
||||||
|
{
|
||||||
|
calcInternalBoundaryEqnCoeffs(lduInterfaces);
|
||||||
|
}
|
||||||
|
|
||||||
|
return *internalEqnCoeffsPtr_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const Foam::unallocLabelList& Foam::lduAddressing::flippedInternalEqnCoeffs
|
||||||
|
(
|
||||||
|
const lduInterfaceFieldPtrsList& lduInterfaces
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
if (!flippedInternalEqnCoeffsPtr_)
|
||||||
|
{
|
||||||
|
calcInternalBoundaryEqnCoeffs(lduInterfaces);
|
||||||
|
}
|
||||||
|
|
||||||
|
return *flippedInternalEqnCoeffsPtr_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const Foam::dynamicLabelList& Foam::lduAddressing::boundaryEqnCoeffs
|
||||||
|
(
|
||||||
|
const lduInterfaceFieldPtrsList& lduInterfaces,
|
||||||
|
const label intI
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
if (intI > lduInterfaces.size() - 1 || intI < 0)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"const Foam::PtrList<labelList>& "
|
||||||
|
"Foam::lduAddressing::boundaryEqnCoeffs"
|
||||||
|
"\n("
|
||||||
|
"\n const lduInterfaceFieldPtrsList& lduInterfaces,"
|
||||||
|
"\n const label p"
|
||||||
|
"\n) const"
|
||||||
|
) << "Invalid interface index specified: " << intI << nl
|
||||||
|
<< "Number of coupled interfaces: " << lduInterfaces.size()
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!boundaryEqnCoeffs_.set(intI))
|
||||||
|
{
|
||||||
|
calcInternalBoundaryEqnCoeffs(lduInterfaces);
|
||||||
|
}
|
||||||
|
|
||||||
|
return boundaryEqnCoeffs_[intI];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|
|
@ -98,6 +98,8 @@ SourceFiles
|
||||||
|
|
||||||
#include "labelList.H"
|
#include "labelList.H"
|
||||||
#include "lduSchedule.H"
|
#include "lduSchedule.H"
|
||||||
|
#include "lduInterfaceFieldPtrsList.H"
|
||||||
|
#include "boolList.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
@ -130,8 +132,27 @@ class lduAddressing
|
||||||
//- Losort start addressing
|
//- Losort start addressing
|
||||||
mutable labelList* losortStartPtr_;
|
mutable labelList* losortStartPtr_;
|
||||||
|
|
||||||
//- Extended addressing with p-order fill-in
|
|
||||||
mutable PtrList<extendedLduAddressing> extendedAddr_;
|
// Demand-driven data for ILU precondition with p-order fill in (ILUCp)
|
||||||
|
|
||||||
|
//- Extended addressing with p-order fill-in
|
||||||
|
mutable PtrList<extendedLduAddressing> extendedAddr_;
|
||||||
|
|
||||||
|
// Demand-driven data for parallelisation of ILU0 and Cholesky
|
||||||
|
// preconditioners where the order of factorisation is important
|
||||||
|
|
||||||
|
//- List of coefficients for internal equations (e.g. faces where
|
||||||
|
// at least one cell is internal cell)
|
||||||
|
mutable labelList* internalEqnCoeffsPtr_;
|
||||||
|
|
||||||
|
//- List of coefficients where the owner cell is at the boundary and
|
||||||
|
// the neighbour cell is internal. Needed for correct ordering
|
||||||
|
mutable labelList* flippedInternalEqnCoeffsPtr_;
|
||||||
|
|
||||||
|
//- PtrList of coefficients for boundary equations for each coupled
|
||||||
|
// interface (e.g. faces where both cells are boundary cells on a
|
||||||
|
// given processor patch)
|
||||||
|
mutable PtrList<dynamicLabelList> boundaryEqnCoeffs_;
|
||||||
|
|
||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
@ -151,6 +172,13 @@ class lduAddressing
|
||||||
//- Calculate losort start
|
//- Calculate losort start
|
||||||
void calcLosortStart() const;
|
void calcLosortStart() const;
|
||||||
|
|
||||||
|
//- Calculate internal/boundary equation coefficients given a list of
|
||||||
|
// interfaces
|
||||||
|
void calcInternalBoundaryEqnCoeffs
|
||||||
|
(
|
||||||
|
const lduInterfaceFieldPtrsList& lduInterfaces
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -202,6 +230,26 @@ public:
|
||||||
|
|
||||||
//- Return extended addressing given p index
|
//- Return extended addressing given p index
|
||||||
const extendedLduAddressing& extendedAddr(const label p) const;
|
const extendedLduAddressing& extendedAddr(const label p) const;
|
||||||
|
|
||||||
|
//- Return list of coefficients for internal equations
|
||||||
|
const unallocLabelList& internalEqnCoeffs
|
||||||
|
(
|
||||||
|
const lduInterfaceFieldPtrsList& lduInterfaces
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Return internal cell/boundary cell face flips
|
||||||
|
const unallocLabelList& flippedInternalEqnCoeffs
|
||||||
|
(
|
||||||
|
const lduInterfaceFieldPtrsList& lduInterfaces
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Return list of coefficients for boundary equations given list of
|
||||||
|
// ldu interface fields and coupled interface index
|
||||||
|
const dynamicLabelList& boundaryEqnCoeffs
|
||||||
|
(
|
||||||
|
const lduInterfaceFieldPtrsList& lduInterfaces,
|
||||||
|
const label intI
|
||||||
|
) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -91,6 +91,9 @@ public:
|
||||||
//- Return true if interface is coupled
|
//- Return true if interface is coupled
|
||||||
virtual bool coupled() const = 0;
|
virtual bool coupled() const = 0;
|
||||||
|
|
||||||
|
//- Does this side own the patch ?
|
||||||
|
virtual bool master() const = 0;
|
||||||
|
|
||||||
//- Return faceCell addressing
|
//- Return faceCell addressing
|
||||||
virtual const unallocLabelList& faceCells() const = 0;
|
virtual const unallocLabelList& faceCells() const = 0;
|
||||||
|
|
||||||
|
|
|
@ -102,6 +102,15 @@ public:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//- Does this side own the patch ?
|
||||||
|
// HACKED: the patch contains both master and slave
|
||||||
|
// This influences parallel Cholesky and ILU preconditioning
|
||||||
|
// Please use cyclicGgi instead. HJ, 22/Jun/2017
|
||||||
|
virtual bool master() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Interface transfer functions
|
// Interface transfer functions
|
||||||
|
|
||||||
|
|
|
@ -114,6 +114,12 @@ public:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//- Does this side own the patch ?
|
||||||
|
virtual bool master() const
|
||||||
|
{
|
||||||
|
return myProcNo() < neighbProcNo();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Communications support
|
// Communications support
|
||||||
|
|
||||||
|
|
|
@ -114,6 +114,12 @@ public:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//- Does this side own the patch ?
|
||||||
|
virtual bool master() const
|
||||||
|
{
|
||||||
|
return myProcNo() < neighbProcNo();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Communications support
|
// Communications support
|
||||||
|
|
||||||
|
|
|
@ -97,9 +97,8 @@ public:
|
||||||
coupledPointPatch(const pointBoundaryMesh& bm);
|
coupledPointPatch(const pointBoundaryMesh& bm);
|
||||||
|
|
||||||
|
|
||||||
// Destructor
|
//- Destructor
|
||||||
|
virtual ~coupledPointPatch();
|
||||||
virtual ~coupledPointPatch();
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
|
@ -116,9 +116,8 @@ public:
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Destructor
|
//- Destructor
|
||||||
|
virtual ~cyclicPointPatch();
|
||||||
virtual ~cyclicPointPatch();
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
|
@ -86,9 +86,8 @@ public:
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Destructor
|
//- Destructor
|
||||||
|
virtual ~coupledFacePointPatch();
|
||||||
virtual ~coupledFacePointPatch();
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
@ -100,6 +99,15 @@ public:
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//- Does this side own the patch ?
|
||||||
|
// HACKED: the patch contains both master and slave
|
||||||
|
// This influences parallel Cholesky and ILU preconditioning
|
||||||
|
// Please use cyclicGgi instead. HJ, 22/Jun/2017
|
||||||
|
virtual bool master() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -119,9 +119,8 @@ public:
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Destructor
|
//- Destructor
|
||||||
|
virtual ~globalPointPatch();
|
||||||
virtual ~globalPointPatch();
|
|
||||||
|
|
||||||
|
|
||||||
// Member functions
|
// Member functions
|
||||||
|
@ -153,6 +152,15 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//- Does this side own the patch ?
|
||||||
|
// HACKED: the patch contains both master and slave
|
||||||
|
// This influences parallel Cholesky and ILU preconditioning
|
||||||
|
// HJ, 22/Jun/2017
|
||||||
|
virtual bool master() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
//- Return number of faces
|
//- Return number of faces
|
||||||
virtual label nFaces() const
|
virtual label nFaces() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -197,9 +197,9 @@ public:
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Destructor
|
//- Destructor
|
||||||
|
virtual ~globalTetPolyPatch();
|
||||||
|
|
||||||
virtual ~globalTetPolyPatch();
|
|
||||||
|
|
||||||
// Member functions
|
// Member functions
|
||||||
|
|
||||||
|
@ -223,6 +223,15 @@ public:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//- Does this side own the patch ?
|
||||||
|
// HACKED: the patch contains both master and slave
|
||||||
|
// This influences parallel Cholesky and ILU preconditioning
|
||||||
|
// HJ, 22/Jun/2017
|
||||||
|
virtual bool master() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
//- Return total number of shared points
|
//- Return total number of shared points
|
||||||
virtual label globalPointSize() const
|
virtual label globalPointSize() const
|
||||||
{
|
{
|
||||||
|
@ -292,6 +301,7 @@ public:
|
||||||
return meshCutEdgeMask_;
|
return meshCutEdgeMask_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Access functions for demand driven data
|
// Access functions for demand driven data
|
||||||
|
|
||||||
//- Return list of edge indices for edges local to the patch
|
//- Return list of edge indices for edges local to the patch
|
||||||
|
|
|
@ -172,9 +172,8 @@ public:
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Destructor
|
//- Destructor
|
||||||
|
virtual ~processorTetPolyPatch();
|
||||||
virtual ~processorTetPolyPatch();
|
|
||||||
|
|
||||||
|
|
||||||
// Member functions
|
// Member functions
|
||||||
|
@ -192,15 +191,15 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Is this a master patch
|
//- Is this a master patch
|
||||||
bool isMaster() const
|
bool master() const
|
||||||
{
|
{
|
||||||
return myProcNo() < neighbProcNo();
|
return myProcNo() < neighbProcNo();
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Is this a slave patch
|
//- Is this a slave patch
|
||||||
bool isSlave() const
|
bool slave() const
|
||||||
{
|
{
|
||||||
return !isMaster();
|
return !master();
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Return the underlying processorPolyPatch
|
//- Return the underlying processorPolyPatch
|
||||||
|
|
Reference in a new issue