Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
director_Smear.cpp
Go to the documentation of this file.
1 
14 #include "director_Smear.h"
15 
16 #ifdef USE_PARAMETERS_FACTORY
17 #include "parameters_factory.h"
18 #endif
19 
20 //- parameter entries
21 namespace {
22  void append_entry(Parameters& param)
23  {
24  param.Register_int("number_of_smearing", 0);
25 
26  param.Register_string("verbose_level", "NULL");
27  }
28 
29 
30 #ifdef USE_PARAMETERS_FACTORY
31  bool init_param = ParametersFactory::Register("Director_Smear", append_entry);
32 #endif
33 }
34 //- end
35 
36 //- parameters class
38 //- end
39 
40 //====================================================================
42 {
43  const string str_vlevel = params.get_string("verbose_level");
44 
45  m_vl = vout.set_verbose_level(str_vlevel);
46 
47  //- fetch and check input parameters
48  int Nsmear;
49 
50  int err = 0;
51  err += params.fetch_int("number_of_smearing", Nsmear);
52 
53  if (err) {
54  vout.crucial(m_vl, "Director_Smear: fetch error, input parameter not found.\n");
55  abort();
56  }
57 
58 
59  set_parameters(Nsmear);
60 }
61 
62 
63 //====================================================================
65 {
66  int Nvol = CommonParameters::Nvol();
67  int Ndim = CommonParameters::Ndim();
68 
69  //- print input parameters
70  vout.general(m_vl, "Parameters of Director_Smear:\n");
71  vout.general(m_vl, " Nsmear = %d\n", Nsmear);
72 
73  //- range check
74  // NB. Nsmear == 0 is allowed.
75 
76  //- store values
77  m_Nsmear = Nsmear;
78 
79  //- post-process
80  m_Usmear.resize(m_Nsmear);
81  if (m_Nsmear > 0) {
82  for (int i_smear = 0; i_smear < m_Nsmear; ++i_smear) {
83  m_Usmear[i_smear].reset(Nvol, Ndim);
84  }
85  vout.detailed(m_vl, " size of Usmear[i_smear] was set.\n");
86  }
87 }
88 
89 
90 //====================================================================
92 {
93  m_U = (Field_G *)U;
94 
95  if (m_status_linkv == 0) smear();
96 }
97 
98 
99 //====================================================================
101 {
102  assert(m_U != 0);
103 
104  if (i_smear == 0) {
105  return m_U;
106  } else {
107  return &m_Usmear[i_smear - 1];
108  }
109 }
110 
111 
112 //====================================================================
114 {
115  if (m_Nsmear > 0) {
116  int Nvol = m_U->nvol();
117  int Nex = m_U->nex();
118 
119  Field_G Usmear(Nvol, Nex);
120  Field_G Uprev(Nvol, Nex);
121 
122  for (int i_smear = 0; i_smear < m_Nsmear; ++i_smear) {
123  if (i_smear == 0) {
124  Uprev = *m_U;
125  } else {
126  Uprev = m_Usmear[i_smear - 1];
127  }
128  m_smear->smear(Usmear, Uprev);
129  m_Usmear[i_smear] = (Field)Usmear;
130  }
131  }
132 
133  ++m_status_linkv;
134 }
135 
136 
137 //====================================================================
138 //============================================================END=====