42 #ifndef STOKHOS_TPETRA_CG_HPP 
   43 #define STOKHOS_TPETRA_CG_HPP 
   48 template <
typename Matrix,
 
   51 bool CG_Solve(
const Matrix& 
A, Vector& x, 
const Vector& b,
 
   52               typename Vector::mag_type tol, 
Ordinal max_its,
 
   53               std::ostream* out = 0)
 
   55   typedef typename Vector::mag_type mag_type;
 
   56   typedef typename Vector::dot_type dot_type;
 
   62   r.update(1.0, b, -1.0);
 
   64   dot_type rho = r.dot(r);
 
   65   dot_type rho_old = rho;
 
   68   dot_type alpha, beta, pAp;
 
   69   while (k < max_its && nrm > tol) {
 
   71       p.update(1.0, r, 0.0);
 
   75       p.update(1.0, r, beta);
 
   80     x.update( alpha, p, 1.0);
 
   81     r.update(-alpha, w, 1.0);
 
   89       *out << k << 
":  " << nrm << std::endl;
 
   98 template <
typename Matrix,
 
  102 bool PCG_Solve(
const Matrix& 
A, Vector& x, 
const Vector& b, 
const Prec& M,
 
  103                typename Vector::mag_type tol, 
Ordinal max_its,
 
  104                std::ostream* out = 0)
 
  106   typedef typename Vector::mag_type mag_type;
 
  107   typedef typename Vector::dot_type dot_type;
 
  109   Vector r(b.getMap());
 
  110   Vector p(x.getMap());
 
  111   Vector w(x.getMap());
 
  113   r.update(1.0, b, -1.0);
 
  115   mag_type nrm = r.norm2();
 
  118   dot_type rho_old, alpha, beta, pAp;
 
  119   while (k < max_its && nrm > tol) {
 
  125       p.update(1.0, w, 0.0);
 
  128       beta = rho / rho_old;
 
  129       p.update(1.0, w, beta);
 
  134     x.update( alpha, p, 1.0);
 
  135     r.update(-alpha, w, 1.0);
 
  141       *out << k << 
":  " << nrm << std::endl;
 
  151 #endif // STOKHOS_TPETRA_CG 
KOKKOS_INLINE_FUNCTION PCE< Storage > sqrt(const PCE< Storage > &a)
 
bool CG_Solve(const Matrix &A, Vector &x, const Vector &b, typename Vector::mag_type tol, Ordinal max_its, std::ostream *out=0)
 
bool PCG_Solve(const Matrix &A, Vector &x, const Vector &b, const Prec &M, typename Vector::mag_type tol, Ordinal max_its, std::ostream *out=0)