int save_complex_scidac(QIO_Writer *outfile, char *filename, char *recinfo, int volfmt, complex *src, int count) { QIO_String *recxml; int status; recxml = QIO_string_create(); QIO_string_set(recxml, recinfo); status = write_F_C_from_field(outfile, recxml, src, count); QIO_string_destroy(recxml); if(status)return status; /* Write information */ if(volfmt == QIO_SINGLEFILE){ node0_printf("Saved complex field serially to binary file %s\n", filename); } else if(volfmt == QIO_MULTIFILE){ node0_printf("Saved complex field as multifile to binary file %s\n", filename); } else if(volfmt == QIO_PARTFILE){ node0_printf("Saved complex 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)); return status; }
/* Save random number state. (SITERAND case only) */ void save_random_state_scidac_from_site(char *filename, char *fileinfo, char *recinfo, int volfmt, field_offset src) { QIO_Layout layout; QIO_Filesystem fs; QIO_Writer *outfile; QIO_String *filexml; QIO_String *recxml; int status; #ifndef SITERAND node0_printf("save_random_state_scidac_from_site: requires SITERAND. Save skipped\n"); if(1)return; #endif 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_S_from_site(outfile, recxml, src); QIO_string_destroy(recxml); if(status)terminate(1); /* Write information */ if(volfmt == QIO_SINGLEFILE){ node0_printf("Saved random state serially to binary file %s\n", filename); } else if(volfmt == QIO_MULTIFILE){ node0_printf("Saved random state multifile to binary file %s\n", filename); } else if(volfmt == QIO_PARTFILE){ node0_printf("Saved random state 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); }
void save_color_matrix_scidac_from_field(char *filename, char *fileinfo, char *recinfo, int volfmt, su3_matrix *src, int count, int prec) { QIO_Layout layout; QIO_Writer *outfile; QIO_Filesystem fs; QIO_String *filexml; QIO_String *recxml; int status; QIO_verbose(QIO_VERB_OFF); /* Build the layout structure */ build_qio_layout(&layout); /* Build the structure defining the I/O nodes */ 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); if(prec == 1) status = write_F3_M_from_field(outfile, recxml, src, count); else status = write_D3_M_from_field(outfile, recxml, src, count); if(status)terminate(1); QIO_string_destroy(recxml); /* Write information */ if(volfmt == QIO_SINGLEFILE){ node0_printf("Saved KS matrix serially to binary file %s\n", filename); } else if(volfmt == QIO_MULTIFILE){ node0_printf("Saved KS matrix as multifile to binary file %s\n", filename); } else if(volfmt == QIO_PARTFILE){ node0_printf("Saved KS matrix 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); }
REQUIRES QIO #else #include <qio.h> #endif #include "../include/io_scidac.h" #include "../include/io_scidac_ks.h" #include <string.h> /********************************************************************/ /* Generic color vector file (not USQCD) */ /* Write color vectors in SciDAC format, taking data from the site structure */ int save_ks_vector_scidac(QIO_Writer *outfile, char *filename, char *recinfo, int volfmt, su3_vector *src, int count, int prec) { QIO_String *recxml; int status; recxml = QIO_string_create(); QIO_string_set(recxml, recinfo); if(prec == 1) status = write_F3_V_from_field(outfile, recxml, src, count); else status = write_D3_V_from_field(outfile, recxml, src, count); QIO_string_destroy(recxml); if(status != QIO_SUCCESS)return status; /* Write information */ if(volfmt == QIO_SINGLEFILE){ node0_printf("Saved KS vector serially to binary file %s\n", filename); } else if(volfmt == QIO_MULTIFILE){ node0_printf("Saved KS vector as multifile to binary file %s\n", filename); } else if(volfmt == QIO_PARTFILE){ node0_printf("Saved KS vector 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)); return status; }
/* The QIO file is closed after writing the lattice */ gauge_file *save_scidac(char *filename, int volfmt, int serpar, int ildgstyle, char *stringLFN){ QIO_Layout layout; QIO_Filesystem fs; QIO_Writer *outfile; int status; field_offset src = F_OFFSET(link[0]); gauge_file *gf; char *info; QIO_String *filexml; QIO_String *recxml; char default_file_xml[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><title>MILC ILDG archival gauge configuration</title>"; QIO_verbose(QIO_VERB_OFF); /* Build the layout structure */ build_qio_layout(&layout); /* Define the I/O system */ build_qio_filesystem(&fs); /* Make a dummy gauge file structure for MILC use */ gf = setup_output_gauge_file(); /* Set the filename in the gauge_file structure */ gf->filename = filename; /* Open file for writing */ filexml = QIO_string_create(); QIO_string_set(filexml, default_file_xml); outfile = open_scidac_output(filename, volfmt, serpar, ildgstyle, stringLFN, &layout, &fs, filexml); if(outfile == NULL)terminate(1); QIO_string_destroy(filexml); /* Create the QCDML string for this configuration */ info = create_QCDML(); recxml = QIO_string_create(); QIO_string_set(recxml, info); /* Write the lattice field */ status = write_F3_M_from_site(outfile, recxml, src, LATDIM); if(status)terminate(1); /* Discard for now */ QIO_string_destroy(recxml); /* Write information */ if(volfmt == QIO_SINGLEFILE){ node0_printf("Saved gauge configuration serially to binary file %s\n", filename); } else if(volfmt == QIO_MULTIFILE){ node0_printf("Saved gauge configuration as multifile to binary file %s\n", filename); } else if(volfmt == QIO_PARTFILE){ node0_printf("Saved gauge configuration in partition format to binary file %s\n", filename); } node0_printf("Time stamp %s\n",gf->header->time_stamp); node0_printf("Checksums %x %x\n", QIO_get_writer_last_checksuma(outfile), QIO_get_writer_last_checksumb(outfile)); /* Close the file */ QIO_close_write(outfile); free_QCDML(info); return gf; }