10 fprintf(stderr,
"In alloc \n");
12 *s=mod->
clone();fprintf(stderr,
"In alloc \n");
17 bool SEP::CGStep::Step(
int iter, Vector *m, Vector *g, Vector *rr, Vector *gg,
double *res){
19 double alpha,beta=0,small=1e-20;
20 std::cout <<
"in cgstep";
21 double gg_gg=gg->innerProd(gg);
22 double gg_rr=-gg->innerProd(rr);
27 if(fabs(gg_gg) < small){
28 fprintf(stderr,
"Zero dot product in first CG step \n");
34 double ss_ss=ss->innerProd(ss);
35 double gg_ss=gg->innerProd(ss);
36 if(fabs(gg_gg) < small || fabs(ss_ss) < small){
37 fprintf(stderr,
"Zero dot product in CG step \n");
41 double determ=gg_gg*ss_ss*( (1.-gg_ss/gg_gg)*(gg_ss/ss_ss) );
42 double ss_rr=-ss->innerProd(rr);
43 alpha = (ss_ss*gg_rr - gg_ss*ss_rr)/determ;
44 beta = (-gg_ss*gg_rr + gg_gg*ss_rr)/determ;
47 s->linearCombo(beta,g,alpha);
48 ss->linearCombo(beta,gg,alpha);
50 m->linearCombo(1.0,s,1.0);
51 rr->linearCombo(1.0,ss,1.0);
53 *res=rr->innerProd(rr);
55 fprintf(stderr,
"Residual is %g \n",*res);