70 return static_cast<double>(PetscRealPart(result));
94 PetscScalar
norm = 0.;
104 PetscScalar
norm = 0.;
114 PetscScalar
norm = 0.;
196 "Normalization operation is not implemented yet for PETSc library! "
197 "Program terminated.");
228void set(EigenVector& x,
double const a)
230 x.getRawVector().setConstant(a);
233void copy(EigenVector
const& x, EigenVector& y)
238void scale(EigenVector& x,
double const a)
240 x.getRawVector() *= a;
244void aypx(EigenVector& y,
double const a, EigenVector
const& x)
247 y.getRawVector() = a * y.getRawVector() + x.getRawVector();
251void axpy(EigenVector& y,
double const a, EigenVector
const& x)
254 y.getRawVector() += a * x.getRawVector();
258void axpby(EigenVector& y,
double const a,
double const b, EigenVector
const& x)
261 y.getRawVector() = a * x.getRawVector() + b * y.getRawVector();
264double dot(EigenVector
const& a, EigenVector
const& b)
272 return a.getRawVector().dot(b.getRawVector());
279 EigenVector
const& y)
281 w.getRawVector().noalias() = x.getRawVector().binaryExpr(
283 [](
auto const x,
auto const y) { return y == 0 ? 0.0 : x / y; });
289double norm1(EigenVector
const& x)
291 return x.getRawVector().lpNorm<1>();
297double norm2(EigenVector
const& x)
299 return x.getRawVector().norm();
305double normMax(EigenVector
const& x)
307 return x.getRawVector().lpNorm<Eigen::Infinity>();
312void copy(EigenMatrix
const& A, EigenMatrix& B)
318void scale(EigenMatrix& A,
double const a)
321 A.getRawMatrix() *= a;
325void aypx(EigenMatrix& Y,
double const a, EigenMatrix
const&
X)
328 Y.getRawMatrix() = a * Y.getRawMatrix() +
X.getRawMatrix();
332void axpy(EigenMatrix& Y,
double const a, EigenMatrix
const&
X)
335 Y.getRawMatrix() = a *
X.getRawMatrix() + Y.getRawMatrix();
341void matMult(EigenMatrix
const& A, EigenVector
const& x, EigenVector& y)
344 y.getRawVector() = A.getRawMatrix() * x.getRawVector();
348void matMultAdd(EigenMatrix
const& A, EigenVector
const& v1,
349 EigenVector
const& v2, EigenVector& v3)
354 v2.getRawVector() + A.getRawMatrix() * v1.getRawVector();
358 EigenVector
const& b, EigenVector& new_b)
361 assert(&A != &new_A);
362 assert(&b != &new_b);
364 if (A.getRawMatrix().rows() == A.getRawMatrix().cols())
367 "The number of rows and columns are the same for the LHS matrix."
368 "Are you sure you still need to normalize the LHS matrix and RHS "
372 new_b.getRawVector() = A.getRawMatrix().transpose() * b.getRawVector();
373 new_A.getRawMatrix() = A.getRawMatrix().transpose() * A.getRawMatrix();
378 x.getRawMatrix().makeCompressed();
void WARN(fmt::format_string< Args... > fmt, Args &&... args)
Wrapper class for PETSc matrix routines for matrix.
Mat & getRawMatrix()
Get matrix reference.
void finalizeAssembly(const MatAssemblyType asm_type=MAT_FINAL_ASSEMBLY)
Perform MPI collection of assembled entries in buffer.
std::vector< PetscInt > const & getSparsityColumnIndices() const
Column indices cached at preallocation (empty on the fallback path).
Wrapper class for PETSc vector.
void finalizeAssembly()
Perform MPI collection of assembled entries in buffer.
void setLocalAccessibleVector() const
void shallowCopy(const PETScVector &v)
PETSc_Vec & getRawVector()
Exposes the underlying PETSc vector.
double norm(MatrixOrVector const &x, MathLib::VecNormType type)
double dot(PETScVector const &a, PETScVector const &b)
void linearSysNormalize(PETScMatrix const &, PETScMatrix &, PETScVector const &, PETScVector &)
void finalizeAssembly(PETScMatrix &A)
double norm1(PETScVector const &x)
double normMax(PETScVector const &x)
void copy(PETScVector const &x, PETScVector &y)
void componentwiseDivide(PETScVector &w, PETScVector const &x, PETScVector const &y)
void setLocalAccessibleVector(PETScVector const &x)
void set(PETScVector &x, PetscScalar const a)
void matMult(PETScMatrix const &A, PETScVector const &x, PETScVector &y)
void matMultAdd(PETScMatrix const &A, PETScVector const &v1, PETScVector const &v2, PETScVector &v3)
double norm2(PETScVector const &x)
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)
MatStructure nonzeroPatternStructure(std::vector< PetscInt > const &col_a, std::vector< PetscInt > const &col_b)
double const GaussLegendre< 1 >::X[1]