Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
commonParameters.cpp
Go to the documentation of this file.
1 
14 #include "commonParameters.h"
15 
16 #include "communicator.h"
17 
18 #include "bridgeIO.h"
19 using Bridge::vout;
20 
21 // initialize static parameters
22 // color, spinor and space-time dimension
23 const int CommonParameters::m_Nc = 3;
24 const int CommonParameters::m_Nd = 4;
25 const int CommonParameters::m_Ndim = 4;
26 
27 const double CommonParameters::m_epsilon_criterion = 1.0e-16;
28 
34 
40 
41 char CommonParameters::m_map_grid[] = "xyzt";
42 
48 
49 //CommonParameters* CommonParameters::m_instance = 0;
51 
53 
54 //====================================================================
55 void CommonParameters::init(const valarray<int>& lattice_size, const valarray<int>& grid_size)
56 {
57  if (m_initialized == true) {
58  vout.crucial("CommonParameters already initialized.");
59  abort();
60  }
61 
62  m_Lx = lattice_size[0];
63  m_Ly = lattice_size[1];
64  m_Lz = lattice_size[2];
65  m_Lt = lattice_size[3];
66 
67  m_NPEx = grid_size[0];
68  m_NPEy = grid_size[1];
69  m_NPEz = grid_size[2];
70  m_NPEt = grid_size[3];
71 
72  if (check_parameters() == false) {
73  vout.crucial("CommonParameters::check_parameters failed.\n");
74  abort();
75  }
76 
78 
79  m_initialized = true;
80 }
81 
82 
83 //====================================================================
85 {
86  if (m_Ndim == 0) return false;
87 
88  if (m_Nc == 0) return false;
89 
90  if (m_Nd == 0) return false;
91 
92  if (m_Lx == 0) return false;
93 
94  if (m_Ly == 0) return false;
95 
96  if (m_Lz == 0) return false;
97 
98  if (m_Lt == 0) return false;
99 
100  m_Lvol = m_Lx * m_Ly * m_Lz * m_Lt;
101 
102  if (m_NPE == 1) {
103 // if (m_NPEx != 1 || m_NPEy != 1 || m_NPEz != 1 || m_NPEt != 1) {
104 // vout.general(m_vl,stderr, "assume NPE_mu = 1\n");
105 // }
106  m_NPEx = m_NPEy = m_NPEz = m_NPEt = 1;
107  }
108 
109  if ((m_Nx != 0) && (m_NPEx != 0) && (m_Lx != m_Nx * m_NPEx)) return false;
110 
111  if ((m_Ny != 0) && (m_NPEy != 0) && (m_Ly != m_Ny * m_NPEy)) return false;
112 
113  if ((m_Nz != 0) && (m_NPEz != 0) && (m_Lz != m_Nz * m_NPEz)) return false;
114 
115  if ((m_Nt != 0) && (m_NPEt != 0) && (m_Lt != m_Nt * m_NPEt)) return false;
116 
117  if ((m_Nx == 0) && (m_NPEx != 0)) {
118  if (m_Lx % m_NPEx != 0) return false; else m_Nx = m_Lx / m_NPEx;
119  }
120  if ((m_Ny == 0) && (m_NPEy != 0)) {
121  if (m_Ly % m_NPEy != 0) return false; else m_Ny = m_Ly / m_NPEy;
122  }
123  if ((m_Nz == 0) && (m_NPEz != 0)) {
124  if (m_Lz % m_NPEz != 0) return false; else m_Nz = m_Lz / m_NPEz;
125  }
126  if ((m_Nt == 0) && (m_NPEt != 0)) {
127  if (m_Lt % m_NPEt != 0) return false; else m_Nt = m_Lt / m_NPEt;
128  }
129 
130  if ((m_Nx != 0) && (m_NPEx == 0)) {
131  if (m_Lx % m_Nx != 0) return false; else m_NPEx = m_Lx / m_Nx;
132  }
133  if ((m_Ny != 0) && (m_NPEy == 0)) {
134  if (m_Ly % m_Ny != 0) return false; else m_NPEy = m_Ly / m_Ny;
135  }
136  if ((m_Nz != 0) && (m_NPEz == 0)) {
137  if (m_Lz % m_Nz != 0) return false; else m_NPEz = m_Lz / m_Nz;
138  }
139  if ((m_Nt != 0) && (m_NPEt == 0)) {
140  if (m_Lt % m_Nt != 0) return false; else m_NPEt = m_Lt / m_Nt;
141  }
142 
143  if ((m_NPEx != 0) && (m_NPEy != 0) && (m_NPEz != 0) && (m_NPEt != 0)) {
144  if ((m_NPE != 0) && (m_NPE != m_NPEx * m_NPEy * m_NPEz * m_NPEt)) return false;
145 
146  if (m_NPE == 0) m_NPE = m_NPEx * m_NPEy * m_NPEz * m_NPEt;
147  }
148 
149  if ((m_Nx != 0) && (m_Ny != 0) && (m_Nz != 0) && (m_Nt != 0)) {
150  if ((m_Nvol != 0) && (m_Nvol != m_Nx * m_Ny * m_Nz * m_Nt)) return false;
151 
152  if (m_Nvol == 0) m_Nvol = m_Nx * m_Ny * m_Nz * m_Nt;
153  }
154 
155  return true;
156 }
157 
158 
159 //====================================================================
161 {
162  vout.general("\n");
163  vout.general("Lattice parameters:\n");
164  vout.general(" Lx = %4d, Ly = %4d, Lz = %4d, Lt = %4d,\n",
165  m_Lx, m_Ly, m_Lz, m_Lt);
166  vout.general(" Nx = %4d, Ny = %4d, Nz = %4d, Nt = %4d,\n",
167  m_Nx, m_Ny, m_Nz, m_Nt);
168  vout.general(" NPEx =%4d, NPEy =%4d, NPEz =%4d, NPEt =%4d,\n",
170  vout.general(" Lvol = %8d, Nvol = %6d, NPE = %6d,\n",
171  m_Lvol, m_Nvol, m_NPE);
172  vout.general(" Ndim = %4d\n", m_Ndim);
173  vout.general(" Nc = %4d\n", m_Nc);
174  vout.general(" Nd = %4d\n", m_Nd);
175  vout.general("\n");
176 }
177 
178 
179 //====================================================================
180 //============================================================END=====