00001
00002
00003
00004
00005
00006
00007
00008
00009
00016 #ifndef __IWAVE_H_
00017 #define __IWAVE_H_
00018
00019
00020 #include "utils.h"
00021 #include "usempi.h"
00022 #include "exchangeinfo.h"
00023 #include "parser.h"
00024 #include "fd.h"
00025
00026
00027
00028
00029
00030
00036 typedef struct s_PARALLELINFO {
00037 int ndim;
00038 int nnei;
00039 int wsize;
00040 int wrank;
00041 int threadsupp;
00042 MPI_Comm ccomm;
00043 IPNT cdims;
00044 IPNT crank;
00045 int lrank;
00046 int sranks[IWAVE_NNEI];
00047 int rranks[IWAVE_NNEI];
00048 EXCHANGEINFO seinfo[RDOM_MAX_NARR][IWAVE_NNEI];
00049 EXCHANGEINFO reinfo[RDOM_MAX_NARR][IWAVE_NNEI];
00058 } PARALLELINFO;
00059
00060
00061
00067 int initparallel(int ts);
00068
00069
00075 void initparallel_global(int);
00076
00077
00085 int initparallel_local(PARARRAY, FILE *);
00086
00096 int initpinfo(PARALLELINFO *pinfo, FILE *stream);
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121 int initexch(PARALLELINFO *pinfo, int ndim, FILE *stream);
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00142 int destroypinfo(PARALLELINFO *pinfo, int fabort);
00143
00144
00150 typedef struct s_IWAVE {
00152 PARALLELINFO pinfo;
00154 IMODEL model;
00160 int stats;
00169 int nopts;
00181 int printact;
00182 #ifdef IWAVE_USE_MPI
00183
00189
00196
00202
00203 #endif
00204 } IWAVE;
00205
00206
00250 int iwave_construct(IWAVE * state, PARARRAY * pars, FILE * stream, IWaveInfo const & ic);
00251
00257 void iwave_printf(IWAVE * state, PARARRAY * pars, FILE * stream, IWaveInfo const & ic);
00258
00266 void iwave_dynamic_init(IWAVE * state,
00267 int it, IWaveInfo const & ic);
00268
00275 void iwave_destroy(IWAVE * state, FD_MODELDEST d);
00276
00277
00283 void quietexit(PARARRAY * pars,FILE ** stream);
00284
00288 void abortexit(int err,PARARRAY * pars,FILE ** stream);
00289
00300 int initoutstream(FILE ** stream, int rk, int sz);
00306 int readinput(PARARRAY ** pars, FILE * stream, int argc, char **argv);
00312 void readparpars(PARARRAY * pars,
00313 int * stats,
00314 int * nopts,
00315 int * printact,
00316 FILE * out);
00317
00321 void storeparallel(PARALLELINFO *pinfo);
00322
00328 int setrecvexchange(IMODEL * model, PARALLELINFO * pinfo, FILE * stream, IWaveInfo const & ic);
00329
00333 int dump_pi(PARARRAY * pars, PARALLELINFO *pinfo, FILE *stream);
00334
00339 void dump_ac(PARARRAY * pars, IMODEL * model, FILE * stream);
00340
00344 void dump_rs(PARARRAY * pars, IMODEL * model, FILE * stream, int sends, IWaveInfo const & ic, PARALLELINFO * pinfo);
00345
00346 #ifdef IWAVE_USE_MPI
00347
00350 void prepexch(PARALLELINFO * pinfo, IMODEL * model, IWaveInfo const & ic);
00351
00352
00353
00354
00358
00359
00360
00361
00362
00367
00368
00369
00370
00371
00372 #endif
00373
00374 #endif
00375