Skip to content

Commit

Permalink
Allow cg_mms_tm to write multiple sets of output files, classified by…
Browse files Browse the repository at this point in the history
… operator id. For this purpose, an additional integer has to be passed to invert_eo.
  • Loading branch information
kostrzewa committed Apr 13, 2012
1 parent 30f2a5c commit bb02c79
Show file tree
Hide file tree
Showing 8 changed files with 21 additions and 14 deletions.
2 changes: 1 addition & 1 deletion check_locallity.c
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ int main(int argc,char *argv[]) {
if(even_odd_flag) {
i = invert_eo(g_spinor_field[2], g_spinor_field[3], g_spinor_field[0], g_spinor_field[1],
solver_precision, max_solver_iterations, solver_flag, g_relative_precision_flag,
sub_evs_cg_flag, even_odd_flag, 0, NULL);
sub_evs_cg_flag, even_odd_flag, 0, NULL, -1);
convert_eo_to_lexic(g_spinor_field[DUM_DERI+1], g_spinor_field[2], g_spinor_field[3]);
}

Expand Down
5 changes: 3 additions & 2 deletions invert_eo.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,8 @@ int invert_eo(spinor * const Even_new, spinor * const Odd_new,
const double precision, const int max_iter,
const int solver_flag, const int rel_prec,
const int sub_evs_flag, const int even_odd_flag,
const int no_extra_masses, double * const extra_masses ) {
const int no_extra_masses, double * const extra_masses,
const int id ) {

int iter = 0;
/* here comes the inversion using even/odd preconditioning */
Expand Down Expand Up @@ -369,7 +370,7 @@ int invert_eo(spinor * const Even_new, spinor * const Odd_new,
if(g_proc_id == 0) {printf("# Using multi mass CG!\n"); fflush(stdout);}
gamma5(g_spinor_field[DUM_DERI+1], g_spinor_field[DUM_DERI], VOLUME);
iter = cg_mms_tm(g_spinor_field[DUM_DERI], g_spinor_field[DUM_DERI+1],
max_iter, precision, rel_prec, VOLUME, &Q_pm_psi, no_extra_masses, extra_masses);
max_iter, precision, rel_prec, VOLUME, &Q_pm_psi, no_extra_masses, extra_masses, id);
Q_minus_psi(g_spinor_field[DUM_DERI+1], g_spinor_field[DUM_DERI]);
}
else {
Expand Down
3 changes: 2 additions & 1 deletion invert_eo.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ int invert_eo(spinor * const Even_new, spinor * const Odd_new,
const double precision, const int iter_max,
const int solver_flag, const int rel_prec,
const int sub_evs_flag, const int even_odd_flag,
const int no_extra_masses, double * const extra_masses );
const int no_extra_masses, double * const extra_masses,
const int id );

#endif
2 changes: 1 addition & 1 deletion online_measurement.c
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ void online_measurement(const int traj, const int id) {

invert_eo(g_spinor_field[2], g_spinor_field[3],
g_spinor_field[0], g_spinor_field[1],
1.e-14, measurement_list[id].max_iter, CG, 1, 0, 1, 0, NULL);
1.e-14, measurement_list[id].max_iter, CG, 1, 0, 1, 0, NULL, -1);

/* now we bring it to normal format */
/* here we use implicitly DUM_MATRIX and DUM_MATRIX+1 */
Expand Down
2 changes: 1 addition & 1 deletion operator.c
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ void op_invert(const int op_id, const int index_start) {
optr->iterations = invert_eo( optr->prop0, optr->prop1, optr->sr0, optr->sr1,
optr->eps_sq, optr->maxiter,
optr->solver, optr->rel_prec,
0, optr->even_odd_flag,optr->no_extra_masses, optr->extra_masses );
0, optr->even_odd_flag,optr->no_extra_masses, optr->extra_masses, optr->id );

/* check result */
M_full(g_spinor_field[4], g_spinor_field[5], optr->prop0, optr->prop1);
Expand Down
2 changes: 1 addition & 1 deletion pion_norm.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ void pion_norm(const int traj, const int id) {
/* invert on the stochastic source */
invert_eo(g_spinor_field[2], g_spinor_field[3],
g_spinor_field[0], g_spinor_field[1],
1.e-14, measurement_list[id].max_iter, CG, 1, 0, 1, 0, NULL);
1.e-14, measurement_list[id].max_iter, CG, 1, 0, 1, 0, NULL, -1);

/* now we bring it to normal format */
/* here we use implicitly DUM_MATRIX and DUM_MATRIX+1 */
Expand Down
16 changes: 10 additions & 6 deletions solver/cg_mms_tm.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,11 @@ void init_mms_tm(const int nr);
/* P output = solution , Q input = source */
int cg_mms_tm(spinor * const P, spinor * const Q, const int max_iter,
double eps_sq, const int rel_prec, const int N, matrix_mult f,
const int no_extra_masses, double * const extra_masses) {
const int no_extra_masses, double * const extra_masses, const int id) {

static double normsq, pro, err, alpha_cg = 1., beta_cg = 0., squarenorm;
int iteration, im, append = 0;
char filename[100];
char filename[300];
static double gamma, alpham1;
double tmp_mu = g_mu;
WRITER * writer = NULL;
Expand All @@ -71,7 +71,11 @@ int cg_mms_tm(spinor * const P, spinor * const Q, const int max_iter,
const int nr_sf = 5;

init_solver_field(&solver_field, VOLUMEPLUSRAND, nr_sf);
init_mms_tm(no_extra_masses);

/* we initialise the maximum number of parameter arrays for cg_mms_tm
* because we have no way to figure out what is the actual maximum number
* of extra masses configured in the set of operators with extra masses */
init_mms_tm(MAX_EXTRA_MASSES);

/* currently only implemented for P=0 */
zero_spinor_field(P, N);
Expand Down Expand Up @@ -175,13 +179,13 @@ int cg_mms_tm(spinor * const P, spinor * const Q, const int max_iter,

if(SourceInfo.type != 1) {
if (PropInfo.splitted) {
sprintf(filename, "%s.%.4d.%.2d.%.2d.cgmms.%.2d.inverted", SourceInfo.basename, SourceInfo.nstore, SourceInfo.t, SourceInfo.ix, im+1);
sprintf(filename, "%s.%.4d.%.2d.%.2d.%.2d.cgmms.%.2d.inverted", SourceInfo.basename, SourceInfo.nstore, SourceInfo.t, SourceInfo.ix, id, im+1);
} else {
sprintf(filename, "%s.%.4d.%.2d.cgmms.%.2d.inverted", SourceInfo.basename, SourceInfo.nstore, SourceInfo.t, im+1);
sprintf(filename, "%s.%.4d.%.2d.%.2d.cgmms.%.2d.inverted", SourceInfo.basename, SourceInfo.nstore, SourceInfo.t, id, im+1);
}
}
else {
sprintf(filename, "%s.%.4d.%.5d.cgmms.%.2d.0", SourceInfo.basename, SourceInfo.nstore, SourceInfo.sample, im+1);
sprintf(filename, "%s.%.4d.%.5d.%.2d.cgmms.%.2d.0", SourceInfo.basename, SourceInfo.nstore, SourceInfo.sample, id, im+1);
}
if(g_kappa != 0) {
mul_r(temp_save, (2*g_kappa)*(2*g_kappa), temp_save, N);
Expand Down
3 changes: 2 additions & 1 deletion solver/cg_mms_tm.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@

int cg_mms_tm(spinor * const P,spinor * const Q, const int max_iter,
double eps_sq, const int rel_prec, const int N, matrix_mult f,
const int no_extra_masses, double * const extra_masses);
const int no_extra_masses, double * const extra_masses,
const int id );

#endif

0 comments on commit bb02c79

Please sign in to comment.