6 #ifndef MYRAMATH_MULTIFRONTAL_LU_FACTOR_H 7 #define MYRAMATH_MULTIFRONTAL_LU_FACTOR_H 14 #include <myramath/multifrontal/detail/lu/factor.h> 17 namespace multifrontal {
21 template<
class Number>
class JobGraphBase :
public ::myra::multifrontal::detail::lu::factor::JobGraphBase2<LUKernel<Number> >
26 typedef ::myra::multifrontal::detail::lu::factor::JobGraphBase2<LUKernel<Number> > Base;
30 typedef ::myra::multifrontal::detail::lu::LUContainer<Kernel>
LUContainer;
34 : Base(in_lucontainer), lucontainer(in_lucontainer) { }
37 virtual ::myra::JobGraphBase* clone()
const 43 virtual uint64_t factor(
int n,
int k)
46 if (k == 0) this->assign_contributions(n,k,k);
47 return lucontainer->factor(n,k);
51 virtual uint64_t backsolveL(
int n,
int k,
int i)
54 if (k == 0) this->assign_contributions(n,i,k);
55 const Kernel& Un_kk = this->lu(n,k);
57 return Un_kk.
solveU(An_ik,
'R',
'N');
61 virtual uint64_t backsolveU(
int n,
int k,
int j)
64 if (k == 0) this->assign_contributions(n,k,j);
65 const Kernel& Ln_kk = this->lu(n,k);
67 return Ln_kk.
solveL(An_kj,
'L',
'N');
71 virtual uint64_t downdate(
int n,
int k,
int i,
int j)
81 Number beta = k ? one : zero;
82 uint64_t w = gemm_nwork(An_ij, Ln_ik,
'N', Un_kj,
'N', -one, beta);
84 if (k == 0) this->add_contributions(n,i,j);
91 LUContainer* lucontainer;
Represents a const MatrixRange.
Definition: bothcat.h:22
Factors A into L*U, presents solve methods.
Definition: Kernel.h:35
Represents a mutable MatrixRange.
Definition: conjugate.h:26
uint64_t solveL(const MatrixRange< Number > &B, char side, char op) const
Solves op(L)*X=B or X*op(L)=B, overwrites B with X.
Definition: Kernel.h:66
uint64_t solveU(const MatrixRange< Number > &B, char side, char op) const
Solves op(U)*X=B or X*op(U)=B, overwrites B with X.
Definition: Kernel.h:135
Definition: partialsolve.h:32