void det_heatbath(const int id, hamiltonian_field_t * const hf) { monomial * mnl = &monomial_list[id]; double atime, etime; atime = gettime(); g_mu = mnl->mu; boundary(mnl->kappa); mnl->csg_n = 0; mnl->csg_n2 = 0; mnl->iter0 = 0; mnl->iter1 = 0; if(mnl->even_odd_flag) { random_spinor_field_eo(mnl->w_fields[0], mnl->rngrepro, RN_GAUSS); mnl->energy0 = square_norm(mnl->w_fields[0], VOLUME/2, 1); mnl->Qp(mnl->pf, mnl->w_fields[0]); chrono_add_solution(mnl->pf, mnl->csg_field, mnl->csg_index_array, mnl->csg_N, &mnl->csg_n, VOLUME/2); if(mnl->solver != CG) { chrono_add_solution(mnl->pf, mnl->csg_field2, mnl->csg_index_array2, mnl->csg_N2, &mnl->csg_n2, VOLUME/2); } } else { random_spinor_field_lexic(mnl->w_fields[0], mnl->rngrepro,RN_GAUSS); mnl->energy0 = square_norm(mnl->w_fields[0], VOLUME, 1); Q_plus_psi(mnl->pf, mnl->w_fields[0]); chrono_add_solution(mnl->pf, mnl->csg_field, mnl->csg_index_array, mnl->csg_N, &mnl->csg_n, VOLUME/2); if(mnl->solver != CG) { chrono_add_solution(mnl->pf, mnl->csg_field2, mnl->csg_index_array2, mnl->csg_N2, &mnl->csg_n2, VOLUME/2); } } g_mu = g_mu1; boundary(g_kappa); etime = gettime(); if(g_proc_id == 0) { if(g_debug_level > 1) { printf("# Time for %s monomial heatbath: %e s\n", mnl->name, etime-atime); } if(g_debug_level > 3) { printf("called det_heatbath for id %d energey %f\n", id, mnl->energy0); } } return; }
void det_heatbath(const int id, hamiltonian_field_t * const hf) { monomial * mnl = &monomial_list[id]; g_mu = mnl->mu; boundary(mnl->kappa); mnl->csg_n = 0; mnl->csg_n2 = 0; mnl->iter0 = 0; mnl->iter1 = 0; if(mnl->even_odd_flag) { random_spinor_field(g_spinor_field[2], VOLUME/2, mnl->rngrepro); mnl->energy0 = square_norm(g_spinor_field[2], VOLUME/2, 1); Qtm_plus_psi(mnl->pf, g_spinor_field[2]); chrono_add_solution(mnl->pf, mnl->csg_field, mnl->csg_index_array, mnl->csg_N, &mnl->csg_n, VOLUME/2); if(mnl->solver != CG) { chrono_add_solution(mnl->pf, mnl->csg_field2, mnl->csg_index_array2, mnl->csg_N2, &mnl->csg_n2, VOLUME/2); } } else { random_spinor_field(g_spinor_field[2], VOLUME, mnl->rngrepro); mnl->energy0 = square_norm(g_spinor_field[2], VOLUME, 1); Q_plus_psi(mnl->pf, g_spinor_field[2]); chrono_add_solution(mnl->pf, mnl->csg_field, mnl->csg_index_array, mnl->csg_N, &mnl->csg_n, VOLUME/2); if(mnl->solver != CG) { chrono_add_solution(mnl->pf, mnl->csg_field2, mnl->csg_index_array2, mnl->csg_N2, &mnl->csg_n2, VOLUME/2); } } g_mu = g_mu1; boundary(g_kappa); if(g_proc_id == 0 && g_debug_level > 3) { printf("called det_heatbath for id %d %d\n", id, mnl->even_odd_flag); } return; }