void seissol::checkpoint::mpio::FaultAsync::writePrepare(int timestepFault) { EPIK_TRACER("CheckPointFault_writePrepare"); SCOREP_USER_REGION("CheckPointFault_writePrepare", SCOREP_USER_REGION_TYPE_FUNCTION); if (numSides() == 0) return; // Write the header writeHeader(timestepFault); // Create copy of the data for (unsigned int i = 0; i < NUM_VARIABLES; i++) memcpy(&m_dataCopy[i*numSides()*numBndGP()], data(i), numSides()*numBndGP()*sizeof(double)); // Save data EPIK_USER_REG(r_write_wavefield, "checkpoint_write_begin_fault"); SCOREP_USER_REGION_DEFINE(r_write_fault); EPIK_USER_START(r_write_wavefield); SCOREP_USER_REGION_BEGIN(r_write_fault, "checkpoint_write_begin_fault", SCOREP_USER_REGION_TYPE_COMMON); checkMPIErr(setDataView(file())); checkMPIErr(MPI_File_write_all_begin(file(), m_dataCopy, numSides() * numBndGP() * NUM_VARIABLES, MPI_DOUBLE)); EPIK_USER_END(r_write_fault); SCOREP_USER_REGION_END(r_write_fault); m_started = true; logInfo(rank()) << "Writing fault check point. Done."; }
bool Shape<T>::isInShape(const Coordinate<T>& p) const { bool ret = false; for(size_t i=0, j=numSides()-1; i<numSides(); j=i++) { const Coordinate<T>& verti = operator[](i); const Coordinate<T>& vertj = operator[](j); if((verti.y()>p.y()) != (vertj.y()>p.y()) && (p.x() < (vertj.x() - verti.x()) * (p.y()-verti.y()) / (vertj.y()-verti.y()) + verti.x())) ret = !ret; } return ret; }
void seissol::checkpoint::h5::Fault::load(int ×tepFault) { if (numSides() == 0) return; logInfo(rank()) << "Loading fault checkpoint"; seissol::checkpoint::CheckPoint::load(); hid_t h5file = open(linkFile()); checkH5Err(h5file); // Attributes hid_t h5attr = H5Aopen(h5file, "timestep_fault", H5P_DEFAULT); checkH5Err(h5attr); checkH5Err(H5Aread(h5attr, H5T_NATIVE_INT, ×tepFault)); checkH5Err(H5Aclose(h5attr)); // Set the memory space (this is the same for all variables) hsize_t count[2] = {numSides(), numBndGP()}; hid_t h5memSpace = H5Screate_simple(2, count, 0L); checkH5Err(h5memSpace); checkH5Err(H5Sselect_all(h5memSpace)); // Offset for the file space hsize_t fStart[2] = {fileOffset(), 0}; // Read the data for (unsigned int i = 0; i < NUM_VARIABLES; i++) { hid_t h5data = H5Dopen(h5file, VAR_NAMES[i], H5P_DEFAULT); checkH5Err(h5data); hid_t h5fSpace = H5Dget_space(h5data); checkH5Err(h5fSpace); // Read the data checkH5Err(H5Sselect_hyperslab(h5fSpace, H5S_SELECT_SET, fStart, 0L, count, 0L)); checkH5Err(H5Dread(h5data, H5T_NATIVE_DOUBLE, h5memSpace, h5fSpace, h5XferList(), data(i))); checkH5Err(H5Sclose(h5fSpace)); checkH5Err(H5Dclose(h5data)); } checkH5Err(H5Sclose(h5memSpace)); checkH5Err(H5Fclose(h5file)); }
void seissol::checkpoint::h5::Fault::write(int timestepFault) { EPIK_TRACER("CheckPointFault_write"); SCOREP_USER_REGION("CheckPointFault_write", SCOREP_USER_REGION_TYPE_FUNCTION); if (numSides() == 0) return; logInfo(rank()) << "Writing fault check point."; // Create array with all pointers EPIK_USER_REG(r_write_fault, "checkpoint_write_fault"); SCOREP_USER_REGION_DEFINE(r_write_fault); EPIK_USER_START(r_write_fault); SCOREP_USER_REGION_BEGIN(r_write_fault, "checkpoint_write_fault", SCOREP_USER_REGION_TYPE_COMMON); // Attributes checkH5Err(H5Awrite(m_h5timestepFault[odd()], H5T_NATIVE_INT, ×tepFault)); // Set memory and file space hsize_t fStart[2] = {fileOffset(), 0}; hsize_t count[2] = {numSides(), numBndGP()}; hid_t h5memSpace = H5Screate_simple(2, count, 0L); checkH5Err(h5memSpace); checkH5Err(H5Sselect_all(h5memSpace)); checkH5Err(H5Sselect_hyperslab(m_h5fSpaceData, H5S_SELECT_SET, fStart, 0L, count, 0L)); for (unsigned int i = 0; i < NUM_VARIABLES; i++) { checkH5Err(H5Dwrite(m_h5data[odd()][i], H5T_NATIVE_DOUBLE, h5memSpace, m_h5fSpaceData, h5XferList(), data(i))); } checkH5Err(H5Sclose(h5memSpace)); EPIK_USER_END(r_write_fault); SCOREP_USER_REGION_END(r_write_fault); // Finalize the checkpoint finalizeCheckpoint(); logInfo(rank()) << "Writing fault check point. Done."; }
void seissol::checkpoint::mpio::FaultAsync::close() { if (numSides() != 0) { // Finalize last checkpoint write(0); // Time does not matter delete [] m_dataCopy; } Fault::close(); }
void seissol::checkpoint::mpio::FaultAsync::write(int timestepFault) { EPIK_TRACER("CheckPointFault_write"); SCOREP_USER_REGION("CheckPointFault_write", SCOREP_USER_REGION_TYPE_FUNCTION); if (numSides() == 0) return; logInfo(rank()) << "Writing fault check point."; if (m_started) checkMPIErr(MPI_File_write_all_end(file(), m_dataCopy, MPI_STATUS_IGNORE)); // Finalize the checkpoint finalizeCheckpoint(); }
void seissol::checkpoint::sionlib::Fault::write(int timestepFault) { #ifdef USE_SIONLIB if (numSides() == 0) return; int globalrank,numFiles; char fname[1023], *newfname=NULL; sion_int32 fsblksize= utils::Env::get<sion_int32>("SEISSOL_CHECKPOINT_BLOCK_SIZE", 0); unsigned long lidentifier; lidentifier = identifier(); m_gComm = comm(); m_lComm = m_gComm; globalrank = rank(); numFiles = 0; setpos(); checkErr(sion_fwrite(&lidentifier, sizeof(unsigned long),1,m_files[odd()])); checkErr(sion_fwrite(×tepFault, sizeof(timestepFault),1,m_files[odd()])); for (int i = 0; i < NUM_VARIABLES; i++){ checkErr(sion_fwrite(data(i),sizeof(real),this->numSides()*this->numBndGP(),m_files[odd()])); } flushCheckpoint(); // finalizeCheckpoint(); #endif }
void seissol::checkpoint::sionlib::Fault::load(int ×tepFault) { #ifdef USE_SIONLIB if (numSides() == 0) return; seissol::checkpoint::CheckPoint::load(); int file; FILE *file_ptr; char fname[1023], *newfname=NULL; int globalrank,numFiles; unsigned long lidentifier; sion_int32 fsblksize= utils::Env::get<sion_int32>("SEISSOL_CHECKPOINT_BLOCK_SIZE", 0); m_gComm = comm(); m_lComm = m_gComm; globalrank = rank(); numFiles = 0; file = sion_paropen_mpi(const_cast<char*>(linkFile().c_str()), "br", &numFiles, m_gComm, &m_lComm, &m_chunksize, &fsblksize, &globalrank, &file_ptr, &newfname); checkErr(file); checkErr(sion_fread(&lidentifier, sizeof(unsigned long),1,file)); checkErr(sion_fread(×tepFault, sizeof(timestepFault),1,file)); for (int i = 0; i < NUM_VARIABLES; i++) checkErr(sion_fread(data(i),sizeof(real),this->numSides()*this->numBndGP(),file)); if (ferror (file_ptr)) logWarning(rank())<<"Error reading fault data SIONlib-checkpoint\n"; checkErr(sion_parclose_mpi(file)); #endif }