52 const std::string
test_name =
"FFT.fft_check";
56 const std::string filename_input =
"test_FFT_check.yaml";
62 #ifdef USE_TESTMANAGER_AUTOREGISTER
77 double check_precision,
87 Timer time_fft_fw(
"FFT_Forward");
90 fft->fft(res1, src, FFT::FORWARD);
93 Timer time_fft_bw(
"FFT_Backward");
96 fft->fft(res2, res1, FFT::BACKWARD);
106 axpy(res1, -1.0, ref);
110 vout.
general(vl,
"diff (result - ref) = %24.20e\n", diff);
112 if (!(diff < check_precision)) ++err;
115 axpy(res2, -1.0, src);
118 vout.
general(vl,
"diff (reverse - src) = %24.20e\n", diff);
120 if (!(diff < check_precision)) ++err;
122 time_fft_fw.report();
123 time_fft_bw.report();
159 int nex = params_test.
get_int(
"external_dof");
161 string str_vlevel = params_test.
get_string(
"verbose_level");
162 bool do_check = params_test.
is_set(
"expected_result");
163 double expected_result = do_check ? params_test.
get_double(
"expected_result") : 0.0;
164 double check_precision = params_test.
is_set(
"check_precision") ? params_test.
get_double(
"check_precision") : 1.0e-8;
180 vout.
general(vl,
"source data file = %s\n", filename_source.c_str());
181 vout.
general(vl,
"reference data file = %s\n", filename_reference.c_str());
182 vout.
general(vl,
"check precision = %8.6e\n", check_precision);
208 std::ifstream fsrc(filename_source.c_str());
219 rng.gauss_lex_global(src);
226 std::ifstream fref(filename_reference.c_str());
228 vout.
general(vl,
"%s: reference file exists.\n",
test_name.c_str(), filename_reference.c_str());
232 fio->
read_file(&ref, filename_reference);
237 fft->fft(ref, src, FFT::FORWARD);
248 ((NPEx * NPEy == 1) || (NPEx * NPEz == 1) || (NPEy * NPEz == 1))
253 fft->set_parameters(params_fft);
255 err += run_task(fft, src, ref, res1, res2, check_precision, vl);
257 vout.
general(vl,
"FFT_xyz_1dim is not available.\n");
262 (NPEt == 1) && (NPEx == 1) && (NPEy == 1)
267 fft->set_parameters(params_fft);
269 err += run_task(fft, src, ref, res1, res2, check_precision, vl);
271 vout.
general(vl,
"FFT_xyz_3dim is not available.\n");
275 if (NPEx * NPEy * NPEz == 1)
280 fft->set_parameters(params_fft);
282 err += run_task(fft, src, ref, res1, res2, check_precision, vl);
284 vout.
general(vl,
"FFT_3d_local is not available.\n");
289 if (NPEx * NPEy == 1)
294 fft->set_parameters(params_fft);
296 err += run_task(fft, src, ref, res1, res2, check_precision, vl);
298 vout.
general(vl,
"FFT_3d_parallel_1dim is not available.\n");
309 fft->set_parameters(params_fft);
311 err += run_task(fft, src, ref, res1, res2, check_precision, vl);
313 vout.
general(vl,
"FFT_3d_parallel_3dim is not available.\n");
323 fft->set_parameters(params_fft);
325 err += run_task(fft, src, ref, res1, res2, check_precision, vl);
334 vout.
detailed(vl,
"check skipped: expected_result not set.\n\n");
void detailed(const char *format,...)
void set(const int jin, const int site, const int jex, double v)
virtual void read_file(Field *v, const std::string)=0
read data from file. (`const' is added [18 Mar 2021])
void general(const char *format,...)
const std::string test_name
Container of Field-type object.
void reset(pointer p=pointer())
int get_int(const string &key) const
Wilson-type fermion field.
Parameters lookup(const string &key) const
static bool RegisterTest(const std::string &key, const Test_function func)
FieldIO_Binary_Parallel class for file I/O of Field data in binary format using MPI parallel I/O...
double get_double(const string &key) const
std::string generate_filename(const char *fmt,...)
bool is_set(const string &key) const
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
static void read(const std::string ¶ms_file, Parameters ¶ms)
int verify(const double result, const double expected, double eps)
FieldIO_Binary class for file I/O of Field data in binary format.
static int size()
size of small world.
virtual void write_file(Field *v, const std::string)=0
write data to file. (`const' is added [18 Mar 2021])
string get_string(const string &key) const
static VerboseLevel set_verbose_level(const std::string &str)