151 ITG i=0, k=0, ncg=0,iam,ier=0;
152 double alpha=0.0, ekm1=0.0, rrho=0.0;
153 double rrho1=0.0, gz=0.0, qk=0.0;
154 double c1=0.005,qam,err,ram=0;
160 for (i=0; i<neq; i++)
165 if(err>1.e-20){qam+=err;iam++;}
167 if(iam>0) qam=qam/iam;
168 else {*niter=0;
return;}
172 printf(
"Cholesky preconditioning\n\n");
174 printf(
"alpha=%f\n",alpha);
178 if (alpha<=0.0) alpha=0.005;
180 printf(
"alpha=%f\n",alpha);
186 printf(
"Solving the system of equations using the iterative solver\n\n");
190 for (k=1; k<=*niter; k++, ncg++)
195 Mrhor(C,neq,ia,iz,r,rho);
207 printf(
"iteration= %" ITGFORMAT ", error= %e, limit=%e\n",ncg,ram,c1*qam);
208 if (k!=1 && (ram<=c1*qam))
break;
212 for (i=0; i<neq; i++) g[i] = ekm1*g[i]-rho[i];
219 for (i=0; i<neq; i++) g[i] = -rho[i];
231 for (i=0; i<neq; i++)
241 printf(
"*ERROR in PCG: no convergence;");
#define ITGFORMAT
Definition: CalculiX.h:52
void FORTRAN(actideacti,(char *set, ITG *nset, ITG *istartset, ITG *iendset, ITG *ialset, char *objectset, ITG *ipkon, ITG *ibject, ITG *ne))
void MatVecProduct(double *A, double *p, ITG neq, ITG *ia, ITG *iz, double *z)
Definition: pcgsolver.c:323
static double * c1
Definition: mafillvcompmain.c:30
subroutine stop()
Definition: stop.f:20
void InnerProduct(double *a, double *b, ITG n, double *Sum)
Definition: pcgsolver.c:477
void PreConditioning(double *A, ITG neq, ITG len, ITG *ia, ITG *iz, double alpha, ITG precFlg, double *C, ITG *ier)
Definition: pcgsolver.c:373
void Mrhor(double *C, ITG neq, ITG *ia, ITG *iz, double *r, double *rho)
Definition: pcgsolver.c:445
#define ITG
Definition: CalculiX.h:51