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 
21 class SIMoutput;
22 class SIMbase;
23 class TimeStep;
24 struct TimeDomain;
25 
26 
31 class MultiStepSIM : public SIMsolution, public SIMadmin
32 {
33 protected:
35  enum NormOp { MAX, ALL };
36 
39  explicit MultiStepSIM(SIMbase& sim);
40 
41 public:
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 
81 protected:
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 
95 public:
99  virtual bool preprocess(const std::vector<int>& ignored, bool fixDup);
100 
102  void setStartGeo(int gID);
103 
106  bool saveModel(const char* fileName);
107 
113  bool saveModel(int& gBlock, int& rBlock, const char* fileName = nullptr,
114  bool clearG = true);
115 
120  bool saveModel(int& gBlock, int& rBlock, double time);
121 
126  bool saveStep(int iStep, double time, const char* vecName = nullptr);
132  bool saveStep(int iStep, int& rBlock, double time,
133  const char* vecName = nullptr);
138  bool saveStep(int iStep, int& rBlock, const char* vecName);
139 
142  virtual bool serialize(SerializeMap& data) const;
145  virtual bool deSerialize(const SerializeMap& data);
147  bool checkForRestart();
148 
154  void dumpStep(int iStep, double time, utl::LogStream& os,
155  bool withID = true) const;
156 
162  virtual void dumpResults(double time, utl::LogStream& os,
163  std::streamsize precision = 3,
164  bool formatted = true) const;
165 
167  bool hasPointResultFile() const;
171  bool savePoints(double time, int step) const;
172 
174  virtual bool isLinear() const { return true; }
176  virtual bool isDynamic() const { return false; }
177 
179  const SIMoutput& getModel() const { return model; }
180 
182  enum SubIt { ITER = 0, FIRST = 1, LAST = 2, NONE = 3 };
183 
185  void setSubIteration(SubIt flag) { subiter = flag; }
187  SubIt getSubIteration() const { return subiter; }
188 
190  virtual size_t numSolution() const { return solution.size(); }
196  virtual const Vector& realSolution(int i = 0) const { return solution[i]; }
202  virtual const Vectors& realSolutions(bool = false) { return solution; }
203 
205  double* theRefNorm() { return &refNorm; }
207  const double* getRefNorm() const { return &refNorm; }
208 
209 protected:
214 
216  double refNorm;
217  double rCond;
219  size_t nRHSvec;
220  char rotUpd;
221 
222  int geoBlk;
223  int nBlock;
224 
225 private:
226  bool saveBCs;
227  int lastSt;
228 };
229 
230 #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:227
const SIMoutput & getModel() const
Returns a const reference to the FE model.
Definition: MultiStepSIM.h:179
void setSubIteration(SubIt flag)
Updates the sub-iteration flag.
Definition: MultiStepSIM.h:185
Vector loadVec
System load vector (for output to VTF)
Definition: MultiStepSIM.h:211
double refNorm
Reference norm value used in convergence checks.
Definition: MultiStepSIM.h:216
SubIt subiter
Sub-iteration flag.
Definition: MultiStepSIM.h:218
double * theRefNorm()
Returns a pointer to the reference norm variable.
Definition: MultiStepSIM.h:205
void dumpStep(int iStep, double time, utl::LogStream &os, bool withID=true) const
Dumps the primary solution for inspection.
Definition: MultiStepSIM.C:239
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:229
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:182
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:143
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:253
virtual bool preprocess(const std::vector< int > &ignored, bool fixDup)
Performs some pre-processing tasks on the FE model.
Definition: MultiStepSIM.C:71
size_t nRHSvec
Number of right-hand-side vectors to assemble.
Definition: MultiStepSIM.h:219
virtual const Vectors & realSolutions(bool=false)
Returns a const reference to the current real solution vectors.
Definition: MultiStepSIM.h:202
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:226
virtual size_t numSolution() const
Returns the number of solution vectors.
Definition: MultiStepSIM.h:190
virtual bool isDynamic() const
Returns whether this is a dynamic solution driver or not.
Definition: MultiStepSIM.h:176
char rotUpd
Option for how to update of nodal rotations.
Definition: MultiStepSIM.h:220
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:210
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:319
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:187
virtual bool isLinear() const
Returns whether this solution driver is linear or not.
Definition: MultiStepSIM.h:174
int geoBlk
Running VTF geometry block counter.
Definition: MultiStepSIM.h:222
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:221
Vector residual
Residual force vector.
Definition: MultiStepSIM.h:212
bool savePoints(double time, int step) const
Saves point-wise solution to file for a given time/load step.
Definition: MultiStepSIM.C:269
int nBlock
Running VTF result block counter.
Definition: MultiStepSIM.h:223
Vector linsol
Linear solution vector.
Definition: MultiStepSIM.h:213
virtual const Vector & realSolution(int i=0) const
Returns a const reference to the current real solution vector.
Definition: MultiStepSIM.h:196
MultiStepSIM(SIMbase &sim)
The constructor initializes the FE model reference.
Definition: MultiStepSIM.C:23
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:215
const double * getRefNorm() const
Returns a const pointer to the reference norm variable.
Definition: MultiStepSIM.h:207
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:304
bool hasPointResultFile() const
Returns whether a points result file has been defined or not.
Definition: MultiStepSIM.C:263
void printStep(const TimeStep &param) const
Prints out time/load step identification.
Definition: MultiStepSIM.C:278
virtual bool advanceStep(TimeStep &param, bool updateTime=true)
Advances the time/load step one step forward.
Definition: MultiStepSIM.C:294
virtual bool parse(char *keyWord, std::istream &is)
Parses a data section from an input stream.
Definition: SIMadmin.C:113
double rCond
Reciprocal condition number of the linear equation system.
Definition: MultiStepSIM.h:217
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