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 }
/*-------------------------------------------------------------------------*/ int FTI_WriteSionlibVar(int varID, FTIT_configuration* FTI_Conf, FTIT_execution* FTI_Exec, FTIT_topology* FTI_Topo, FTIT_checkpoint* FTI_Ckpt, FTIT_dataset* FTI_Data) { int sid; memcpy( &sid, FTI_Exec->iCPInfo.fh, sizeof(FTI_SL_FH) ); unsigned long offset = 0; // write datasets into file int i; for (i = 0; i < FTI_Exec->nbVar; i++) { if( FTI_Data[i].id == varID ) { // set file pointer to corresponding block in sionlib file int res = sion_seek(sid, FTI_Topo->splitRank, SION_CURRENT_BLK, offset); // check if successful if (res != SION_SUCCESS) { errno = 0; FTI_Print("SIONlib: Could not set file pointer", FTI_EROR); sion_parclose_mapped_mpi(sid); return FTI_NSCS; } // SIONlib write call res = sion_fwrite(FTI_Data[i].ptr, FTI_Data[i].size, 1, sid); // check if successful if (res < 0) { errno = 0; FTI_Print("SIONlib: Data could not be written", FTI_EROR); res = sion_parclose_mapped_mpi(sid); return FTI_NSCS; } } offset += FTI_Data[i].size; } FTI_Exec->iCPInfo.result = FTI_SCES; return FTI_SCES; }