16 #ifdef USE_PARAMETERS_FACTORY
38 #ifdef USE_PARAMETERS_FACTORY
53 const string str_vlevel = params.
get_string(
"verbose_level");
58 string str_gmset_type;
61 valarray<double> phi, phipr;
65 err_optional += params.
fetch_string(
"gamma_matrix_type", str_gmset_type);
86 double *phi,
double *phipr)
92 for (
int mu = 0; mu <
m_Ndim; ++mu) {
105 assert(bc.size() ==
m_Ndim);
111 for (
int i = 0; i < 3; ++i) {
116 for (
int mu = 0; mu <
m_Ndim; ++mu) {
127 inline double mult_uv_r(
double *u,
double *v)
129 return u[0] * v[0] - u[1] * v[1]
130 + u[2] * v[2] - u[3] * v[3]
131 + u[4] * v[4] - u[5] * v[5];
135 inline double mult_uv_i(
double *u,
double *v)
137 return u[0] * v[1] + u[1] * v[0]
138 + u[2] * v[3] + u[3] * v[2]
139 + u[4] * v[5] + u[5] * v[4];
157 m_GM.resize(m_Ndim + 1);
158 m_SG.resize(m_Ndim * m_Ndim);
213 assert(f.
nex() == 1);
226 assert(f.
nex() == 1);
238 assert(f.
nex() == 1);
249 assert(f.
nex() == 1);
312 const int mu,
const int nu)
322 (this->*
m_csw)(v, w);
329 assert(w.
nex() == 1);
333 int Ndf = 2 * Nc * Nc;
342 double *w2 =
const_cast<Field_F *
>(&w)->ptr(0);
343 double *v2 = v.
ptr(0);
354 for (
int site = 0; site < Nvol; ++site) {
355 int iv = Nvc * Nd * site;
358 for (
int ic = 0; ic < Nc; ++ic) {
361 int icg = ic * Nvc + ig;
364 v2[icr + id1 + iv] -= mult_uv_i(&Bx[icg], &w2[id2 + iv]);
365 v2[ici + id1 + iv] += mult_uv_r(&Bx[icg], &w2[id2 + iv]);
366 v2[icr + id2 + iv] -= mult_uv_i(&Bx[icg], &w2[id1 + iv]);
367 v2[ici + id2 + iv] += mult_uv_r(&Bx[icg], &w2[id1 + iv]);
369 v2[icr + id3 + iv] -= mult_uv_i(&Bx[icg], &w2[id4 + iv]);
370 v2[ici + id3 + iv] += mult_uv_r(&Bx[icg], &w2[id4 + iv]);
371 v2[icr + id4 + iv] -= mult_uv_i(&Bx[icg], &w2[id3 + iv]);
372 v2[ici + id4 + iv] += mult_uv_r(&Bx[icg], &w2[id3 + iv]);
375 v2[icr + id1 + iv] += mult_uv_r(&By[icg], &w2[id2 + iv]);
376 v2[ici + id1 + iv] += mult_uv_i(&By[icg], &w2[id2 + iv]);
377 v2[icr + id2 + iv] -= mult_uv_r(&By[icg], &w2[id1 + iv]);
378 v2[ici + id2 + iv] -= mult_uv_i(&By[icg], &w2[id1 + iv]);
380 v2[icr + id3 + iv] += mult_uv_r(&By[icg], &w2[id4 + iv]);
381 v2[ici + id3 + iv] += mult_uv_i(&By[icg], &w2[id4 + iv]);
382 v2[icr + id4 + iv] -= mult_uv_r(&By[icg], &w2[id3 + iv]);
383 v2[ici + id4 + iv] -= mult_uv_i(&By[icg], &w2[id3 + iv]);
386 v2[icr + id1 + iv] -= mult_uv_i(&Bz[icg], &w2[id1 + iv]);
387 v2[ici + id1 + iv] += mult_uv_r(&Bz[icg], &w2[id1 + iv]);
388 v2[icr + id2 + iv] += mult_uv_i(&Bz[icg], &w2[id2 + iv]);
389 v2[ici + id2 + iv] -= mult_uv_r(&Bz[icg], &w2[id2 + iv]);
391 v2[icr + id3 + iv] -= mult_uv_i(&Bz[icg], &w2[id3 + iv]);
392 v2[ici + id3 + iv] += mult_uv_r(&Bz[icg], &w2[id3 + iv]);
393 v2[icr + id4 + iv] += mult_uv_i(&Bz[icg], &w2[id4 + iv]);
394 v2[ici + id4 + iv] -= mult_uv_r(&Bz[icg], &w2[id4 + iv]);
397 v2[icr + id1 + iv] += mult_uv_i(&Ex[icg], &w2[id2 + iv]);
398 v2[ici + id1 + iv] -= mult_uv_r(&Ex[icg], &w2[id2 + iv]);
399 v2[icr + id2 + iv] += mult_uv_i(&Ex[icg], &w2[id1 + iv]);
400 v2[ici + id2 + iv] -= mult_uv_r(&Ex[icg], &w2[id1 + iv]);
402 v2[icr + id3 + iv] -= mult_uv_i(&Ex[icg], &w2[id4 + iv]);
403 v2[ici + id3 + iv] += mult_uv_r(&Ex[icg], &w2[id4 + iv]);
404 v2[icr + id4 + iv] -= mult_uv_i(&Ex[icg], &w2[id3 + iv]);
405 v2[ici + id4 + iv] += mult_uv_r(&Ex[icg], &w2[id3 + iv]);
408 v2[icr + id1 + iv] -= mult_uv_r(&Ey[icg], &w2[id2 + iv]);
409 v2[ici + id1 + iv] -= mult_uv_i(&Ey[icg], &w2[id2 + iv]);
410 v2[icr + id2 + iv] += mult_uv_r(&Ey[icg], &w2[id1 + iv]);
411 v2[ici + id2 + iv] += mult_uv_i(&Ey[icg], &w2[id1 + iv]);
413 v2[icr + id3 + iv] += mult_uv_r(&Ey[icg], &w2[id4 + iv]);
414 v2[ici + id3 + iv] += mult_uv_i(&Ey[icg], &w2[id4 + iv]);
415 v2[icr + id4 + iv] -= mult_uv_r(&Ey[icg], &w2[id3 + iv]);
416 v2[ici + id4 + iv] -= mult_uv_i(&Ey[icg], &w2[id3 + iv]);
419 v2[icr + id1 + iv] += mult_uv_i(&Ez[icg], &w2[id1 + iv]);
420 v2[ici + id1 + iv] -= mult_uv_r(&Ez[icg], &w2[id1 + iv]);
421 v2[icr + id2 + iv] -= mult_uv_i(&Ez[icg], &w2[id2 + iv]);
422 v2[ici + id2 + iv] += mult_uv_r(&Ez[icg], &w2[id2 + iv]);
424 v2[icr + id3 + iv] -= mult_uv_i(&Ez[icg], &w2[id3 + iv]);
425 v2[ici + id3 + iv] += mult_uv_r(&Ez[icg], &w2[id3 + iv]);
426 v2[icr + id4 + iv] += mult_uv_i(&Ez[icg], &w2[id4 + iv]);
427 v2[ici + id4 + iv] -= mult_uv_r(&Ez[icg], &w2[id4 + iv]);
431 v *= m_kappa *
m_cSW;
438 assert(w.
nex() == 1);
442 int Ndf = 2 * Nc * Nc;
451 double *w2 =
const_cast<Field_F *
>(&w)->ptr(0);
452 double *v2 = v.
ptr(0);
463 for (
int site = 0; site < Nvol; ++site) {
464 int iv = Nvc * Nd * site;
467 for (
int ic = 0; ic < Nc; ++ic) {
470 int icg = ic * Nvc + ig;
473 v2[icr + id1 + iv] -= mult_uv_i(&Bx[icg], &w2[id2 + iv]);
474 v2[ici + id1 + iv] += mult_uv_r(&Bx[icg], &w2[id2 + iv]);
475 v2[icr + id2 + iv] -= mult_uv_i(&Bx[icg], &w2[id1 + iv]);
476 v2[ici + id2 + iv] += mult_uv_r(&Bx[icg], &w2[id1 + iv]);
478 v2[icr + id3 + iv] -= mult_uv_i(&Bx[icg], &w2[id4 + iv]);
479 v2[ici + id3 + iv] += mult_uv_r(&Bx[icg], &w2[id4 + iv]);
480 v2[icr + id4 + iv] -= mult_uv_i(&Bx[icg], &w2[id3 + iv]);
481 v2[ici + id4 + iv] += mult_uv_r(&Bx[icg], &w2[id3 + iv]);
484 v2[icr + id1 + iv] += mult_uv_r(&By[icg], &w2[id2 + iv]);
485 v2[ici + id1 + iv] += mult_uv_i(&By[icg], &w2[id2 + iv]);
486 v2[icr + id2 + iv] -= mult_uv_r(&By[icg], &w2[id1 + iv]);
487 v2[ici + id2 + iv] -= mult_uv_i(&By[icg], &w2[id1 + iv]);
489 v2[icr + id3 + iv] += mult_uv_r(&By[icg], &w2[id4 + iv]);
490 v2[ici + id3 + iv] += mult_uv_i(&By[icg], &w2[id4 + iv]);
491 v2[icr + id4 + iv] -= mult_uv_r(&By[icg], &w2[id3 + iv]);
492 v2[ici + id4 + iv] -= mult_uv_i(&By[icg], &w2[id3 + iv]);
495 v2[icr + id1 + iv] -= mult_uv_i(&Bz[icg], &w2[id1 + iv]);
496 v2[ici + id1 + iv] += mult_uv_r(&Bz[icg], &w2[id1 + iv]);
497 v2[icr + id2 + iv] += mult_uv_i(&Bz[icg], &w2[id2 + iv]);
498 v2[ici + id2 + iv] -= mult_uv_r(&Bz[icg], &w2[id2 + iv]);
500 v2[icr + id3 + iv] -= mult_uv_i(&Bz[icg], &w2[id3 + iv]);
501 v2[ici + id3 + iv] += mult_uv_r(&Bz[icg], &w2[id3 + iv]);
502 v2[icr + id4 + iv] += mult_uv_i(&Bz[icg], &w2[id4 + iv]);
503 v2[ici + id4 + iv] -= mult_uv_r(&Bz[icg], &w2[id4 + iv]);
506 v2[icr + id1 + iv] += mult_uv_i(&Ex[icg], &w2[id4 + iv]);
507 v2[ici + id1 + iv] -= mult_uv_r(&Ex[icg], &w2[id4 + iv]);
508 v2[icr + id2 + iv] += mult_uv_i(&Ex[icg], &w2[id3 + iv]);
509 v2[ici + id2 + iv] -= mult_uv_r(&Ex[icg], &w2[id3 + iv]);
511 v2[icr + id3 + iv] += mult_uv_i(&Ex[icg], &w2[id2 + iv]);
512 v2[ici + id3 + iv] -= mult_uv_r(&Ex[icg], &w2[id2 + iv]);
513 v2[icr + id4 + iv] += mult_uv_i(&Ex[icg], &w2[id1 + iv]);
514 v2[ici + id4 + iv] -= mult_uv_r(&Ex[icg], &w2[id1 + iv]);
517 v2[icr + id1 + iv] -= mult_uv_r(&Ey[icg], &w2[id4 + iv]);
518 v2[ici + id1 + iv] -= mult_uv_i(&Ey[icg], &w2[id4 + iv]);
519 v2[icr + id2 + iv] += mult_uv_r(&Ey[icg], &w2[id3 + iv]);
520 v2[ici + id2 + iv] += mult_uv_i(&Ey[icg], &w2[id3 + iv]);
522 v2[icr + id3 + iv] -= mult_uv_r(&Ey[icg], &w2[id2 + iv]);
523 v2[ici + id3 + iv] -= mult_uv_i(&Ey[icg], &w2[id2 + iv]);
524 v2[icr + id4 + iv] += mult_uv_r(&Ey[icg], &w2[id1 + iv]);
525 v2[ici + id4 + iv] += mult_uv_i(&Ey[icg], &w2[id1 + iv]);
528 v2[icr + id1 + iv] += mult_uv_i(&Ez[icg], &w2[id3 + iv]);
529 v2[ici + id1 + iv] -= mult_uv_r(&Ez[icg], &w2[id3 + iv]);
530 v2[icr + id2 + iv] -= mult_uv_i(&Ez[icg], &w2[id4 + iv]);
531 v2[ici + id2 + iv] += mult_uv_r(&Ez[icg], &w2[id4 + iv]);
533 v2[icr + id3 + iv] += mult_uv_i(&Ez[icg], &w2[id1 + iv]);
534 v2[ici + id3 + iv] -= mult_uv_r(&Ez[icg], &w2[id1 + iv]);
535 v2[icr + id4 + iv] -= mult_uv_i(&Ez[icg], &w2[id2 + iv]);
536 v2[ici + id4 + iv] += mult_uv_r(&Ez[icg], &w2[id2 + iv]);
540 v *= m_kappa *
m_cSW;
565 const int mu,
const int nu)
573 Field_G Cup(Nvol, 1), Cdn(Nvol, 1);
575 Field_G v(Nvol, 1), v2(Nvol, 1);
const Field_F D(const Field_F &)
void Register_string(const string &, const string &)
void mult_csw_dirac(Field_F &, const Field_F &)
const Field_F D(const Field_F &)
void set_parameters(const Parameters ¶ms)
void mult_Field_Gdn(Field_G &w, const int ex, const Field_G &u1, const int ex1, const Field_G &u2, const int ex2)
double m_phi[3]
SF boundary condition at t=0.
void general(const char *format,...)
GammaMatrix get_GM(GMspecies spec)
static const std::string class_name
double * ptr(const int jin, const int site, const int jex)
Container of Field-type object.
const Field_F Ddag(const Field_F &)
int fetch_int_vector(const string &key, std::valarray< int > &val) const
Wilson fermion operator with SF BC.
double m_phipr[3]
SF boundary condition at t=Nt.
void mult_isigma(Field_F &, const Field_F &, const int mu, const int nu)
Wilson-type fermion field.
int fetch_double_vector(const string &key, std::valarray< double > &val) const
const Field_F DdagD(const Field_F &)
void ah_Field_G(Field_G &w, const int ex)
int sg_index(int mu, int nu)
Parameters_Fopr_Clover_SF()
void multadd_Field_Gdn(Field_G &w, const int ex, const Field_G &u1, const int ex1, const Field_G &u2, const int ex2, const double ff)
void mult_Field_Gnd(Field_G &w, const int ex, const Field_G &u1, const int ex1, const Field_G &u2, const int ex2)
void mult_iGM(Field_F &y, const GammaMatrix &gm, const Field_F &x)
gamma matrix multiplication (i is multiplied)
Bridge::VerboseLevel m_vl
void set_fieldstrength(Field_G &, const int, const int)
int fetch_string(const string &key, string &val) const
void mult_csw(Field_F &, const Field_F &)
Set of Gamma Matrices: basis class.
Fopr_Wilson_SF * m_fopr_w
void multadd_Field_Gnd(Field_G &w, const int ex, const Field_G &u1, const int ex1, const Field_G &u2, const int ex2, const double ff)
void crucial(const char *format,...)
std::valarray< GammaMatrix > m_GM
const Field_F H(const Field_F &)
void(Fopr_Clover_SF::* m_csw)(Field_F &, const Field_F &)
void mult_csw_chiral(Field_F &, const Field_F &)
std::valarray< GammaMatrix > m_SG
std::valarray< int > m_boundary
static bool Register(const std::string &realm, const creator_callback &cb)
void set_boundary_zero(Field &f)
Field_F_SF setzero
In order to set the boundary field to zero.
void Register_double_vector(const string &, const std::valarray< double > &)
void Register_double(const string &, const double)
void Register_int_vector(const string &, const std::valarray< int > &)
const Field mult_gm5(const Field &w)
Field_G_SF lower(const Field_G &, const int, const int)
void setpart_ex(int ex, const Field &w, int exw)
Field_G_SF upper(const Field_G &, const int, const int)
int fetch_double(const string &key, double &val) const
string get_string(const string &key) const
void init(std::string repr)
static VerboseLevel set_verbose_level(const std::string &str)
void set_parameters(const Parameters ¶ms)
void set_parameters(const Parameters ¶ms)
void forward(Field &, const Field &, const int mu)