IFEM 90A354
MultiStepSIM.h
Go to the documentation of this file.
1// $Id$
2//==============================================================================
12//==============================================================================
13
14#ifndef _MULTI_STEP_SIM_H
15#define _MULTI_STEP_SIM_H
16
17#include "SIMsolution.h"
18#include "SIMadmin.h"
19#include "SIMenums.h"
20
21class SIMoutput;
22class SIMbase;
23class TimeStep;
24struct TimeDomain;
25
26
31class MultiStepSIM : public SIMsolution, public SIMadmin
32{
33protected:
35 enum NormOp { MAX, ALL };
36
39 explicit MultiStepSIM(SIMbase& sim);
40
41public:
44 virtual void printProblem(bool stopInputTimer = false) const;
45
47 virtual const char** getPrioritizedTags() const;
48
49 using SIMadmin::parse;
52 virtual bool parse(const tinyxml2::XMLElement* elem);
53
55 virtual void initPrm();
56
60 virtual void initSol(size_t nSol = 1, size_t nDof = 0);
61
65 bool initEqSystem(bool withRF = true, size_t nScl = 0);
66
70 virtual bool advanceStep(TimeStep& param, bool updateTime = true);
71
77 SIM::SolutionMode = SIM::STATIC,
78 double zero_tolerance = 1.0e-8,
79 std::streamsize outPrec = 0) = 0;
80
81protected:
84 void printStep(const TimeStep& param) const;
85
89 virtual bool solutionNorms(const TimeDomain&, double zero_tolerance = 1.0e-8,
90 std::streamsize outPrec = 0);
91
93 int getLastSavedStep() const { return lastSt; }
94
95public:
99 virtual bool preprocess(const std::vector<int>& ignored, bool fixDup);
100
102 void setStartGeo(int gID);
103
106 bool saveModel(const char* fileName);
109 bool saveModel(double initialTime = 0.0);
114 bool saveModel(int& gBlock, int& rBlock, double time = 0.0);
115
120 bool saveStep(int iStep, double time, const char* vecName = nullptr);
126 bool saveStep(int iStep, int& rBlock, double time,
127 const char* vecName = nullptr);
132 bool saveStep(int iStep, int& rBlock, const char* vecName);
133
136 virtual bool serialize(SerializeMap& data) const;
139 virtual bool deSerialize(const SerializeMap& data);
141 bool checkForRestart();
142
148 void dumpStep(int iStep, double time, utl::LogStream& os,
149 bool withID = true) const;
150
156 virtual void dumpResults(double time, utl::LogStream& os,
157 std::streamsize precision = 3,
158 bool formatted = true) const;
159
161 bool hasPointResultFile() const;
165 bool savePoints(double time, int step) const;
166
168 virtual bool isLinear() const { return true; }
170 virtual bool isDynamic() const { return false; }
171
173 const SIMoutput& getModel() const { return model; }
174
176 enum SubIt { ITER = 0, FIRST = 1, LAST = 2, NONE = 3 };
177
179 void setSubIteration(SubIt flag) { subiter = flag; }
181 SubIt getSubIteration() const { return subiter; }
182
184 virtual size_t numSolution() const { return solution.size(); }
190 virtual const Vector& realSolution(int i = 0) const { return solution[i]; }
196 virtual const Vectors& realSolutions(bool = false) { return solution; }
197
199 double* theRefNorm() { return &refNorm; }
201 const double* getRefNorm() const { return &refNorm; }
202
203protected:
208
210 double refNorm;
211 double rCond;
213 size_t nRHSvec;
214 char rotUpd;
215
216 int geoBlk;
217 int nBlock;
218
219private:
220 bool saveBCs;
221 int lastSt;
222};
223
224#endif
std::vector< Vector > Vectors
An array of real-valued vectors with algebraic operations.
Definition MatVec.h:37
Administration base class for FEM simulators.
Various enums for simulation scope.
General solution vector container for simulator drivers.
Base class for multi-step solution drivers.
Definition MultiStepSIM.h:32
int lastSt
The last time/load step that was saved to VTF.
Definition MultiStepSIM.h:221
void setSubIteration(SubIt flag)
Updates the sub-iteration flag.
Definition MultiStepSIM.h:179
virtual const Vectors & realSolutions(bool=false)
Returns a const reference to the current real solution vectors.
Definition MultiStepSIM.h:196
Vector loadVec
System load vector (for output to VTF)
Definition MultiStepSIM.h:205
double refNorm
Reference norm value used in convergence checks.
Definition MultiStepSIM.h:210
SubIt subiter
Sub-iteration flag.
Definition MultiStepSIM.h:212
virtual const Vector & realSolution(int i=0) const
Returns a const reference to the current real solution vector.
Definition MultiStepSIM.h:190
void dumpStep(int iStep, double time, utl::LogStream &os, bool withID=true) const
Dumps the primary solution for inspection.
Definition MultiStepSIM.C:235
NormOp
Enum describing reference norm options.
Definition MultiStepSIM.h:35
virtual bool deSerialize(const SerializeMap &data)
Restores the solution vectors from a serialized state.
Definition MultiStepSIM.C:225
bool saveModel(const char *fileName)
Opens a new VTF-file and writes the model geometry to it.
Definition MultiStepSIM.C:109
SubIt
Enum describing sub-iteration status.
Definition MultiStepSIM.h:176
int getLastSavedStep() const
Returns the last step that was saved to VTF.
Definition MultiStepSIM.h:93
bool saveStep(int iStep, double time, const char *vecName=nullptr)
Saves the converged solution to VTF file of a given time/load step.
Definition MultiStepSIM.C:139
virtual void dumpResults(double time, utl::LogStream &os, std::streamsize precision=3, bool formatted=true) const
Dumps solution variables at user-defined points.
Definition MultiStepSIM.C:249
virtual bool preprocess(const std::vector< int > &ignored, bool fixDup)
Performs some pre-processing tasks on the FE model.
Definition MultiStepSIM.C:71
const SIMoutput & getModel() const
Returns a const reference to the FE model.
Definition MultiStepSIM.h:173
size_t nRHSvec
Number of right-hand-side vectors to assemble.
Definition MultiStepSIM.h:213
const double * getRefNorm() const
Returns a const pointer to the reference norm variable.
Definition MultiStepSIM.h:201
bool initEqSystem(bool withRF=true, size_t nScl=0)
Allocates the FE system matrices.
Definition MultiStepSIM.C:97
bool saveBCs
If true, Dirchlet boundary conditions are saved to VTF.
Definition MultiStepSIM.h:220
virtual size_t numSolution() const
Returns the number of solution vectors.
Definition MultiStepSIM.h:184
virtual bool isDynamic() const
Returns whether this is a dynamic solution driver or not.
Definition MultiStepSIM.h:170
char rotUpd
Option for how to update of nodal rotations.
Definition MultiStepSIM.h:214
virtual void initSol(size_t nSol=1, size_t nDof=0)
Initializes the primary solution vectors.
Definition MultiStepSIM.C:83
SIMoutput & model
The isogeometric FE model.
Definition MultiStepSIM.h:204
virtual SIM::ConvStatus solveStep(TimeStep &param, SIM::SolutionMode=SIM::STATIC, double zero_tolerance=1.0e-8, std::streamsize outPrec=0)=0
Solves the FE equations at current time/load step.
bool checkForRestart()
Restores the solution from a serialized state in case of restart.
Definition MultiStepSIM.C:315
virtual const char ** getPrioritizedTags() const
Returns a list of prioritized XML-tags.
Definition MultiStepSIM.C:65
SubIt getSubIteration() const
Returns the sub-iteration flag.
Definition MultiStepSIM.h:181
virtual bool isLinear() const
Returns whether this solution driver is linear or not.
Definition MultiStepSIM.h:168
int geoBlk
Running VTF geometry block counter.
Definition MultiStepSIM.h:216
virtual void initPrm()
Initializes time integration parameters for the integrand.
Definition MultiStepSIM.C:77
virtual bool serialize(SerializeMap &data) const
Serializes the solution vectors for restarting purposes.
Definition MultiStepSIM.C:217
Vector residual
Residual force vector.
Definition MultiStepSIM.h:206
bool savePoints(double time, int step) const
Saves point-wise solution to file for a given time/load step.
Definition MultiStepSIM.C:265
int nBlock
Running VTF result block counter.
Definition MultiStepSIM.h:217
Vector linsol
Linear solution vector.
Definition MultiStepSIM.h:207
virtual void printProblem(bool stopInputTimer=false) const
Prints out problem-specific data to the log stream.
Definition MultiStepSIM.C:56
NormOp refNopt
Reference norm option.
Definition MultiStepSIM.h:209
virtual bool solutionNorms(const TimeDomain &, double zero_tolerance=1.0e-8, std::streamsize outPrec=0)
Computes and prints some solution norm quantities.
Definition MultiStepSIM.C:300
bool hasPointResultFile() const
Returns whether a points result file has been defined or not.
Definition MultiStepSIM.C:259
void printStep(const TimeStep &param) const
Prints out time/load step identification.
Definition MultiStepSIM.C:274
double * theRefNorm()
Returns a pointer to the reference norm variable.
Definition MultiStepSIM.h:199
virtual bool advanceStep(TimeStep &param, bool updateTime=true)
Advances the time/load step one step forward.
Definition MultiStepSIM.C:290
double rCond
Reciprocal condition number of the linear equation system.
Definition MultiStepSIM.h:211
virtual bool parse(const tinyxml2::XMLElement *elem)
Parses a data section from an XML document.
Definition MultiStepSIM.C:44
void setStartGeo(int gID)
Initializes the geometry block counter.
Definition MultiStepSIM.C:103
Administration base class for FEM simulators.
Definition SIMadmin.h:32
virtual bool parse(char *keyWord, std::istream &is)
Parses a data section from an input stream.
Definition SIMadmin.C:113
Base class for NURBS-based FEM simulators.
Definition SIMbase.h:72
Sub-class with additional functionality for result output.
Definition SIMoutput.h:33
Solution vector container with serialization support.
Definition SIMsolution.h:27
Vectors solution
Stack of solution vectors.
Definition SIMsolution.h:78
std::map< std::string, std::string > SerializeMap
Convenience type.
Definition SIMsolution.h:43
Class for encapsulation of general time stepping parameters.
Definition TimeStep.h:31
Logging stream class.
Definition LogStream.h:26
A vector class with some added algebraic operations.
Definition matrix.h:64
SolutionMode
Enum defining the various solution modes that may occur.
Definition SIMenums.h:31
ConvStatus
Enum defining the various convergence statuses that may occur.
Definition SIMenums.h:50
Struct representing the time domain.
Definition TimeDomain.h:23