/*-------------------------------------------------
  rsdpa_cg.h
-------------------------------------------------*/

#ifndef __rsdpa_cg_h__
#define __rsdpa_cg_h__

#include <rsdpa_mpist.h>

class rCg
{
public:
  static int m;
  static int mb2;
  static int maxmp2;
  static int maxnp2;
  static int ictxt2;
  static int iam;
  static int nprocs;
  static int myrow2;
  static int mycol2;
  static int nprow2;
  static int npcol2;
  
  // A はすでに分散されている対称行列で
  // 下三角にのみ要素が格納されている
  double* A; // ここは、ポインタのみ pB2
  // x はすでに分散されているべくトルで
  // solve メソッドで x = A^{-1} x が計算され
  // x に格納される
  double* x; // ここは、ポインタのみ pg2
  double* p;
  double* q;
  double* r;

  int* descA; // ここは、ポインタのみ
  int* descx; // ここは、ポインタのみ
  int descp[DLEN1_];
  int descq[DLEN1_];
  int descr[DLEN1_];
  

  rCg::rCg();
  rCg::~rCg();
  int initialize(int m, double* A, int* descA,
		 double* x, int* descx);

  int solve(double epsilon, int maxiter, int* iter);
  
};
#endif // __rsdpa_cg_h__
