void save_real_scidac_from_field(char *filename, char *fileinfo, char *recinfo, int volfmt, Real *src, int count) { QIO_Layout layout; QIO_Filesystem fs; QIO_Writer *outfile; QIO_String *filexml; QIO_String *recxml; int status; QIO_verbose(QIO_VERB_OFF); /* Build the layout structure */ build_qio_layout(&layout); /* Define the I/O system */ build_qio_filesystem(&fs); /* Open file for writing */ filexml = QIO_string_create(); QIO_string_set(filexml,fileinfo); outfile = open_scidac_output(filename, volfmt, QIO_SERIAL, QIO_ILDGNO, NULL, &layout, &fs, filexml); if(outfile == NULL)terminate(1); QIO_string_destroy(filexml); /* Write the lattice field */ recxml = QIO_string_create(); QIO_string_set(recxml,recinfo); status = write_F_R_from_field(outfile, recxml, src, count); if(status)terminate(1); QIO_string_destroy(recxml); /* Write information */ if(volfmt == QIO_SINGLEFILE){ node0_printf("Saved real field serially to binary file %s\n", filename); } else if(volfmt == QIO_MULTIFILE){ node0_printf("Saved real field in multifile format to binary file %s\n", filename); } else if(volfmt == QIO_PARTFILE){ node0_printf("Saved real field in partition format to binary file %s\n", filename); } node0_printf("Checksums %x %x\n", QIO_get_writer_last_checksuma(outfile), QIO_get_writer_last_checksumb(outfile)); close_scidac_output(outfile); }
/*Write current record for the accumulated average over random sources */ static int write_vector_current_record(QIO_Writer *outfile, int jrand, int nwrite, Real mass, Real *j_mu){ int status = QIO_SUCCESS; QIO_String *recxml = QIO_string_create(); char recinfo[NRECINFO]; snprintf(recinfo, NRECINFO, "source index %d mass %g", jrand/nwrite, mass); QIO_string_set(recxml, recinfo); if(PRECISION == 1) status = write_F_R_from_field(outfile, recxml, j_mu, NMU); else status = write_D_R_from_field(outfile, recxml, j_mu, NMU); QIO_string_destroy(recxml); node0_printf("Wrote current density for source %d and mass %g\n", jrand, mass); return status; }