![]() |
OGS
|
Some general linear algebra functionality.
By using the provided functions linear algebra capabilities can be used for different matrix and vector types in a way that is agnostic towards the specific type used.
For documentation, refer to that of the templated method. All specializations or overload must behave in the same way.
Functions | |
| void | setLocalAccessibleVector (PETScVector const &x) |
| void | set (PETScVector &x, PetscScalar const a) |
| void | copy (PETScVector const &x, PETScVector &y) |
| void | scale (PETScVector &x, PetscScalar const a) |
| void | aypx (PETScVector &y, PetscScalar const a, PETScVector const &x) |
| void | axpy (PETScVector &y, PetscScalar const a, PETScVector const &x) |
| void | axpby (PETScVector &y, PetscScalar const a, PetscScalar const b, PETScVector const &x) |
| template<> | |
| void | componentwiseDivide (PETScVector &w, PETScVector const &x, PETScVector const &y) |
| template<> | |
| double | norm1 (PETScVector const &x) |
| template<> | |
| double | norm2 (PETScVector const &x) |
| template<> | |
| double | normMax (PETScVector const &x) |
| void | copy (PETScMatrix const &A, PETScMatrix &B) |
| void | scale (PETScMatrix &A, PetscScalar const a) |
| void | aypx (PETScMatrix &Y, PetscScalar const a, PETScMatrix const &X) |
| void | axpy (PETScMatrix &Y, PetscScalar const a, PETScMatrix const &X) |
| void | matMult (PETScMatrix const &A, PETScVector const &x, PETScVector &y) |
| void | matMultAdd (PETScMatrix const &A, PETScVector const &v1, PETScVector const &v2, PETScVector &v3) |
| void | linearSysNormalize (PETScMatrix const &, PETScMatrix &, PETScVector const &, PETScVector &) |
| void | finalizeAssembly (PETScMatrix &A) |
| void | finalizeAssembly (PETScVector &x) |
| template<typename MatrixOrVector > | |
| void | copy (MatrixOrVector const &x, MatrixOrVector &y) |
Copies x to y. | |
| template<typename MatrixOrVector > | |
| void | scale (MatrixOrVector &x, double const a) |
Scales x by a. | |
| template<typename MatrixOrVector > | |
| void | aypx (MatrixOrVector &y, double const a, MatrixOrVector const &x) |
| Computes \( y = a \cdot y + x \). | |
| template<typename MatrixOrVector > | |
| void | axpy (MatrixOrVector &y, double const a, MatrixOrVector const &x) |
| Computes \( y = a \cdot x + y \). | |
| template<typename MatrixOrVector > | |
| void | axpby (MatrixOrVector &y, double const a, double const b, MatrixOrVector const &x) |
| Computes \( y = a \cdot x + b \cdot y \). | |
| template<typename MatrixOrVector > | |
| void | componentwiseDivide (MatrixOrVector &w, MatrixOrVector const &x, MatrixOrVector const &y) |
| Computes \(w = x/y\) componentwise. | |
| template<typename MatrixOrVector > | |
| double | norm1 (MatrixOrVector const &x) |
Computes the Manhattan norm of x. | |
| template<typename MatrixOrVector > | |
| double | norm2 (MatrixOrVector const &x) |
Computes the Euclidean norm of x. | |
| template<typename MatrixOrVector > | |
| double | normMax (MatrixOrVector const &x) |
Computes the maximum norm of x. | |
| template<typename MatrixOrVector > | |
| double | norm (MatrixOrVector const &x, MathLib::VecNormType type) |
| template<typename Matrix > | |
| void | finalizeAssembly (Matrix &) |
| template<typename Matrix , typename Vector > | |
| void | matMult (Matrix const &A, Vector const &x, Vector &y) |
| template<typename Matrix , typename Vector > | |
| void | matMultAdd (Matrix const &A, Vector const &v1, Vector const &v2, Vector &v3) |
| template<typename VectorType > | |
| double | computeRelativeNorm (VectorType const &x, VectorType const &y, MathLib::VecNormType norm_type) |
| void MathLib::LinAlg::axpby | ( | MatrixOrVector & | y, |
| double const | a, | ||
| double const | b, | ||
| MatrixOrVector const & | x ) |
| void MathLib::LinAlg::axpby | ( | PETScVector & | y, |
| PetscScalar const | a, | ||
| PetscScalar const | b, | ||
| PETScVector const & | x ) |
Definition at line 64 of file LinAlg.cpp.
References MathLib::PETScVector::getRawVector().
| void MathLib::LinAlg::axpy | ( | MatrixOrVector & | y, |
| double const | a, | ||
| MatrixOrVector const & | x ) |
| void MathLib::LinAlg::axpy | ( | PETScMatrix & | Y, |
| PetscScalar const | a, | ||
| PETScMatrix const & | X ) |
Definition at line 139 of file LinAlg.cpp.
References MathLib::PETScMatrix::getRawMatrix().
| void MathLib::LinAlg::axpy | ( | PETScVector & | y, |
| PetscScalar const | a, | ||
| PETScVector const & | x ) |
Definition at line 57 of file LinAlg.cpp.
References MathLib::PETScVector::getRawVector().
Referenced by ProcessLib::AssemblyMixin< Process >::assembleWithJacobian(), NumLib::NonlinearSolver< NonlinearSolverTag::Picard >::calculateNonEquilibriumInitialResiduum(), NumLib::StaggeredCoupling::checkCouplingConvergence(), NumLib::MatrixTranslatorGeneral< ODESystemTag::FirstOrderImplicitQuasilinear >::computeA(), computeRelativeNorm(), NumLib::MatrixTranslatorGeneral< ODESystemTag::FirstOrderImplicitQuasilinear >::computeResidual(), NumLib::NonlinearSolver< NonlinearSolverTag::Newton >::solve(), and NumLib::NonlinearSolver< NonlinearSolverTag::Picard >::solve().
| void MathLib::LinAlg::aypx | ( | MatrixOrVector & | y, |
| double const | a, | ||
| MatrixOrVector const & | x ) |
| void MathLib::LinAlg::aypx | ( | PETScMatrix & | Y, |
| PetscScalar const | a, | ||
| PETScMatrix const & | X ) |
Definition at line 131 of file LinAlg.cpp.
References MathLib::PETScMatrix::getRawMatrix().
| void MathLib::LinAlg::aypx | ( | PETScVector & | y, |
| PetscScalar const | a, | ||
| PETScVector const & | x ) |
Definition at line 50 of file LinAlg.cpp.
References MathLib::PETScVector::getRawVector().
Referenced by ProcessLib::ComponentTransport::ComponentTransportProcess::solveReactionEquation().
| void MathLib::LinAlg::componentwiseDivide | ( | MatrixOrVector & | w, |
| MatrixOrVector const & | x, | ||
| MatrixOrVector const & | y ) |
Computes \(w = x/y\) componentwise.
| void MathLib::LinAlg::componentwiseDivide | ( | PETScVector & | w, |
| PETScVector const & | x, | ||
| PETScVector const & | y ) |
Definition at line 81 of file LinAlg.cpp.
References MathLib::PETScVector::getRawVector().
Referenced by NumLib::LocalLinearLeastSquaresExtrapolator::extrapolate().
| double MathLib::LinAlg::computeRelativeNorm | ( | VectorType const & | x, |
| VectorType const & | y, | ||
| MathLib::VecNormType | norm_type ) |
Compute the relative norm between two vectors by \( \|x-y\|/\|x\| \).
| x | Vector x |
| y | Vector y |
| norm_type | The norm type of global vector |
Definition at line 299 of file LinAlg.h.
References axpy(), copy(), MathLib::INVALID, norm(), and OGS_FATAL.
Referenced by ProcessLib::TimeLoop::computeTimeStepping().
| void MathLib::LinAlg::copy | ( | MatrixOrVector const & | x, |
| MatrixOrVector & | y ) |
| void MathLib::LinAlg::copy | ( | PETScMatrix const & | A, |
| PETScMatrix & | B ) |
Definition at line 119 of file LinAlg.cpp.
| void MathLib::LinAlg::copy | ( | PETScVector const & | x, |
| PETScVector & | y ) |
Definition at line 37 of file LinAlg.cpp.
References MathLib::PETScVector::getRawVector(), and MathLib::PETScVector::shallowCopy().
Referenced by ProcessLib::AssembledMatrixCache::assemble(), NumLib::MatrixTranslatorGeneral< ODESystemTag::FirstOrderImplicitQuasilinear >::computeA(), NumLib::MatrixTranslatorGeneral< ODESystemTag::FirstOrderImplicitQuasilinear >::computeJacobian(), computeRelativeNorm(), NumLib::MatrixTranslatorGeneral< ODESystemTag::FirstOrderImplicitQuasilinear >::computeResidual(), ProcessLib::TimeLoop::computeTimeStepping(), NumLib::TimeDiscretizedODESystem< ODESystemTag::FirstOrderImplicitQuasilinear, NonlinearSolverTag::Newton >::getResidual(), NumLib::SimpleMatrixVectorProvider::getVector(), NumLib::SimpleMatrixVectorProvider::getVector(), NumLib::BackwardEuler::getWeightedOldX(), NumLib::StaggeredCoupling::initializeCoupledSolutions(), NumLib::MatrixTranslatorGeneral< ODESystemTag::FirstOrderImplicitQuasilinear >::normalizeAandRhs(), ProcessLib::Process::setInitialConditions(), NumLib::NonlinearSolver< NonlinearSolverTag::Newton >::solve(), NumLib::NonlinearSolver< NonlinearSolverTag::Picard >::solve(), NumLib::PETScNonlinearSolver::solve(), ProcessLib::ComponentTransport::ComponentTransportProcess::solveReactionEquation(), ProcessLib::HMPhaseField::HMPhaseFieldProcess< DisplacementDim >::updateConstraints(), ProcessLib::PhaseField::PhaseFieldProcess< DisplacementDim >::updateConstraints(), and NumLib::StaggeredCoupling::updatePreviousSolution().
| void MathLib::LinAlg::finalizeAssembly | ( | Matrix & | ) |
| void MathLib::LinAlg::finalizeAssembly | ( | PETScMatrix & | A | ) |
Definition at line 198 of file LinAlg.cpp.
References MathLib::PETScMatrix::finalizeAssembly().
Referenced by detail::applyKnownSolutions(), NumLib::TimeDiscretizedODESystem< ODESystemTag::FirstOrderImplicitQuasilinear, NonlinearSolverTag::Newton >::assemble(), NumLib::TimeDiscretizedODESystem< ODESystemTag::FirstOrderImplicitQuasilinear, NonlinearSolverTag::Picard >::assemble(), ProcessLib::AssemblyMixin< Process >::assembleWithJacobian(), NumLib::NonlinearSolver< NonlinearSolverTag::Newton >::calculateNonEquilibriumInitialResiduum(), NumLib::NonlinearSolver< NonlinearSolverTag::Picard >::calculateNonEquilibriumInitialResiduum(), NumLib::LocalLinearLeastSquaresExtrapolator::calculateResiduals(), NumLib::LocalLinearLeastSquaresExtrapolator::extrapolate(), ProcessLib::Process::setInitialConditions(), and ProcessLib::SmallDeformation::writeMaterialForces().
| void MathLib::LinAlg::finalizeAssembly | ( | PETScVector & | x | ) |
Definition at line 203 of file LinAlg.cpp.
References MathLib::PETScVector::finalizeAssembly().
| void MathLib::LinAlg::linearSysNormalize | ( | PETScMatrix const & | , |
| PETScMatrix & | , | ||
| PETScVector const & | , | ||
| PETScVector & | ) |
Definition at line 170 of file LinAlg.cpp.
References OGS_FATAL.
Referenced by NumLib::MatrixTranslatorGeneral< ODESystemTag::FirstOrderImplicitQuasilinear >::normalizeAandRhs().
| void MathLib::LinAlg::matMult | ( | Matrix const & | A, |
| Vector const & | x, | ||
| Vector & | y ) |
| void MathLib::LinAlg::matMult | ( | PETScMatrix const & | A, |
| PETScVector const & | x, | ||
| PETScVector & | y ) |
Definition at line 149 of file LinAlg.cpp.
References MathLib::PETScMatrix::getRawMatrix(), MathLib::PETScVector::getRawVector(), and MathLib::PETScVector::shallowCopy().
Referenced by NumLib::NonlinearSolver< NonlinearSolverTag::Picard >::calculateNonEquilibriumInitialResiduum(), NumLib::MatrixTranslatorGeneral< ODESystemTag::FirstOrderImplicitQuasilinear >::computeResidual(), NumLib::NonlinearSolver< NonlinearSolverTag::Picard >::solve(), and ProcessLib::ComponentTransport::ComponentTransportProcess::solveReactionEquation().
| void MathLib::LinAlg::matMultAdd | ( | Matrix const & | A, |
| Vector const & | v1, | ||
| Vector const & | v2, | ||
| Vector & | v3 ) |
| void MathLib::LinAlg::matMultAdd | ( | PETScMatrix const & | A, |
| PETScVector const & | v1, | ||
| PETScVector const & | v2, | ||
| PETScVector & | v3 ) |
Definition at line 159 of file LinAlg.cpp.
References MathLib::PETScMatrix::getRawMatrix(), MathLib::PETScVector::getRawVector(), and MathLib::PETScVector::shallowCopy().
Referenced by NumLib::MatrixTranslatorGeneral< ODESystemTag::FirstOrderImplicitQuasilinear >::computeResidual(), and NumLib::MatrixTranslatorGeneral< ODESystemTag::FirstOrderImplicitQuasilinear >::computeRhs().
| double MathLib::LinAlg::norm | ( | MatrixOrVector const & | x, |
| MathLib::VecNormType | type ) |
Definition at line 96 of file LinAlg.h.
References MathLib::INFINITY_N, MathLib::NORM1, norm1(), MathLib::NORM2, norm2(), normMax(), and OGS_FATAL.
Referenced by NumLib::ConvergenceCriterionDeltaX::checkDeltaX(), NumLib::ConvergenceCriterionResidual::checkDeltaX(), NumLib::ConvergenceCriterionResidual::checkResidual(), computeRelativeNorm(), norm1(), norm2(), and normMax().
| double MathLib::LinAlg::norm1 | ( | MatrixOrVector const & | x | ) |
Computes the Manhattan norm of x.
| double MathLib::LinAlg::norm1 | ( | PETScVector const & | x | ) |
Definition at line 90 of file LinAlg.cpp.
References MathLib::PETScVector::getRawVector(), and norm().
Referenced by norm().
| double MathLib::LinAlg::norm2 | ( | MatrixOrVector const & | x | ) |
Computes the Euclidean norm of x.
| double MathLib::LinAlg::norm2 | ( | PETScVector const & | x | ) |
Definition at line 100 of file LinAlg.cpp.
References MathLib::PETScVector::getRawVector(), and norm().
Referenced by norm().
| double MathLib::LinAlg::normMax | ( | MatrixOrVector const & | x | ) |
Computes the maximum norm of x.
| double MathLib::LinAlg::normMax | ( | PETScVector const & | x | ) |
Definition at line 110 of file LinAlg.cpp.
References MathLib::PETScVector::getRawVector(), and norm().
Referenced by norm().
| void MathLib::LinAlg::scale | ( | MatrixOrVector & | x, |
| double const | a ) |
| void MathLib::LinAlg::scale | ( | PETScMatrix & | A, |
| PetscScalar const | a ) |
Definition at line 125 of file LinAlg.cpp.
References MathLib::PETScMatrix::getRawMatrix().
| void MathLib::LinAlg::scale | ( | PETScVector & | x, |
| PetscScalar const | a ) |
Definition at line 44 of file LinAlg.cpp.
References MathLib::PETScVector::getRawVector().
Referenced by NumLib::MatrixTranslatorGeneral< ODESystemTag::FirstOrderImplicitQuasilinear >::computeResidual(), NumLib::TimeDiscretizedODESystem< ODESystemTag::FirstOrderImplicitQuasilinear, NonlinearSolverTag::Newton >::getResidual(), NumLib::BackwardEuler::getWeightedOldX(), and ProcessLib::PhaseField::PhaseFieldProcess< DisplacementDim >::postNonLinearSolverConcreteProcess().
| void MathLib::LinAlg::set | ( | PETScVector & | x, |
| PetscScalar const | a ) |
Definition at line 32 of file LinAlg.cpp.
References MathLib::PETScVector::getRawVector().
Referenced by ProcessLib::SmallDeformation::writeMaterialForces().
| void MathLib::LinAlg::setLocalAccessibleVector | ( | PETScVector const & | x | ) |
Set local accessible vector in order to get entries. Call this before call operator[] or get(...) of x.
Definition at line 27 of file LinAlg.cpp.
References MathLib::PETScVector::setLocalAccessibleVector().
Referenced by NumLib::LocalLinearLeastSquaresExtrapolator::calculateResidualElement(), ProcessLib::Process::computeSecondaryVariable(), ChemistryLib::PhreeqcIOData::PhreeqcIO::getConcentration(), NumLib::ConvergenceCriterionPerComponentDeltaX::getDampingFactor(), NumLib::ConvergenceCriterionPerComponentResidual::getDampingFactor(), ProcessLib::Process::postIteration(), ProcessLib::LIE::HydroMechanics::HydroMechanicsProcess< DisplacementDim >::postTimestepConcreteProcess(), ProcessLib::Process::preIteration(), ProcessLib::Process::preOutput(), ProcessLib::Process::preTimestep(), ChemistryLib::PhreeqcIOData::AqueousSolution::print(), ChemistryLib::PhreeqcIOData::anonymous_namespace{PhreeqcIO.cpp}::setAqueousSolution(), ProcessLib::Process::setInitialConditions(), anonymous_namespace{Process.cpp}::setLocalAccessibleVectors(), ProcessLib::BoundaryConditionCollection::setReleaseNodalForces(), NumLib::NonlinearSolver< NonlinearSolverTag::Picard >::solve(), ProcessLib::ComponentTransport::ComponentTransportProcess::solveReactionEquation(), NumLib::transformVariableFromGlobalVector(), NumLib::transformVariableFromGlobalVector(), ProcessLib::HMPhaseField::HMPhaseFieldProcess< DisplacementDim >::updateConstraints(), ProcessLib::PhaseField::PhaseFieldProcess< DisplacementDim >::updateConstraints(), and ProcessLib::SmallDeformation::writeMaterialForces().