33#ifndef FAMG_ADDITIONAL_MATH_H_
34#define FAMG_ADDITIONAL_MATH_H_
38inline void vecSum(
double &erg,
double alpha,
double vec)
44inline void vecSum(
typename T::value_type &erg,
double alpha,
const T &vec)
47 for (
size_t i = 1; i < vec.size(); i++)
52inline double vecSum(
double alpha,
double vec)
57inline typename T::value_type
vecSum(
double alpha,
const T &vec)
59 typename T::value_type erg;
64inline void matSum(
double &erg,
double alpha,
double vec)
69template<
typename T1,
typename T2>
70inline void matSum(T1 &erg,
double alpha, T2 &mat)
72 for (
size_t r = 0; mat.num_rows(); r++)
75 for (
size_t c = 1; c < mat.num_cols(); c++)
81template<
typename T1,
typename T2>
82inline T1
matSum(
double alpha, T2 &mat)
93 for (
size_t r = 0; mat.num_rows(); r++)
94 for (
size_t c = 1; c < mat.num_cols(); c++)
108 const size_t rk = (mat.num_rows() < mat.num_cols()) ? mat.num_rows() : mat.num_cols();
109 for (
size_t k = 0; k<rk; k++)
126 const size_t rk = (mat.num_rows() < mat.num_cols()) ? mat.num_rows() : mat.num_cols();
127 for (
size_t k = 0; k<rk; k++)
129 double abs=fabs(mat(k, k));
149template<
typename T1,
typename T2>
152 UG_ASSERT(m.num_rows()==m.num_cols(),
"");
153 m1.resize(m.num_rows(), m.num_rows());
155 for (
size_t i = 0; i < m.num_rows(); i++)
159template<
typename T1,
typename T2>
162 UG_ASSERT(m.num_rows()==m.num_cols(),
"");
163 v.resize(m.num_rows());
164 for (
size_t i = 0; i < m.num_rows(); i++)
165 v[i] = sqrt(m(i, i));
178template<
typename T1,
typename T2>
182 for (
size_t r = 0; r < M.num_rows(); r++)
185 for (
size_t c = 0; c < M.num_cols(); c++)
186 t += M(r, c) * v2[c];
192template<
typename TMatrix>
196 Ad.resize(blockSize*Ab.num_rows(), blockSize*Ab.num_cols());
198 for(
size_t i=0; i<Ab.num_rows(); i++)
200 for(
size_t j=0; j<Ab.num_cols(); j++)
201 for(
size_t r=0; r<blockSize; r++)
202 for(
size_t c=0; c<blockSize; c++)
203 Ad(i*blockSize+r, j*blockSize+c) =
BlockRef(Ab(i, j), r, c);
Definition densematrix.h:57
TStorage::value_type value_type
Definition densematrix.h:59
Definition variable_array.h:139
#define UG_ASSERT(expr, msg)
Definition assert.h:70
void matSum(double &erg, double alpha, double vec)
Definition additional_math.h:64
void GetDiagSqrt(T1 &v, const T2 &m)
Definition additional_math.h:160
double matDiagMax(const double d)
Definition additional_math.h:116
double matTrace(const double d)
Definition additional_math.h:99
double EnergyProd(vector_type &v1, matrix_type &A, vector_type &v2, vector_type &tmp)
Definition additional_math.h:90
double & BlockRef(T &vec, size_t i)
Definition blocks.h:66
void vecSum(double &erg, double alpha, double vec)
Definition additional_math.h:38
void BlockMatrixToDoubleMatrix(DenseMatrix< VariableArray2< double > > &Ad, TMatrix &Ab)
Definition additional_math.h:193
void GetDiag(double &a, double b)
Definition additional_math.h:144
DenseMatrix< T1 >::value_type Sum1Mat1(const DenseMatrix< T1 > &mat)
Definition additional_math.h:90
Definition communication_policies.h:58