int write_real_field_subset(QIO_Writer *outfile, int count, float *field_out[], int lower[], int upper[], int dim, char *myname){ QIO_String *xml_record_out; char xml_write_field[] = "Dummy user record XML for subset of real field"; int status; QIO_RecordInfo *rec_info; /* Create the record info for the field */ rec_info = QIO_create_record_info(QIO_HYPER, lower, upper, dim, "QDP_F_Real", "F", 0, 0, sizeof(float), count); /* Create the record XML for the field */ xml_record_out = QIO_string_create(); QIO_string_set(xml_record_out,xml_write_field); /* Write the record for the field */ status = QIO_write(outfile, rec_info, xml_record_out, vget_R, count*sizeof(float), sizeof(float), field_out); printf("%s(%d): QIO_write returns status %d\n",myname,this_node,status); if(status != QIO_SUCCESS)return 1; QIO_destroy_record_info(rec_info); QIO_string_destroy(xml_record_out); return 0; }
int write_su3_field(QIO_Writer *outfile, int count, suN_matrix *field_out[], char *myname){ QIO_String *xml_record_out; char xml_write_field[] = "Dummy user record XML for su3 field"; int status; QIO_RecordInfo *rec_info; /* Create the record info for the field */ rec_info = QIO_create_record_info(QIO_FIELD, NULL, NULL, 0, "QDP_F3_ColorMatrix", "F", 3, 0, sizeof(suN_matrix), count); /* Create the record XML for the field */ xml_record_out = QIO_string_create(); QIO_string_set(xml_record_out,xml_write_field); /* Write the record for the field */ status = QIO_write(outfile, rec_info, xml_record_out, vget_M, count*sizeof(suN_matrix), sizeof(float), field_out); printf("%s(%d): QIO_write returns status %d\n",myname,this_node,status); if(status != QIO_SUCCESS)return 1; QIO_destroy_record_info(rec_info); QIO_string_destroy(xml_record_out); return 0; }
/* read an array of QDP fields */ int QDP$PC_vread_$ABBR(QDP_Reader *qdpr, QDP_String *md, $QDPPCTYPE *field[], int nv) { int status; TGET; ONE { struct QDP_IO_field qf; QIO_RecordInfo *cmp_info; qf.data = (char *) field; qf.size = QDPIO_size_$ABBR($P, QDP_get_nc(field[0]), QLA_Ns); qf.nc = QDPIO_nc_$ABBR(QDP_get_nc(field[0])); qf.ns = QDPIO_ns_$ABBR(QLA_Ns); qf.word_size = WS; QDP_set_iolat(qdpr->lat); cmp_info = QIO_create_record_info(QIO_FIELD, 0, 0, 0, "$QDPPCTYPE", "$P", qf.nc, qf.ns, qf.size, nv); for(int i=0; i<nv; i++) QDP_prepare_dest( &field[i]->dc ); status = QDP_read_check(qdpr, md, QIO_FIELD, QDP$PC_vput_$ABBR, &qf, nv, cmp_info); QIO_destroy_record_info(cmp_info); SHARE_SET(&status); TBARRIER; } else {
int write_S_from_site(QIO_Writer *outfile, QIO_String *xml_record_out, field_offset src){ int status; QIO_RecordInfo *rec_info; char qdptype[] = "MILC_RandomState"; char prec[] = ""; int datum_size = sizeof(double_prn); int word_size = sizeof(float); int count = 1; /* Create the record info for the field */ rec_info = QIO_create_record_info(QIO_FIELD, 0, 0, 0, qdptype, prec, 0, 0, datum_size, count); /* Write the record for the field */ status = QIO_write(outfile, rec_info, xml_record_out, vget_S_from_site, count*datum_size, word_size, (void *)&src); if(status != QIO_SUCCESS)return 1; QIO_destroy_record_info(rec_info); return 0; }
int write_real_global(QIO_Writer *outfile, int count, float array_out[], char *myname){ QIO_String *xml_record_out; char xml_write_global[] = "Dummy user record XML for global"; int status; QIO_RecordInfo *rec_info; /* Create the record info for the global array */ xml_record_out = QIO_string_create(); QIO_string_set(xml_record_out,xml_write_global); rec_info = QIO_create_record_info(QIO_GLOBAL, NULL, NULL, 0, "QLA_F_Real", "F", 0, 0, sizeof(float), count); /* Write the array to a file */ status = QIO_write(outfile, rec_info, xml_record_out, vget_r, count*sizeof(float), sizeof(float), array_out); printf("%s(%d): QIO_write returns status %d\n",myname,this_node,status); if(status != QIO_SUCCESS)return 1; QIO_destroy_record_info(rec_info); QIO_string_destroy(xml_record_out); return 0; }
typedef QLA_FN_DiracFermion(nc, Ftype); #else typedef Qx(QLA_D,_DiracPropagator) Ptype; typedef Qx(QLA_D,_DiracFermion) Dtype; typedef Qx(QLA_F,_DiracFermion) Ftype; #endif typedef void Putter(char *buf, size_t index, int count, void *arg); QIO_String *record_xml = NULL; QIO_RecordInfo *record_info = NULL; int word_size = 0; int datum_size = 0; Putter *putter = NULL; int prec; Qs(USQCDArgs) data; record_info = QIO_create_record_info(0, NULL, NULL, 0, "", "", 0, 0, 0, 0); record_xml = QIO_string_create(); if (QIO_read_record_info(reader, record_info, record_xml)) return luaL_error(L, "qcd.ddpairs.read() read info error"); prec = *QIO_get_precision(record_info); switch (prec) { case 'F': putter = Qs(float_DD_put); word_size = sizeof (QLA_F_Real); datum_size = sizeof (Ftype); break; case 'D': putter = Qs(double_DD_put); word_size = sizeof (QLA_D_Real); datum_size = sizeof (Dtype); break;