IFEM  90A354
NewmarkSIM.h
Go to the documentation of this file.
1 // $Id$
2 //==============================================================================
12 //==============================================================================
13 
14 #ifndef _NEWMARK_SIM_H
15 #define _NEWMARK_SIM_H
16 
17 #include "MultiStepSIM.h"
18 
19 
24 class NewmarkSIM : public MultiStepSIM
25 {
26 public:
28  explicit NewmarkSIM(SIMbase& sim);
29 
30  using MultiStepSIM::parse;
32  virtual bool parse(const tinyxml2::XMLElement* elem);
33 
36  virtual void printProblem(bool stopInputTimer = false) const;
37 
39  virtual void initPrm();
40 
42  bool initAcc(double zero_tolerance = 1.0e-8, std::streamsize outPrec = 0);
43 
45  virtual bool advanceStep(TimeStep& param, bool updateTime = true);
46 
51  virtual SIM::ConvStatus solveStep(TimeStep& param,
52  SIM::SolutionMode = SIM::STATIC,
53  double zero_tolerance = 1.0e-8,
54  std::streamsize outPrec = 0);
55 
59 
61  int getMaxit() const { return maxit; }
62 
64  virtual bool isDynamic() const { return true; }
65 
66 protected:
70  virtual bool solutionNorms(const TimeDomain&, double zero_tolerance = 1.0e-8,
71  std::streamsize outPrec = 0);
72 
76  virtual bool predictStep(TimeStep& param);
78  virtual bool correctStep(TimeStep& param, bool = false);
80  virtual void finalizeRHSvector(bool);
81 
82 public:
84  const Vector& getVelocity() const { return solution[1]; }
86  const Vector& getAcceleration() const { return solution[2]; }
87 
92  bool saveStep(int iStep, TimeStep& param);
93 
99  virtual void dumpResults(double time, utl::LogStream& os,
100  std::streamsize precision = 3,
101  bool formatted = true) const;
102 
103 protected:
104  // Time integration parameters
105  double alpha1;
106  double alpha2;
107  double beta;
108  double gamma;
109 
110  // Solution algorithm parameters
111  bool solveDisp;
112  char predictor;
113  int maxit;
114  int maxIncr;
115  int nupdat;
116  int saveIts;
117  char saveVelAc;
118  double rTol;
119  double aTol;
120  double divgLim;
121 
122  unsigned short int cNorm;
123 
124  std::string factor_file;
126  bool read_factor;
128 
129 public:
130  static const char* inputContext;
131 };
132 
133 #endif
Base class for multi-step solution drivers.
Base class for multi-step solution drivers.
Definition: MultiStepSIM.h:32
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 bool parse(char *keyWord, std::istream &is)
Parses a data section from an input stream.
Definition: SIMadmin.C:113
Newmark-based solution driver for dynamic isogeometric FEM simulators.
Definition: NewmarkSIM.h:25
bool write_factor
If true, write new factorized Newton matrix.
Definition: NewmarkSIM.h:125
double rTol
Relative convergence tolerance.
Definition: NewmarkSIM.h:118
int maxIncr
Maximum number of iterations with increasing norm.
Definition: NewmarkSIM.h:114
int saveIts
Time step for which iteration result should be saved.
Definition: NewmarkSIM.h:116
NewmarkSIM(SIMbase &sim)
The constructor initializes default solution parameters.
Definition: NewmarkSIM.C:40
bool initAcc(double zero_tolerance=1.0e-8, std::streamsize outPrec=0)
Calculates initial accelerations.
Definition: NewmarkSIM.C:219
LinAlg::StorageFormat fmt
Factorized Newton matrix storage format.
Definition: NewmarkSIM.h:127
unsigned short int cNorm
Option for which convergence norm to use.
Definition: NewmarkSIM.h:122
bool read_factor
If true, read factorized Newton matrix.
Definition: NewmarkSIM.h:126
double aTol
Absolute convergence tolerance.
Definition: NewmarkSIM.h:119
virtual bool solutionNorms(const TimeDomain &, double zero_tolerance=1.0e-8, std::streamsize outPrec=0)
Computes and prints some solution norm quantities.
Definition: NewmarkSIM.C:613
virtual void initPrm()
Initializes time integration parameters for the integrand.
Definition: NewmarkSIM.C:196
virtual SIM::ConvStatus solveStep(TimeStep &param, SIM::SolutionMode=SIM::STATIC, double zero_tolerance=1.0e-8, std::streamsize outPrec=0)
Solves the dynamic equations by a predictor/multi-corrector method.
Definition: NewmarkSIM.C:385
int maxit
Maximum number of iterations in a time step.
Definition: NewmarkSIM.h:113
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 bool predictStep(TimeStep &param)
Calculates predicted velocities and accelerations.
Definition: NewmarkSIM.C:270
virtual SIM::ConvStatus checkConvergence(TimeStep &param)
Checks whether the corrector iterations have converged or diverged.
Definition: NewmarkSIM.C:544
const Vector & getVelocity() const
Returns a const reference to current velocity vector.
Definition: NewmarkSIM.h:84
double alpha1
Mass-proportional damping parameter.
Definition: NewmarkSIM.h:105
virtual bool correctStep(TimeStep &param, bool=false)
Updates configuration variables (solution vector) in an iteration.
Definition: NewmarkSIM.C:356
std::string factor_file
File for storage of factorized Newton matrix.
Definition: NewmarkSIM.h:124
double divgLim
Relative divergence limit.
Definition: NewmarkSIM.h:120
int nupdat
Number of iterations with updated tangent.
Definition: NewmarkSIM.h:115
char saveVelAc
Flag the saving of velocity and acceleration to VTF.
Definition: NewmarkSIM.h:117
virtual void dumpResults(double time, utl::LogStream &os, std::streamsize precision=3, bool formatted=true) const
Dumps solution variables at user-defined points.
Definition: NewmarkSIM.C:679
double alpha2
Stiffness-proportional damping parameter.
Definition: NewmarkSIM.h:106
static const char * inputContext
Input file context for solver parameters.
Definition: NewmarkSIM.h:130
virtual bool advanceStep(TimeStep &param, bool updateTime=true)
Advances the time step one step forward.
Definition: NewmarkSIM.C:210
char predictor
Predictor type flag.
Definition: NewmarkSIM.h:112
double gamma
Newmark time integration parameter.
Definition: NewmarkSIM.h:108
double beta
Newmark time integration parameter.
Definition: NewmarkSIM.h:107
bool solveDisp
If true, use incremental displacements as unknowns.
Definition: NewmarkSIM.h:111
int getMaxit() const
Returns the maximum number of iterations.
Definition: NewmarkSIM.h:61
virtual bool isDynamic() const
Returns whether this is a dynamic solution driver or not.
Definition: NewmarkSIM.h:64
const Vector & getAcceleration() const
Returns a const reference to current velocity vector.
Definition: NewmarkSIM.h:86
virtual void printProblem(bool stopInputTimer=false) const
Prints out problem-specific data to the log stream.
Definition: NewmarkSIM.C:167
SIM::ConvStatus solveIteration(TimeStep &param)
Solves the linearized system of current iteration.
Definition: NewmarkSIM.C:504
virtual bool parse(const tinyxml2::XMLElement *elem)
Parses a data section from an XML document.
Definition: MultiStepSIM.C:44
virtual void finalizeRHSvector(bool)
Finalizes the right-hand-side vector on the system level.
Definition: NewmarkSIM.C:262
Base class for NURBS-based FEM simulators.
Definition: SIMbase.h:72
Vectors solution
Stack of solution vectors.
Definition: SIMsolution.h:78
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
StorageFormat
Enumeration of matrix storage formats.
Definition: LinAlgenums.h:43
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