100 DOUBLE cr,max_cr,min_cr,normr;
137 for(i =0; i<m*m;i++){
146 itemp =
max(locRows,locCols);
194 f = fopen(fname,
"w+");
198 logger(
LOG_INFO,
"Starting GMRES iterations: maxit=%d, restart=%d\n",NIT,m);
210 for(it=0;it<NIT;it++){
218 pzcopy_(&gRows,
solution->
rhs,&ione,&ione,descRHS,&ione,r0,&ione,&ione,descr,&ione);
222 &cone, r0 ,&ione,&ione,descr,&ione);
227 pdznrm2_(&gCols,&beta,r0,&ione,&ione,descr,&ione);
261 pzcopy_(&gRows,r0,&ione,&ione,descr,&ione, v,&ione,&ione,descv,&ione);
263 pzscal_(&gRows,&tmp,v,&ione,&ione,descv,&ione);
279 &(v[i*locRows]) ,&ione,&ione,descv,&ione,
280 &czero,w ,&ione,&ione,descw,&ione);
290 pzdotc_(&gRows,&tmp,w ,&ione,&ione,descw,&ione,
291 &v[k*locRows],&ione,&ione,descv,&ione);
294 pzaxpy_(&gRows,&tmp,&v[k*locRows],&ione,&ione,descv,&ione,w,&ione ,&ione,descw,&ione);
299 pdznrm2_(&gRows,&dtmp,w,&ione,&ione,descw,&ione);
302 pzcopy_(&gRows,w,&ione,&ione,descw,&ione, &v[(i+1)*locRows],&ione,&ione,descv,&ione);
303 tmp = cone/(H[(i+1)*m+i]);
304 pzscal_(&gRows,&tmp,&v[(i+1)*locRows],&ione,&ione,descv,&ione);
309 gamma = sn[k]*H[(k+1)*m+i] + cs[k]*H[k*m+i];
310 H[(k+1)*m +i] = -sn[k]*H[(k )*m+i] + cs[k]*H[(k+1)*m+i];
313 rotmat(&cs[i], &sn[i], H[i*m+i], H[(i+1)*m+i]);
316 H[i*m+i] = cs[i]*H[i*m+i] + sn[i]*H[(i+1)*m+i];
320 bhat[i+1] = -sn[i] *bhat[i];
321 bhat[i] = cs[i] *bhat[i];
323 error = cabs(bhat[i+1])/bnrm;
324 MPI_Bcast(&error,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
326 fprintf(f,
"%ld %d %d %10.8E\n",cit,it,i,error);
333 logger(
LOG_INFO,
"Reached convergence: error=%+10.8E at iteration %ld\n",error,cit);
342 y[nr] = bhat[nr]/H[nr*m+nr];
350 sum += H[k*m+l]*y[l];
352 y[k] = (bhat[k] - sum) / H[k*m+k];
364 pzaxpy_(&gRows,&y[l],&v[l*locRows],&ione, &ione, descv , &ione,
390 MPI_Barrier(MPI_COMM_WORLD);
394 logger(
LOG_INFO,
" GMRES: %d iterations, residual:%f\n",cit,error);
396 logger(
LOG_INFO,
"Broadcasting solution (%d complex values)\n",gRows);
struct run_info * runinfo
Definition: globals.h:34
int npcols
Definition: structs.h:113
void pzgemv_(char *trans, int *m, int *n, COMPLEX *alpha, COMPLEX *A, int *ia, int *ja, int *desca, COMPLEX *x, int *ix, int *jx, int *descx, int *mx, COMPLEX *beta, COMPLEX *y, int *iy, int *jy, int *descy, int *my)
const char * title
Definition: structs.h:135
int ncntr
Definition: structs.h:299
COMPLEX * matY
Definition: structs.h:603
#define MPI_ACOUSTO_COMPLEX
Definition: types.h:56
int myrow
Definition: structs.h:115
int nprows
Definition: structs.h:111
void pzaxpy_(int *n, COMPLEX *alpha, COMPLEX *x, int *ix, int *jx, int *descx, int *incx, COMPLEX *y, int *iy, int *jy, int *descy, int *incy)
void get_filename(char *filename, const char *format,...)
Definition: utils.c:59
int nchief
Definition: structs.h:301
COMPLEX * sol
Definition: structs.h:607
DOUBLE tolerance
Definition: structs.h:510
#define LOG_INFO
Definition: logger.h:26
void pzscal_(int *n, COMPLEX *alpha, COMPLEX *x, int *ix, int *jx, int *descx, int *incx)
int ctxt
Definition: structs.h:109
void descinit_(int *desc, int *m, int *n, int *mb, int *nb, int *ia, int *ja, int *ictxt, int *llda, int *info)
struct solution_struct * solution
Definition: globals.h:52
#define COMPLEX
Definition: types.h:48
void pdznrm2_(int *n, DOUBLE *norm2, COMPLEX *X, int *ix, int *jx, int *descx, int *incx)
struct modsol_info * modsolinfo
Definition: globals.h:44
#define LOG_DEBUG
Definition: logger.h:27
int mycol
Definition: structs.h:117
void pzdotc_(int *n, COMPLEX *dotc, COMPLEX *x, int *ix, int *jx, int *descx, int *incx, COMPLEX *y, int *iy, int *jy, int *descy, int *incy)
double DOUBLE
Definition: types.h:44
int numroc_(int *m, int *mb, int *p, int *ia, int *npr)
int rank
Definition: globals.h:79
int col_block_size
Definition: structs.h:121
long restart
Definition: structs.h:516
struct run_details * rundetails
Definition: globals.h:36
void pzcopy_(int *n, COMPLEX *x, int *ix, int *jx, int *descx, int *incx, COMPLEX *y, int *iy, int *jy, int *descy, int *incy)
static int max(int a, int b)
Definition: ac_gmres.c:26
void rotmat(COMPLEX *c, COMPLEX *s, const COMPLEX a, const COMPLEX b)
Definition: ac_gmres.c:29
COMPLEX * rhs
Definition: structs.h:605
int row_block_size
Definition: structs.h:119
long maxiterations
Definition: structs.h:513
void logger(int level, char *msg,...)
Definition: logger.c:56
#define calloc(n, size)
Definition: allocation.h:37
struct modgeom_info * modgeominfo
Definition: globals.h:38
#define VecZeroEntries(V, n)
Definition: allocation.h:99
DOUBLE y
Definition: structs.h:33