12 QIO_String *xml_file_in;
16 iflag.serpar = serpar;
17 iflag.volfmt = volfmt;
20 xml_file_in = QIO_string_create();
23 infile = QIO_open_read(xml_file_in, filename, &
layout, NULL, &iflag);
29 printfQuda(
"%s: QIO_open_read done.\n",__func__);
30 printfQuda(
"%s: User file info is \"%s\"\n", __func__, QIO_string_ptr(xml_file_in));
32 QIO_string_destroy(xml_file_in);
36 QIO_Writer *
open_test_output(
const char *filename,
int volfmt,
int serpar,
int ildgstyle){
37 QIO_String *xml_file_out;
38 char xml_write_file[] =
"Dummy user file XML";
40 QIO_Filesystem filesys;
43 oflag.serpar = serpar;
44 oflag.ildgstyle = ildgstyle;
45 oflag.ildgLFN = QIO_string_create();
46 QIO_string_set(oflag.ildgLFN,
"monkey");
47 oflag.mode = QIO_TRUNC;
49 filesys.my_io_node = 0;
50 filesys.master_io_node = 0;
53 xml_file_out = QIO_string_create();
54 QIO_string_set(xml_file_out,xml_write_file);
57 outfile = QIO_open_write(xml_file_out, filename, volfmt, &
layout,
64 printfQuda(
"%s: QIO_open_write done.\n",__func__);
65 printfQuda(
"%s: User file info is \"%s\"\n", __func__, QIO_string_ptr(xml_file_out));
67 QIO_string_destroy(xml_file_out);
74 QIO_RecordInfo *rec_info = QIO_create_record_info(0, NULL, NULL, 0, dummy, dummy, 0, 0, 0, 0);
75 QIO_String *xml_file = QIO_string_create();
76 int status = QIO_read_record_info(infile, rec_info, xml_file);
77 int prec = *QIO_get_precision(rec_info);
78 QIO_destroy_record_info(rec_info);
79 QIO_string_destroy(xml_file);
81 printfQuda(
"%s: QIO_read_record_data returns status %d\n", __func__, status);
82 if (status != QIO_SUCCESS) {
errorQuda(
"get_prec failed\n"); }
90 QIO_String *xml_record_in;
91 QIO_RecordInfo rec_info;
96 size_t rec_size = file_prec*
count*
len;
99 xml_record_in = QIO_string_create();
104 status = QIO_read(infile, &rec_info, xml_record_in, vputM<double,double,len>,
107 status = QIO_read(infile, &rec_info, xml_record_in, vputM<double,float,len>,
112 status = QIO_read(infile, &rec_info, xml_record_in, vputM<float,double,len>,
115 status = QIO_read(infile, &rec_info, xml_record_in, vputM<float,float,len>,
120 printfQuda(
"%s: QIO_read_record_data returns status %d\n", __func__, status);
121 if (status != QIO_SUCCESS)
return 1;
133 int lattice_volume = 1;
134 for (
int d=0;
d<4;
d++) {
142 printfQuda(
"%s layout set for %d nodes\n", __func__, QMP_get_number_of_nodes());
152 layout.volume = lattice_volume;
155 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"); }
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 nColor,
int nSpin,
int Nvec,
int argc,
char *argv[]) {
205 QIO_Reader *infile =
open_test_input(filename, QIO_UNKNOWN, QIO_PARALLEL);
206 if(infile == NULL) {
errorQuda(
"Open file failed\n"); }
209 printfQuda(
"%s: reading %d vector fields\n", __func__, Nvec);
fflush(stdout);
211 if(status) {
errorQuda(
"read_spinor_fields failed %d\n", status); }
214 QIO_close_read(infile);
215 printfQuda(
"%s: Closed file for reading\n",__func__);
222 QIO_String *xml_record_out;
223 char xml_write_field[] =
"Dummy user record XML for SU(N) field";
224 QIO_RecordInfo *rec_info;
229 errorQuda(
"Error, file_prec=%d not supported", file_prec);
233 int *lower =
new int[
count];
234 int *upper =
new int[
count];
241 rec_info = QIO_create_record_info(QIO_FIELD, lower, upper,
count, const_cast<char*>(type),
242 const_cast<char*>(precision),
nColor, nSpin, file_prec*
len,
count);
249 xml_record_out = QIO_string_create();
251 xml_record_out = QIO_string_create();
252 QIO_string_set(xml_record_out,xml_write_field);
255 size_t rec_size = file_prec*
count*
len;
258 status = QIO_write(outfile, rec_info, xml_record_out, vgetM<double,double,len>,
261 status = QIO_write(outfile, rec_info, xml_record_out, vgetM<double,float,len>,
266 status = QIO_write(outfile, rec_info, xml_record_out, vgetM<float,double,len>,
269 status = QIO_write(outfile, rec_info, xml_record_out, vgetM<float,float,len>,
274 printfQuda(
"%s: QIO_write_record_data returns status %d\n", __func__, status);
275 QIO_destroy_record_info(rec_info);
276 QIO_string_destroy(xml_record_out);
278 if (status != QIO_SUCCESS)
return 1;
286 int nSpin,
int nColor,
const char *type)
291 status = write_field<24>(outfile,
count, field_out, file_prec,
cpu_prec, nSpin,
nColor, type);
294 status = write_field<96>(outfile,
count, field_out, file_prec,
cpu_prec, nSpin,
nColor, type);
297 status = write_field<128>(outfile,
count, field_out, file_prec,
cpu_prec, nSpin,
nColor, type);
306 int nColor,
int nSpin,
int Nvec,
int argc,
char *argv[]) {
317 QIO_Writer *outfile =
open_test_output(filename, QIO_SINGLEFILE, QIO_PARALLEL, QIO_ILDGNO);
318 if(outfile == NULL) {
printfQuda(
"Open file failed\n");
exit(0); }
321 printfQuda(
"%s: writing %d vector fields\n", __func__, Nvec);
fflush(stdout);
323 if(status) {
errorQuda(
"write_spinor_fields failed %d\n", status); }
326 QIO_close_write(outfile);
327 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[])
QIO_Writer * open_test_output(const char *filename, int volfmt, int serpar, int ildgstyle)
int node_number(const int x[])
void exit(int) __attribute__((noreturn))
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[])
Main header file for the QUDA library.
int sprintf(char *, const char *,...) __attribute__((__format__(__printf__
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[])
static __inline__ size_t size_t d
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)