Go to the documentation of this file.
76 Ostream&
operator<<(Ostream&,
const lduMatrix&);
77 Ostream&
operator<<(Ostream&,
const InfoProxy<lduMatrix>&);
90 std::reference_wrapper<const lduMesh> lduMesh_;
144 virtual const word&
type()
const = 0;
307 virtual const word&
type()
const = 0;
450 virtual const word&
type()
const = 0;
464 (sol, solverControls)
476 (sol, solverControls)
626 return (diagPtr_ && !lowerPtr_ && !upperPtr_);
631 return (diagPtr_ && (!lowerPtr_ && upperPtr_));
636 return (diagPtr_ && lowerPtr_ && upperPtr_);
718 const label startRequest
726 const word& fieldName,
virtual solverPerformance solve(scalarField &psi, const scalarField &source, const direction cmpt=0) const =0
Solve with given field and rhs.
The class contains the addressing required by the lduMatrix: upper, lower and losort.
static word getName(const dictionary &)
Find the preconditioner name (directly or from a sub-dictionary)
void operator-=(const lduMatrix &)
const lduAddressing & lduAddr() const
Return the LDU addressing.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
const lduInterfaceFieldPtrsList & interfaces() const noexcept
Forward declarations of the specialisations of Field<T> for scalar, vector and tensor.
InfoProxy< lduMatrix > info() const
Return info proxy.
A class for handling words, derived from Foam::string.
A helper class for outputting values to Ostream.
A field of fields is a PtrList of fields with reference counting.
virtual void scalarSmooth(solveScalarField &psi, const solveScalarField &source, const direction cmpt, const label nSweeps) const =0
Smooth the solution for a given number of sweeps.
A class for managing temporary objects.
declareRunTimeSelectionTable(autoPtr, smoother, symMatrix,(const word &fieldName, const lduMatrix &matrix, const FieldField< Field, scalar > &interfaceBouCoeffs, const FieldField< Field, scalar > &interfaceIntCoeffs, const lduInterfaceFieldPtrsList &interfaces),(fieldName, matrix, interfaceBouCoeffs, interfaceIntCoeffs, interfaces))
void operator+=(const lduMatrix &)
virtual void read(const dictionary &)
profilingTrigger profiling_
lduMatrix is a general matrix class in which the coefficients are stored as three arrays,...
void sumMagOffDiag(scalarField &sumOff) const
const lduInterfaceFieldPtrsList & interfaces() const noexcept
virtual solverPerformance scalarSolve(solveScalarField &psi, const solveScalarField &source, const direction cmpt=0) const
Solve with given field and rhs (in solveScalar precision).
static autoPtr< preconditioner > New(const solver &sol, const dictionary &solverControls)
Return a new preconditioner.
Abstract base-class for lduMatrix solvers.
lduMatrix member H operations.
solveScalarField::cmptType normFactor(const solveScalarField &psi, const solveScalarField &source, const solveScalarField &Apsi, solveScalarField &tmpField) const
void updateMatrixInterfaces(const bool add, const FieldField< Field, scalar > &interfaceCoeffs, const lduInterfaceFieldPtrsList &interfaces, const solveScalarField &psiif, solveScalarField &result, const direction cmpt, const label startRequest) const
Update interfaced interfaces for matrix operations.
const lduMatrix & matrix_
virtual const word & type() const =0
Runtime type information.
void Amul(solveScalarField &, const tmp< solveScalarField > &, const FieldField< Field, scalar > &, const lduInterfaceFieldPtrsList &, const direction cmpt) const
Matrix multiplication with updated interfaces.
lduMatrix(const lduMesh &)
Construct given an LDU addressed mesh.
const FieldField< Field, scalar > & interfaceBouCoeffs_
label minIter_
Minimum number of iterations in the solver.
const word & fieldName() const noexcept
Ostream & operator<<(Ostream &, const boundaryPatch &p)
Write boundaryPatch as dictionary entries (without surrounding braces)
#define NotImplemented
Issue a FatalErrorIn for a function not currently implemented.
pTraits< solveScalar >::cmptType cmptType
Component type.
const FieldField< Field, scalar > & interfaceBouCoeffs_
void setResidualField(const scalarField &residual, const word &fieldName, const bool initial) const
virtual void read(const dictionary &)
Read and reset the solver parameters from the given stream.
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
label maxIter_
Maximum number of iterations in the solver.
const FieldField< Field, scalar > & interfaceBouCoeffs() const noexcept
virtual const lduSchedule & patchSchedule() const =0
Return patch field evaluation schedule.
virtual void precondition(solveScalarField &wA, const solveScalarField &rA, const direction cmpt=0) const =0
Return wA the preconditioned form of residual rA.
tmp< scalarField > H1() const
virtual ~preconditioner()=default
Destructor.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
virtual void readControls()
Read the control parameters from the controlDict_.
void add(FieldField< Field1, typename typeOfSum< Type1, Type2 >::type > &f, const FieldField< Field1, Type1 > &f1, const FieldField< Field2, Type2 > &f2)
Abstract base-class for lduMatrix smoothers.
static word getName(const dictionary &)
Find the smoother name (directly or from a sub-dictionary)
static autoPtr< solver > New(const word &fieldName, const lduMatrix &matrix, const FieldField< Field, scalar > &interfaceBouCoeffs, const FieldField< Field, scalar > &interfaceIntCoeffs, const lduInterfaceFieldPtrsList &interfaces, const dictionary &solverControls)
Return a new solver.
tmp< Field< Type > > H(const Field< Type > &) const
scalar relTol_
Convergence tolerance relative to the initial.
static autoPtr< smoother > New(const word &fieldName, const lduMatrix &matrix, const FieldField< Field, scalar > &interfaceBouCoeffs, const FieldField< Field, scalar > &interfaceIntCoeffs, const lduInterfaceFieldPtrsList &interfaces, const dictionary &solverControls)
Return a new smoother.
const lduMatrix & matrix_
const word & fieldName() const noexcept
const FieldField< Field, scalar > & interfaceIntCoeffs_
void initMatrixInterfaces(const bool add, const FieldField< Field, scalar > &interfaceCoeffs, const lduInterfaceFieldPtrsList &interfaces, const solveScalarField &psiif, solveScalarField &result, const direction cmpt) const
void sumA(solveScalarField &, const FieldField< Field, scalar > &, const lduInterfaceFieldPtrsList &) const
Sum the coefficients on each row of the matrix.
const lduSchedule & patchSchedule() const
Return the patch evaluation schedule.
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
dictionary controlDict_
Dictionary of controls.
scalar tolerance_
Final convergence tolerance.
lduInterfaceFieldPtrsList interfaces_
Triggers for starting/stopping code profiling.
void operator=(const lduMatrix &)
const lduInterfaceFieldPtrsList & interfaces_
Macros to ease declaration of run-time selection tables.
smoother(const word &fieldName, const lduMatrix &matrix, const FieldField< Field, scalar > &interfaceBouCoeffs, const FieldField< Field, scalar > &interfaceIntCoeffs, const lduInterfaceFieldPtrsList &interfaces)
const FieldField< Field, scalar > & interfaceIntCoeffs() const noexcept
declareRunTimeSelectionTable(autoPtr, solver, symMatrix,(const word &fieldName, const lduMatrix &matrix, const FieldField< Field, scalar > &interfaceBouCoeffs, const FieldField< Field, scalar > &interfaceIntCoeffs, const lduInterfaceFieldPtrsList &interfaces, const dictionary &solverControls),(fieldName, matrix, interfaceBouCoeffs, interfaceIntCoeffs, interfaces, solverControls))
void operator*=(const scalarField &)
tmp< Field< Type > > faceH(const Field< Type > &) const
friend Ostream & operator<<(Ostream &, const lduMatrix &)
const lduMesh & mesh() const
Return the LDU mesh from which the addressing is obtained.
preconditioner(const solver &sol)
const FieldField< Field, scalar > & interfaceIntCoeffs() const noexcept
const FieldField< Field, scalar > & interfaceBouCoeffs() const noexcept
virtual void smooth(solveScalarField &psi, const scalarField &source, const direction cmpt, const label nSweeps) const =0
Smooth the solution for a given number of sweeps.
virtual const word & type() const =0
Runtime type information.
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
int log_
Level of verbosity in the solver output statements.
Abstract base-class for lduMatrix preconditioners.
const solver & solver_
Reference to the base-solver this preconditioner is used with.
const volScalarField & psi
void Tmul(solveScalarField &, const tmp< solveScalarField > &, const FieldField< Field, scalar > &, const lduInterfaceFieldPtrsList &, const direction cmpt) const
Matrix transpose multiplication with updated interfaces.
void residual(solveScalarField &rA, const solveScalarField &psi, const scalarField &source, const FieldField< Field, scalar > &interfaceBouCoeffs, const lduInterfaceFieldPtrsList &interfaces, const direction cmpt) const
static const label defaultMaxIter_
Default maximum number of iterations in the solver.
virtual const word & type() const =0
Runtime type information.
virtual void preconditionT(solveScalarField &wT, const solveScalarField &rT, const direction cmpt=0) const
const lduMatrix & matrix() const noexcept
virtual const lduAddressing & lduAddr() const =0
Return ldu addressing.
virtual ~smoother()=default
Destructor.
Abstract base class for meshes which provide LDU addressing for the construction of lduMatrix and LDU...
solver(const word &fieldName, const lduMatrix &matrix, const FieldField< Field, scalar > &interfaceBouCoeffs, const FieldField< Field, scalar > &interfaceIntCoeffs, const lduInterfaceFieldPtrsList &interfaces, const dictionary &solverControls)
void setLduMesh(const lduMesh &m)
Set the LDU mesh containing the addressing is obtained.
declareRunTimeSelectionTable(autoPtr, preconditioner, symMatrix,(const solver &sol, const dictionary &solverControls),(sol, solverControls))
const FieldField< Field, scalar > & interfaceIntCoeffs_
const lduMatrix & matrix() const noexcept
virtual ~solver()=default
Destructor.