#include #include #include using namespace std; CPS_START_NAMESPACE void WriteU1LatticeParallel::write(Lattice & lat, const QioArg & wt_arg) { const char * fname = "write()"; VRB.Func(cname,fname); char loginfo[100]; sprintf(loginfo,"Unload %s",wt_arg.FileName); startLogging(loginfo); #ifdef PROFILE struct timeval start,end; gettimeofday(&start,NULL); #endif sync(); // init int error = 0; io_good = false; // always zero for U1: recon_row_3 = 0; FP_FORMAT dataFormat = wt_arg.FileFpFormat; fpconv.setFileFormat(dataFormat); if(fpconv.fileFormat == FP_UNKNOWN) { ERR.General(cname,fname,"Output Floating Point format UNKNOWN\n"); } // calc Plaq and LinkTrace const int size_matrices(wt_arg.VolNodeSites()*4); Float * lpoint = lat.U1GaugeField(); VRB.Flow(cname,fname, "Writing U1 Gauge Field at Lattice::U1GaugeField() = %p\n", lpoint); Float plaq = lat.SumReU1Plaq()/ 6.0 / (wt_arg.VolSites()) ; //printf("U1 plaq= %e\n", plaq);fflush(stdout); exit(0); Float ltrace(0.0); if(wt_arg.Scoor() == 0) { for(int i=0;i 0) // ERR.FileW(cname,fname,wt_arg.FileName); error=0; // write header if(isRoot()){ hd.init(wt_arg, fpconv.fileFormat, ltrace, plaq); hd.write(output); } if (error) printf("Node %d: says Writing header failed %s failed\n",UniqueID(),wt_arg.FileName); // if(synchronize(error) > 0) // ERR.General(cname,fname,"Writing header failed\n"); log(); { int temp_start = hd.data_start; broadcastInt(&temp_start); hd.data_start = temp_start; } if(parIO()) { ParallelIO pario(wt_arg); if(!pario.store(output, (char*)lpoint, data_per_site, sizeof(Float)*4, hd, fpconv, 4, &csum)) ERR.General(cname, fname, "Unload failed\n"); // printf("Node %d: lattice write csum=%x\n",UniqueID(),csum); if(wt_arg.Scoor() == 0) csum = globalSumUint(csum); else globalSumUint(0); } #if 1 else { SerialIO serio(wt_arg); if(!serio.store(output, (char*)lpoint, data_per_site, sizeof(Float)*4, hd, fpconv, 4, &csum)) ERR.General(cname, fname, "Unload failed\n"); } #endif // output.flush(); log(); // after unloading, fill in checksum if(isRoot()) hd.fillInChecksum(output,csum); if(parIO()) { output.close(); } else { if(isRoot()) output.close(); } if(synchronize(error) != 0) ERR.General(cname, fname, "Writing checksum failed\n"); #ifdef PROFILE gettimeofday(&end,NULL); print_flops(cname,"write",0,&start,&end); #endif io_good = true; log(); finishLogging(); sync(); VRB.FuncEnd(cname,fname); } CPS_END_NAMESPACE