14 #ifndef _SIM_SOLVER_H_
15 #define _SIM_SOLVER_H_
45 virtual bool read(
const char*) {
return true; }
56 IFEM::cout <<
"\n ** HDF5 output is not available for spectral"
57 <<
" discretization. Deactivating...\n"<< std::endl;
84 virtual int solveProblem(
char* infile,
const char* heading =
nullptr)
87 int geoBlk = 0, nBlock = 0;
88 if (!
S1.saveModel(infile,geoBlk,nBlock))
95 if (!
S1.solveStep(dummy))
99 if (!
S1.saveStep(dummy,nBlock))
151 int geoBlk = 0, nBlock = 0;
159 if (!this->
S1.solveStep(
tp))
161 else if (!this->
saveState(geoBlk,nBlock))
176 int saveInterval = 1,
177 int restartInterval = 0)
180 if (restartInterval < 1)
return;
210 virtual bool parse(
char* keyw, std::istream& is) {
return tp.
parse(keyw,is); }
213 virtual bool parse(
const tinyxml2::XMLElement* elem)
215 if (strcasecmp(elem->Value(),
"postprocessing"))
218 const tinyxml2::XMLElement* child = elem->FirstChildElement();
219 for (; child; child = child->NextSiblingElement())
220 if (!strncasecmp(child->Value(),
"savediverg",10))
222 else if (!strncasecmp(child->Value(),
"dumplog",7))
229 bool saveState(
int& geoBlk,
int& nBlock,
bool newMesh =
false,
230 char* infile =
nullptr,
bool saveRes =
true)
232 if (newMesh && !this->
S1.saveModel(infile,geoBlk,nBlock))
236 else if (!this->
S1.saveStep(
tp,nBlock))
247 IFEM::cout <<
" Serializing simulator state for restart (time level "
252 data[
"TimeLevel"] = std::to_string(exportAdm->
getTimeLevel());
262 int restart(
const std::string& restartFile,
int restartStep)
264 if (restartFile.empty())
return 0;
271 if ((restartStep = hdf.
readData(data,restartStep-1)) >= 0)
273 IFEM::cout <<
"\n === Restarting from a serialized state ==="
274 <<
"\n file = "<< restartFile
275 <<
"\n step = "<< restartStep+1;
280 HDF5Restart::SerializeData::const_iterator it = data.find(
"TimeLevel");
281 if (it != data.end())
295 std::cerr <<
" *** SIMSolver: Failed to read restart data."<< std::endl;
Output of restart data to HDF5.
Output of model and results to HDF5 file.
Initialization of the IFEM library.
Administration base class for FEM simulators.
Class for encapsulation of general time stepping parameters.
static const double T1[2]
1-point rule coordinates.
Definition: TriangleQuadrature.C:19
Administer and write data using DataWriters.
Definition: DataExporter.h:38
bool dumpTimeLevel(const TimeStep *tp=nullptr, bool geoUpd=false, bool doLog=false)
Dumps all registered fields using the registered writers.
Definition: DataExporter.C:95
void registerWriter(DataWriter *writer)
Adds the data writer to the list of registered writers.
Definition: DataExporter.h:90
int getTimeLevel() const
Returns current time level of the exporter.
Definition: DataExporter.h:132
bool isPartitioned() const
Returns whether a graph based partition is used.
Definition: DomainDecomposition.h:198
Write and read restart data using a HDF5 file.
Definition: HDF5Restart.h:32
int getTimeLevel() const
Returns current time level.
Definition: HDF5Restart.h:60
bool dumpStep(const TimeStep &tp)
Returns whether or not restart data should be output.
Definition: HDF5Restart.C:40
bool writeData(const SerializeData &data)
Writes restart data to file.
Definition: HDF5Restart.C:50
int readData(SerializeData &data, int level=-1, bool basis=false)
Reads restart data from file.
Definition: HDF5Restart.C:160
std::map< std::string, std::string > SerializeData
Convenience type.
Definition: HDF5Restart.h:34
Write data to a HDF5 file.
Definition: HDF5Writer.h:30
static void registerCallback(ControlCallback &cb)
Registers a fifo instruction callback.
Definition: IFEM.C:189
static bool pollControllerFifo()
Polls the control fifo for instructions.
Definition: IFEM.C:195
static SIMoptions & getOptions()
Returns a reference to the general input options.
Definition: IFEM.h:55
static utl::LogStream cout
Combined standard out for parallel processes.
Definition: IFEM.h:62
Class for administration of MPI processes in IFEM library.
Definition: ProcessAdm.h:33
int getProcId() const
Return process id.
Definition: ProcessAdm.h:66
DomainDecomposition dd
Decomain decomposition.
Definition: ProcessAdm.h:45
Template class for stationary simulator drivers.
Definition: SIMSolver.h:32
virtual ~SIMSolverStat()
The destructor deletes the results data exporter object.
Definition: SIMSolver.h:42
void handleDataOutput(const std::string &hdf5file, const ProcessAdm &modelAdm, int saveInterval=1)
Handles application data output.
Definition: SIMSolver.h:51
virtual int solveProblem(char *infile, const char *heading=nullptr)
Solves the stationary problem.
Definition: SIMSolver.h:84
virtual bool read(const char *)
Nothing to read for this template.
Definition: SIMSolver.h:45
SIMSolverStat(T1 &s1, const char *head=nullptr)
The constructor initializes the reference to the actual solver.
Definition: SIMSolver.h:35
DataExporter * exporter
Administrator for result output to HDF5 file.
Definition: SIMSolver.h:111
T1 & S1
The actual solver.
Definition: SIMSolver.h:109
int startExpLevel
Initial time level for the DataExporter.
Definition: SIMSolver.h:112
void printHeading(const char *heading)
Writes an application-specific heading, if provided.
Definition: SIMSolver.h:69
Template class for transient simulator drivers.
Definition: SIMSolver.h:123
int restart(const std::string &restartFile, int restartStep)
Handles application restarts by reading a serialized solver state.
Definition: SIMSolver.h:262
bool dumpLog
Set to true, to print out dump time levels.
Definition: SIMSolver.h:303
bool advanceStep()
Advances the time step one step forward.
Definition: SIMSolver.h:144
virtual bool read(const char *file)
Reads solver data from the specified input file.
Definition: SIMSolver.h:138
virtual bool deSerialize(const HDF5Restart::SerializeData &data)
Set internal state from a serialized state.
Definition: SIMSolver.h:203
void handleDataOutput(const std::string &hdf5file, const ProcessAdm &modelAdm, int saveInterval=1, int restartInterval=0)
Handles application data output.
Definition: SIMSolver.h:174
TimeStep tp
Time stepping information.
Definition: SIMSolver.h:304
int startRstLevel
Initial time level for the restart output.
Definition: SIMSolver.h:307
virtual bool serialize(HDF5Restart::SerializeData &data)
Serialize internal state for restarting purposes.
Definition: SIMSolver.h:196
const TimeStep & getTimePrm() const
Returns a const reference to the time stepping information.
Definition: SIMSolver.h:141
bool saveState(int &geoBlk, int &nBlock, bool newMesh=false, char *infile=nullptr, bool saveRes=true)
Saves geometry and results to VTF and HDF5 for current time step.
Definition: SIMSolver.h:229
virtual bool parse(const tinyxml2::XMLElement *elem)
Parses a data section from an XML element.
Definition: SIMSolver.h:213
SIMSolver(T1 &s1)
The constructor initializes the reference to the actual solver.
Definition: SIMSolver.h:126
virtual bool parse(char *keyw, std::istream &is)
Parses a data section from an input stream.
Definition: SIMSolver.h:210
virtual ~SIMSolver()
The destructor deletes the restart data handler.
Definition: SIMSolver.h:135
bool saveDivergedSol
If true, save also the diverged solution to VTF.
Definition: SIMSolver.h:300
virtual int solveProblem(char *infile, const char *heading=nullptr)
Solves the problem up to the final time.
Definition: SIMSolver.h:147
HDF5Restart * restartAdm
Administrator for restart output.
Definition: SIMSolver.h:305
ProcessAdm * restartProcAdm
Process admin used for restart output.
Definition: SIMSolver.h:306
Administration base class for FEM simulators.
Definition: SIMadmin.h:32
std::string myHeading
Heading written before reading the input file.
Definition: SIMadmin.h:91
virtual bool read(const char *fileName)
Reads model data from the specified input file *fileName.
Definition: SIMadmin.C:68
ProcessAdm adm
Parallel administrator.
Definition: SIMadmin.h:88
Class for encapsulation of general time stepping parameters.
Definition: TimeStep.h:31
bool serialize(std::map< std::string, std::string > &data) const
Serialize internal state for restarting purposes.
Definition: TimeStep.C:355
bool multiSteps() const
Returns true if the simulation consists of several time steps.
Definition: TimeStep.C:184
bool increment()
Advances the time increments one step further.
Definition: TimeStep.C:223
bool parse(char *keyWord, std::istream &is)
Parses a data section from an input stream.
Definition: TimeStep.C:62
bool deSerialize(const std::map< std::string, std::string > &data)
Set internal state from a serialized state.
Definition: TimeStep.C:371