OGS
ComputeResiduum.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#include "ComputeResiduum.h"
5
7
8namespace ProcessLib
9{
10GlobalVector computeResiduum(double const dt, GlobalVector const& x,
11 GlobalVector const& x_prev, GlobalMatrix const& M,
12 GlobalMatrix const& K, GlobalVector const& b)
13{
14 using namespace MathLib::LinAlg;
15 GlobalVector residuum;
16 GlobalVector x_dot;
17 copy(x, x_dot); // tmp = x
18 axpy(x_dot, -1., x_prev); // tmp = x - x_prev
19 scale(x_dot, 1. / dt); // tmp = (x - x_prev)/dt
20 matMult(M, x_dot, residuum); // r = M*x_dot
21 matMultAdd(K, x, residuum, residuum); // r = M*x_dot + K*x
22 axpy(residuum, -1., b); // r = M*x_dot + K*x - b
23 scale(residuum, -1.); // r = -r
24 return residuum;
25}
26} // namespace ProcessLib
MathLib::EigenMatrix GlobalMatrix
MathLib::EigenVector GlobalVector
void copy(PETScVector const &x, PETScVector &y)
Definition LinAlg.cpp:30
void matMult(PETScMatrix const &A, PETScVector const &x, PETScVector &y)
Definition LinAlg.cpp:142
void matMultAdd(PETScMatrix const &A, PETScVector const &v1, PETScVector const &v2, PETScVector &v3)
Definition LinAlg.cpp:152
void scale(PETScVector &x, PetscScalar const a)
Definition LinAlg.cpp:37
void axpy(PETScVector &y, PetscScalar const a, PETScVector const &x)
Definition LinAlg.cpp:50
GlobalVector computeResiduum(double const dt, GlobalVector const &x, GlobalVector const &x_prev, GlobalMatrix const &M, GlobalMatrix const &K, GlobalVector const &b)