Version of DILUpreconditioner that uses preconditioning across processor (and coupled) boundaries. Based on 'Parallel Preconditioners' chapter from 'Iterative Methods for Sparse Linear Systems' by Yousef Saad. More...
#include <distributedDILUPreconditioner.H>


Public Member Functions | |
| TypeName ("distributedDILU") | |
| Runtime type information. | |
| distributedDILUPreconditioner (const lduMatrix::solver &, const dictionary &solverControlsUnused) | |
| Construct from matrix components and preconditioner solver controls. | |
| virtual | ~distributedDILUPreconditioner () |
| Destructor. | |
| virtual void | precondition (solveScalarField &wA, const solveScalarField &rA, const direction cmpt=0) const |
| Return wA the preconditioned form of residual rA. | |
| virtual void | setFinished (const solverPerformance &perf) const |
| Signal end of solver. | |
| Public Member Functions inherited from lduMatrix::preconditioner | |
| virtual const word & | type () const =0 |
| Runtime type information. | |
| declareRunTimeSelectionTable (autoPtr, preconditioner, symMatrix,(const solver &sol, const dictionary &solverControls),(sol, solverControls)) | |
| declareRunTimeSelectionTable (autoPtr, preconditioner, asymMatrix,(const solver &sol, const dictionary &solverControls),(sol, solverControls)) | |
| preconditioner (const solver &sol) | |
| Construct for given solver. | |
| virtual | ~preconditioner ()=default |
| Destructor. | |
| virtual void | read (const dictionary &) |
| Read and reset the preconditioner parameters from the given stream. | |
| virtual void | preconditionT (solveScalarField &wT, const solveScalarField &rT, const direction cmpt=0) const |
| Return wT the transpose-matrix preconditioned form of residual rT. | |
Protected Member Functions | |
| void | updateMatrixInterfaces (const bool add, const FieldField< Field, scalar > &coupleCoeffs, const labelList &selectedInterfaces, const solveScalarField &psiif, solveScalarField &result, const direction cmpt) const |
| Variant of lduMatrix::updateMatrixInterfaces on selected interfaces. | |
| void | sendGlobal (const labelList &selectedInterfaces, solveScalarField &psi, const label colouri) const |
| Send (and store in colourBufs_[colouri]) the effect of. | |
| void | receive (const labelList &selectedInterfaces, DynamicList< UPstream::Request > &requests) const |
| Start receiving in recvBufs_. | |
| void | send (const labelList &selectedInterfaces, const solveScalarField &psiInternal, DynamicList< UPstream::Request > &requests) const |
| Start sending sendBufs_. | |
| void | wait (DynamicList< UPstream::Request > &requests, const bool cancel=false) const |
| Wait for requests or cancel/free requests. | |
| virtual void | addInterfaceDiag (solveScalarField &rD, const label inti, const Field< solveScalar > &recvBuf) const |
| Update diagonal for interface. | |
| virtual void | forwardInternalDiag (solveScalarField &rD, const label colouri) const |
| Update diagonal for all faces of a certain colour. | |
| virtual void | addInterface (solveScalarField &wA, const label inti, const Field< solveScalar > &recvBuf) const |
| Update preconditioned variable from interface. | |
| virtual void | forwardInternal (solveScalarField &wA, const label colouri) const |
| Update preconditioned variable walking forward on internal faces. | |
| virtual void | backwardInternal (solveScalarField &wA, const label colouri) const |
| Update preconditioned variable walking backward on internal faces. | |
| virtual void | calcReciprocalD (solveScalarField &rD) const |
| Calculate reciprocal of diagonal. | |
Protected Attributes | |
| const bool | coupled_ |
| Precondition across global coupled bc. | |
| FieldField< Field, solveScalar > | sendBufs_ |
| Buffers for sending and receiving data. | |
| FieldField< Field, solveScalar > | recvBufs_ |
| DynamicList< UPstream::Request > | recvRequests_ |
| DynamicList< label > | lowerNbrs_ |
| Interfaces to lower coloured processors. | |
| DynamicList< UPstream::Request > | lowerSendRequests_ |
| DynamicList< UPstream::Request > | lowerRecvRequests_ |
| DynamicList< label > | higherNbrs_ |
| Interfaces to higher coloured processors. | |
| DynamicList< UPstream::Request > | higherSendRequests_ |
| DynamicList< UPstream::Request > | higherRecvRequests_ |
| autoPtr< labelList > | cellColourPtr_ |
| Local (cell) colouring from global interfaces. | |
| label | nColours_ |
| Number of colours (in case of multiple disconnected regions. | |
| PtrList< FieldField< Field, solveScalar > > | colourBufs_ |
| Global interfaces. Per colour the interfaces that (might) influence it. | |
| List< DynamicList< label > > | lowerGlobalRecv_ |
| Interfaces to non-processor lower coupled interfaces. | |
| List< DynamicList< label > > | lowerGlobalSend_ |
| Interfaces to non-processor lower coupled interfaces. | |
| List< label > | lowerColour_ |
| Corresponding destination colour (for lowerGlobal). | |
| List< DynamicList< label > > | higherGlobalRecv_ |
| Interfaces to non-processor higher coupled interfaces. | |
| List< DynamicList< label > > | higherGlobalSend_ |
| Interfaces to non-processor higher coupled interfaces. | |
| List< label > | higherColour_ |
| Corresponding destination colour (for higherGlobal). | |
| solveScalarField | rD_ |
| The reciprocal preconditioned diagonal. | |
| Protected Attributes inherited from lduMatrix::preconditioner | |
| const solver & | solver_ |
| Reference to the base-solver this preconditioner is used with. | |
Static Protected Attributes | |
| static const lduMesh * | meshPtr_ = nullptr |
| Processor interface buffers and colouring. | |
| static autoPtr< labelList > | procColoursPtr_ |
| Previous processor colours. | |
Additional Inherited Members | |
| Static Public Member Functions inherited from lduMatrix::preconditioner | |
| static word | getName (const dictionary &) |
| Find the preconditioner name (directly or from a sub-dictionary). | |
| static autoPtr< preconditioner > | New (const solver &sol, const dictionary &solverControls) |
| Return a new preconditioner. | |
Version of DILUpreconditioner that uses preconditioning across processor (and coupled) boundaries. Based on 'Parallel Preconditioners' chapter from 'Iterative Methods for Sparse Linear Systems' by Yousef Saad.
Leaves out the handling of boundary nodes after internal nodes since probably not beneficial (so no overlap of comms and internal calculation)
By default preconditions across coupled boundaries (currently only tested for cyclicAMI). This can be disabled with the 'coupled' setting
solver PCG; preconditioner { preconditioner distributedDILU; coupled false; }
The cyclicAMI boundary behaviour will only work if
Definition at line 74 of file distributedDILUPreconditioner.H.
| distributedDILUPreconditioner | ( | const lduMatrix::solver & | sol, |
| const dictionary & | solverControlsUnused ) |
Construct from matrix components and preconditioner solver controls.
Definition at line 513 of file distributedDILUPreconditioner.C.
References calcReciprocalD(), processorColour::cellColour(), cellColourPtr_, processorColour::colour(), colourBufs_, coupled_, Foam::diag(), dict, Foam::endl(), Foam::flatOutput(), forAll, Foam::GlobalIOList< Tuple2< scalar, vector > >::typeName, higherColour_, higherGlobalRecv_, higherGlobalSend_, higherNbrs_, Foam::incrIndent(), Foam::indent(), Foam::Info, lduMatrix::solver::interfaceBouCoeffs(), lduMatrix::solver::interfaces(), Foam::isA(), lowerColour_, lowerGlobalRecv_, lowerGlobalSend_, lowerNbrs_, lduMatrix::solver::matrix(), mesh, meshPtr_, UPstream::myProcNo(), nColours_, UPstream::nProcs(), lduMatrix::preconditioner::preconditioner(), procColoursPtr_, rD_, recvBufs_, sendBufs_, WarningInFunction, and Foam::Zero.
Referenced by distributedDICPreconditioner::distributedDICPreconditioner().


|
virtual |
Destructor.
Definition at line 755 of file distributedDILUPreconditioner.C.
References DebugPout, Foam::endl(), higherRecvRequests_, higherSendRequests_, lowerRecvRequests_, lowerSendRequests_, and wait().

|
protected |
Variant of lduMatrix::updateMatrixInterfaces on selected interfaces.
Definition at line 45 of file distributedDILUPreconditioner.C.
References Foam::add(), UPstream::incrMsgType(), UPstream::msgType(), UPstream::nonBlocking, UPstream::nRequests(), lduMatrix::preconditioner::solver_, and UPstream::waitRequests().
Referenced by sendGlobal().


|
protected |
Send (and store in colourBufs_[colouri]) the effect of.
doing selectedInterfaces
Definition at line 103 of file distributedDILUPreconditioner.C.
References colourBufs_, forAll, psi, PtrList< T >::set(), UList< T >::size(), lduMatrix::preconditioner::solver_, and updateMatrixInterfaces().
Referenced by calcReciprocalD(), and precondition().


|
protected |
Start receiving in recvBufs_.
Definition at line 172 of file distributedDILUPreconditioner.C.
References DynamicList< T, SizeMin >::emplace_back(), Foam::isA(), UIPstream::read(), recvBufs_, and lduMatrix::preconditioner::solver_.
Referenced by calcReciprocalD(), and precondition().


|
protected |
Start sending sendBufs_.
Definition at line 202 of file distributedDILUPreconditioner.C.
References DynamicList< T, SizeMin >::emplace_back(), forAll, Foam::isA(), sendBufs_, lduMatrix::preconditioner::solver_, and UOPstream::write().
Referenced by calcReciprocalD(), and precondition().


|
protected |
Wait for requests or cancel/free requests.
Definition at line 238 of file distributedDILUPreconditioner.C.
References UPstream::cancelRequests(), DynamicList< T, SizeMin >::clear(), and UPstream::waitRequests().
Referenced by calcReciprocalD(), precondition(), setFinished(), and ~distributedDILUPreconditioner().


|
protectedvirtual |
Update diagonal for interface.
Definition at line 259 of file distributedDILUPreconditioner.C.
References forAll, and lduMatrix::preconditioner::solver_.
Referenced by calcReciprocalD().

|
protectedvirtual |
Update diagonal for all faces of a certain colour.
Reimplemented in distributedDICPreconditioner.
Definition at line 285 of file distributedDILUPreconditioner.C.
References cellColourPtr_, and lduMatrix::preconditioner::solver_.
Referenced by calcReciprocalD().

|
protectedvirtual |
Update preconditioned variable from interface.
Definition at line 324 of file distributedDILUPreconditioner.C.
References UList< T >::begin(), forAll, rD_, and lduMatrix::preconditioner::solver_.
Referenced by precondition().


|
protectedvirtual |
Update preconditioned variable walking forward on internal faces.
Reimplemented in distributedDICPreconditioner.
Definition at line 349 of file distributedDILUPreconditioner.C.
References UList< T >::begin(), cellColourPtr_, rD_, and lduMatrix::preconditioner::solver_.
Referenced by precondition().


|
protectedvirtual |
Update preconditioned variable walking backward on internal faces.
Definition at line 393 of file distributedDILUPreconditioner.C.
References UList< T >::begin(), cellColourPtr_, rD_, and lduMatrix::preconditioner::solver_.
Referenced by precondition().


|
protectedvirtual |
Calculate reciprocal of diagonal.
Definition at line 436 of file distributedDILUPreconditioner.C.
References addInterfaceDiag(), UList< T >::begin(), cellColourPtr_, colourBufs_, Foam::diag(), forwardInternalDiag(), higherColour_, higherGlobalSend_, higherNbrs_, higherSendRequests_, lowerGlobalRecv_, lowerNbrs_, lowerRecvRequests_, nColours_, receive(), recvBufs_, List< T >::resize_nocopy(), send(), sendGlobal(), UList< T >::size(), lduMatrix::preconditioner::solver_, and wait().
Referenced by distributedDILUPreconditioner().


| TypeName | ( | "distributedDILU" | ) |
Runtime type information.
|
virtual |
Return wA the preconditioned form of residual rA.
Implements lduMatrix::preconditioner.
Definition at line 776 of file distributedDILUPreconditioner.C.
References addInterface(), backwardInternal(), UList< T >::begin(), cellColourPtr_, colourBufs_, forwardInternal(), higherColour_, higherGlobalRecv_, higherGlobalSend_, higherNbrs_, higherRecvRequests_, higherSendRequests_, lowerColour_, lowerGlobalRecv_, lowerGlobalSend_, lowerNbrs_, lowerRecvRequests_, lowerSendRequests_, nColours_, rD_, receive(), recvBufs_, send(), sendGlobal(), UList< T >::size(), and wait().

|
virtual |
Signal end of solver.
Reimplemented from lduMatrix::preconditioner.
Definition at line 902 of file distributedDILUPreconditioner.C.
References DebugPout, Foam::endl(), higherRecvRequests_, higherSendRequests_, lowerRecvRequests_, lowerSendRequests_, s(), and wait().

|
protected |
Precondition across global coupled bc.
Definition at line 85 of file distributedDILUPreconditioner.H.
Referenced by distributedDILUPreconditioner().
|
staticprotected |
Processor interface buffers and colouring.
Previous mesh
Definition at line 95 of file distributedDILUPreconditioner.H.
Referenced by distributedDILUPreconditioner().
Previous processor colours.
Definition at line 100 of file distributedDILUPreconditioner.H.
Referenced by distributedDILUPreconditioner().
|
mutableprotected |
Buffers for sending and receiving data.
Definition at line 105 of file distributedDILUPreconditioner.H.
Referenced by distributedDILUPreconditioner(), and send().
|
mutableprotected |
Definition at line 106 of file distributedDILUPreconditioner.H.
Referenced by calcReciprocalD(), distributedDILUPreconditioner(), precondition(), and receive().
|
mutableprotected |
Definition at line 107 of file distributedDILUPreconditioner.H.
|
protected |
Interfaces to lower coloured processors.
Definition at line 112 of file distributedDILUPreconditioner.H.
Referenced by calcReciprocalD(), distributedDILUPreconditioner(), and precondition().
|
mutableprotected |
Definition at line 113 of file distributedDILUPreconditioner.H.
Referenced by precondition(), setFinished(), and ~distributedDILUPreconditioner().
|
mutableprotected |
Definition at line 114 of file distributedDILUPreconditioner.H.
Referenced by calcReciprocalD(), precondition(), setFinished(), and ~distributedDILUPreconditioner().
|
protected |
Interfaces to higher coloured processors.
Definition at line 119 of file distributedDILUPreconditioner.H.
Referenced by calcReciprocalD(), distributedDILUPreconditioner(), and precondition().
|
mutableprotected |
Definition at line 120 of file distributedDILUPreconditioner.H.
Referenced by calcReciprocalD(), precondition(), setFinished(), and ~distributedDILUPreconditioner().
|
mutableprotected |
Definition at line 121 of file distributedDILUPreconditioner.H.
Referenced by precondition(), setFinished(), and ~distributedDILUPreconditioner().
Local (cell) colouring from global interfaces.
Colour/zone per cell
Definition at line 131 of file distributedDILUPreconditioner.H.
Referenced by backwardInternal(), calcReciprocalD(), distributedDILUPreconditioner(), distributedDICPreconditioner::forwardInternal(), forwardInternal(), distributedDICPreconditioner::forwardInternalDiag(), forwardInternalDiag(), and precondition().
|
protected |
Number of colours (in case of multiple disconnected regions.
in single mesh)
Definition at line 138 of file distributedDILUPreconditioner.H.
Referenced by calcReciprocalD(), distributedDILUPreconditioner(), and precondition().
|
mutableprotected |
Global interfaces. Per colour the interfaces that (might) influence it.
Definition at line 146 of file distributedDILUPreconditioner.H.
Referenced by calcReciprocalD(), distributedDILUPreconditioner(), precondition(), and sendGlobal().
|
protected |
Interfaces to non-processor lower coupled interfaces.
Definition at line 151 of file distributedDILUPreconditioner.H.
Referenced by calcReciprocalD(), distributedDILUPreconditioner(), and precondition().
|
protected |
Interfaces to non-processor lower coupled interfaces.
Definition at line 156 of file distributedDILUPreconditioner.H.
Referenced by distributedDILUPreconditioner(), and precondition().
|
protected |
Corresponding destination colour (for lowerGlobal).
Definition at line 161 of file distributedDILUPreconditioner.H.
Referenced by distributedDILUPreconditioner(), and precondition().
|
protected |
Interfaces to non-processor higher coupled interfaces.
Definition at line 166 of file distributedDILUPreconditioner.H.
Referenced by distributedDILUPreconditioner(), and precondition().
|
protected |
Interfaces to non-processor higher coupled interfaces.
Definition at line 171 of file distributedDILUPreconditioner.H.
Referenced by calcReciprocalD(), distributedDILUPreconditioner(), and precondition().
|
protected |
Corresponding destination colour (for higherGlobal).
Definition at line 176 of file distributedDILUPreconditioner.H.
Referenced by calcReciprocalD(), distributedDILUPreconditioner(), and precondition().
|
protected |
The reciprocal preconditioned diagonal.
Definition at line 182 of file distributedDILUPreconditioner.H.
Referenced by addInterface(), backwardInternal(), distributedDILUPreconditioner(), distributedDICPreconditioner::forwardInternal(), forwardInternal(), and precondition().