15 iflag.serpar = serpar;
16 iflag.volfmt = volfmt;
19 QIO_String *xml_file_in = QIO_string_create();
22 QIO_Reader *infile = QIO_open_read(xml_file_in, filename, &
layout, NULL, &iflag);
28 printfQuda(
"%s: QIO_open_read done.\n",__func__);
29 printfQuda(
"%s: User file info is \"%s\"\n", __func__, QIO_string_ptr(xml_file_in));
31 QIO_string_destroy(xml_file_in);
35 QIO_Writer *
open_test_output(
const char *filename,
int volfmt,
int serpar,
int ildgstyle)
37 char xml_write_file[] =
"Dummy user file XML";
38 QIO_Filesystem filesys;
41 oflag.serpar = serpar;
42 oflag.ildgstyle = ildgstyle;
43 oflag.ildgLFN = QIO_string_create();
44 QIO_string_set(oflag.ildgLFN,
"monkey");
45 oflag.mode = QIO_TRUNC;
47 filesys.my_io_node = 0;
48 filesys.master_io_node = 0;
51 QIO_String *xml_file_out = QIO_string_create();
52 QIO_string_set(xml_file_out,xml_write_file);
55 QIO_Writer *outfile = QIO_open_write(xml_file_out, filename, volfmt, &
layout, &filesys, &oflag);
56 if (outfile == NULL) {
61 printfQuda(
"%s: QIO_open_write done.\n",__func__);
62 printfQuda(
"%s: User file info is \"%s\"\n", __func__, QIO_string_ptr(xml_file_out));
64 QIO_string_destroy(xml_file_out);
72 QIO_RecordInfo *rec_info = QIO_create_record_info(0, NULL, NULL, 0, dummy, dummy, 0, 0, 0, 0);
73 QIO_String *xml_file = QIO_string_create();
74 int status = QIO_read_record_info(infile, rec_info, xml_file);
75 int prec = *QIO_get_precision(rec_info);
76 QIO_destroy_record_info(rec_info);
77 QIO_string_destroy(xml_file);
79 printfQuda(
"%s: QIO_read_record_data returns status %d\n", __func__, status);
80 if (status != QIO_SUCCESS) {
errorQuda(
"get_prec failed\n"); }
88 QIO_String *xml_record_in;
89 QIO_RecordInfo rec_info;
94 size_t rec_size = file_prec*count*len;
97 xml_record_in = QIO_string_create();
102 status = QIO_read(infile, &rec_info, xml_record_in, vputM<double,double,len>,
105 status = QIO_read(infile, &rec_info, xml_record_in, vputM<double,float,len>,
110 status = QIO_read(infile, &rec_info, xml_record_in, vputM<float,double,len>,
113 status = QIO_read(infile, &rec_info, xml_record_in, vputM<float,float,len>,
118 QIO_string_destroy(xml_record_in);
119 printfQuda(
"%s: QIO_read_record_data returns status %d\n", __func__, status);
120 if (status != QIO_SUCCESS)
return 1;
133 int lattice_volume = 1;
134 for (
int d=0; d<4; d++) {
141 printfQuda(
"%s layout set for %d nodes\n", __func__, QMP_get_number_of_nodes());
151 layout.volume = lattice_volume;
154 layout.number_of_nodes = QMP_get_number_of_nodes();
164 QIO_Reader *infile =
open_test_input(filename, QIO_UNKNOWN, QIO_PARALLEL);
165 if (infile == NULL) {
errorQuda(
"Open file failed\n"); }
168 printfQuda(
"%s: reading su3 field\n",__func__); fflush(stdout);
170 if (status) {
errorQuda(
"read_su3_field failed %d\n", status); }
173 QIO_close_read(infile);
174 printfQuda(
"%s: Closed file for reading\n",__func__);
199 int Nvec,
int argc,
char *argv[])
206 QIO_Reader *infile =
open_test_input(filename, QIO_UNKNOWN, QIO_PARALLEL);
207 if (infile == NULL) {
errorQuda(
"Open file failed\n"); }
210 printfQuda(
"%s: reading %d vector fields\n", __func__, Nvec); fflush(stdout);
211 int status =
read_field(infile, 2*nSpin*nColor, Nvec, V, precision);
212 if (status) {
errorQuda(
"read_spinor_fields failed %d\n", status); }
215 QIO_close_read(infile);
216 printfQuda(
"%s: Closed file for reading\n",__func__);
223 char xml_write_field[] =
"Dummy user record XML for SU(N) field";
228 errorQuda(
"Error, file_prec=%d not supported", file_prec);
234 int lower[nDim] = {0, 0, 0, 0};
237 QIO_RecordInfo *rec_info = QIO_create_record_info(QIO_FIELD, lower, upper, nDim, const_cast<char *>(type),
238 const_cast<char *>(precision), nColor, nSpin, file_prec * len, count);
241 QIO_String *xml_record_out = QIO_string_create();
242 QIO_string_set(xml_record_out,xml_write_field);
245 size_t rec_size = file_prec*count*len;
248 status = QIO_write(outfile, rec_info, xml_record_out, vgetM<double,double,len>,
251 status = QIO_write(outfile, rec_info, xml_record_out, vgetM<double,float,len>,
256 status = QIO_write(outfile, rec_info, xml_record_out, vgetM<float,double,len>,
259 status = QIO_write(outfile, rec_info, xml_record_out, vgetM<float,float,len>,
264 printfQuda(
"%s: QIO_write_record_data returns status %d\n", __func__, status);
265 QIO_destroy_record_info(rec_info);
266 QIO_string_destroy(xml_record_out);
268 if (status != QIO_SUCCESS)
return 1;
275 return write_field<18>(outfile,
count, field_out, file_prec,
cpu_prec, 1, 9, type);
290 QIO_Writer *outfile =
open_test_output(filename, QIO_SINGLEFILE, QIO_PARALLEL, QIO_ILDGNO);
291 if (outfile == NULL) {
errorQuda(
"Open file failed\n"); }
294 printfQuda(
"%s: writing the gauge field\n", __func__); fflush(stdout);
295 int status =
write_su3_field(outfile, 4, gauge, precision, precision, type);
296 if (status) {
errorQuda(
"write_gauge_field failed %d\n", status); }
299 QIO_close_write(outfile);
300 printfQuda(
"%s: Closed file for writing\n", __func__);
307 int nSpin,
int nColor,
const char *type)
312 status = write_field<24>(outfile,
count, field_out, file_prec,
cpu_prec, nSpin,
nColor, type);
315 status = write_field<96>(outfile,
count, field_out, file_prec,
cpu_prec, nSpin,
nColor, type);
318 status = write_field<128>(outfile,
count, field_out, file_prec,
cpu_prec, nSpin,
nColor, type);
327 int Nvec,
int argc,
char *argv[])
336 sprintf(type,
"QUDA_%sNs%dNc%d_ColorSpinorField", (file_prec ==
QUDA_DOUBLE_PRECISION) ?
"D" :
"F", nSpin, nColor);
339 QIO_Writer *outfile =
open_test_output(filename, QIO_SINGLEFILE, QIO_PARALLEL, QIO_ILDGNO);
340 if (outfile == NULL) {
errorQuda(
"Open file failed\n"); }
343 printfQuda(
"%s: writing %d vector fields\n", __func__, Nvec); fflush(stdout);
344 int status =
write_field(outfile, 2*nSpin*nColor, Nvec, V, precision, precision, nSpin, nColor, type);
345 if (status) {
errorQuda(
"write_spinor_fields failed %d\n", status); }
348 QIO_close_write(outfile);
349 printfQuda(
"%s: Closed file for writing\n",__func__);
enum QudaPrecision_s QudaPrecision
void read_gauge_field(const char *filename, void *gauge[], QudaPrecision precision, const int *X, int argc, char *argv[])
int write_su3_field(QIO_Writer *outfile, int count, void *field_out[], QudaPrecision file_prec, QudaPrecision cpu_prec, const char *type)
QIO_Writer * open_test_output(const char *filename, int volfmt, int serpar, int ildgstyle)
int node_number(const int x[])
QIO_Reader * open_test_input(const char *filename, int volfmt, int serpar)
int node_index(const int x[])
int write_field(QIO_Writer *outfile, int count, void *field_out[], QudaPrecision file_prec, QudaPrecision cpu_prec, int nSpin, int nColor, const char *type)
int read_su3_field(QIO_Reader *infile, int count, void *field_in[], QudaPrecision cpu_prec)
void read_spinor_field(const char *filename, void *V[], QudaPrecision precision, const int *X, int nColor, int nSpin, int Nvec, int argc, char *argv[])
void write_gauge_field(const char *filename, void *gauge[], QudaPrecision precision, const int *X, int argc, char *argv[])
Main header file for the QUDA library.
void get_coords(int x[], int node, int index)
void write_spinor_field(const char *filename, void *V[], QudaPrecision precision, const int *X, int nColor, int nSpin, int Nvec, int argc, char *argv[])
__device__ unsigned int count[QUDA_MAX_MULTI_REDUCE]
void set_layout(const int *X)
int read_field(QIO_Reader *infile, int count, void *field_in[], QudaPrecision cpu_prec)
int setup_layout(int len[], int nd, int numnodes)
QudaPrecision get_prec(QIO_Reader *infile)