IFEM  90A354
NonLinSIM.h
Go to the documentation of this file.
1 // $Id$
2 //==============================================================================
12 //==============================================================================
13 
14 #ifndef _NON_LIN_SIM_H
15 #define _NON_LIN_SIM_H
16 
17 #include "MultiStepSIM.h"
18 
19 
27 class NonLinSIM : public MultiStepSIM
28 {
29 public:
37  enum CNORM { NONE_UPTAN=-1, NONE=0, L2=1, L2SOL=2, ENERGY=3 };
38 
42  explicit NonLinSIM(SIMbase& sim, CNORM n = ENERGY);
44  virtual ~NonLinSIM();
45 
47  void setConvNorm(CNORM n) { if ((iteNorm = n) <= NONE) fromIni = true; }
48 
52  void init(size_t nSol, const RealArray& initVal);
53 
55  virtual void initPrm();
56 
60  virtual bool advanceStep(TimeStep& param, bool updateTime = true);
61 
65  SIM::ConvStatus solve(double zero_tol = 1.0e-8, std::streamsize outPrec = 0);
66 
72  virtual SIM::ConvStatus solveStep(TimeStep& param,
73  SIM::SolutionMode mode = SIM::STATIC,
74  double zero_tolerance = 1.0e-8,
75  std::streamsize outPrec = 0);
76 
80 
82  int getMaxit() const { return maxit; }
83 
85  virtual bool isLinear() const { return iteNorm <= NONE; }
86 
87 protected:
91  void printWorst(utl::LogStream& os, double eps);
92 
96  virtual bool updateConfiguration(TimeStep& param);
98  virtual bool lineSearch(TimeStep& param);
99 
105  virtual bool assembleSystem(const TimeDomain& time, const Vectors& pSol,
106  bool newLHSmatrix = true, bool poorConvg = false);
107 
108 public:
112  virtual bool parse(char* keyWord, std::istream& is);
113 
116  virtual bool parse(const tinyxml2::XMLElement* elem);
117 
118 protected:
119  bool fromIni;
121  double rTol;
122  double aTol;
123  double divgLim;
124  double eta;
125  double alpha;
126  double alphaO;
127  int maxit;
128  int maxIncr;
129  int nupdat;
130  int prnSlow;
131  bool saveExL;
132  bool updNewN;
133 
134  std::map<int,int> slowNodes;
135 
136 public:
137  static const char* inputContext;
138 };
139 
140 #endif
std::vector< Real > RealArray
A real-valued array without algebraic operations.
Definition: ImmersedBoundaries.h:29
std::vector< Vector > Vectors
An array of real-valued vectors with algebraic operations.
Definition: MatVec.h:37
Base class for multi-step solution drivers.
Base class for multi-step solution drivers.
Definition: MultiStepSIM.h:32
virtual bool parse(char *keyWord, std::istream &is)
Parses a data section from an input stream.
Definition: SIMadmin.C:113
Nonlinear quasi-static solution driver for isogeometric FEM simulators.
Definition: NonLinSIM.h:28
int nupdat
Number of iterations with updated tangent.
Definition: NonLinSIM.h:129
virtual ~NonLinSIM()
The destructor prints out the slow-converging nodes, if any.
Definition: NonLinSIM.C:46
virtual SIM::ConvStatus solveStep(TimeStep &param, SIM::SolutionMode mode=SIM::STATIC, double zero_tolerance=1.0e-8, std::streamsize outPrec=0)
Solves the nonlinear equations by Newton-Raphson iterations.
Definition: NonLinSIM.C:208
virtual SIM::ConvStatus checkConvergence(TimeStep &param)
Checks whether the nonlinear iterations have converged or diverged.
Definition: NonLinSIM.C:405
double divgLim
Relative divergence limit.
Definition: NonLinSIM.h:123
virtual bool isLinear() const
Returns whether this solution driver is linear or not.
Definition: NonLinSIM.h:85
int maxIncr
Maximum number of iterations with increasing norm.
Definition: NonLinSIM.h:128
double alpha
Iteration acceleration parameter (for line search)
Definition: NonLinSIM.h:125
double aTol
Absolute convergence tolerance.
Definition: NonLinSIM.h:122
int getMaxit() const
Returns the maximum number of iterations.
Definition: NonLinSIM.h:82
int prnSlow
How many DOFs to print out on slow convergence.
Definition: NonLinSIM.h:130
bool fromIni
If true, always solve from initial configuration.
Definition: NonLinSIM.h:119
void printWorst(utl::LogStream &os, double eps)
Prints out the worst DOFs when slow convergence is detected.
Definition: NonLinSIM.C:487
int maxit
Maximum number of iterations in a load step.
Definition: NonLinSIM.h:127
void init(size_t nSol, const RealArray &initVal)
Initializes the primary solution vectors.
Definition: NonLinSIM.C:180
NonLinSIM(SIMbase &sim, CNORM n=ENERGY)
The constructor initializes default solution parameters.
Definition: NonLinSIM.C:29
double rTol
Relative convergence tolerance.
Definition: NonLinSIM.h:121
void setConvNorm(CNORM n)
Defines which type of iteration norm to use in convergence checks.
Definition: NonLinSIM.h:47
static const char * inputContext
Input file context for solver parameters.
Definition: NonLinSIM.h:137
SIM::ConvStatus solve(double zero_tol=1.0e-8, std::streamsize outPrec=0)
Solves the nonlinear equations by Newton-Raphson iterations.
Definition: NonLinSIM.C:201
CNORM iteNorm
The norm type used to measure the residual.
Definition: NonLinSIM.h:120
double alphaO
Final line search acceleration scaling (for output only)
Definition: NonLinSIM.h:126
SIM::ConvStatus solveIteration(TimeStep &param)
Solves the linearized system of current iteration.
Definition: NonLinSIM.C:299
virtual void initPrm()
Initializes some integration parameters for the integrand.
Definition: NonLinSIM.C:168
CNORM
Enum describing the norm used for convergence checks.
Definition: NonLinSIM.h:37
virtual bool lineSearch(TimeStep &param)
Performs line search to accelerate convergence.
Definition: NonLinSIM.C:339
std::map< int, int > slowNodes
Nodes for which slow convergence is detected.
Definition: NonLinSIM.h:134
virtual bool advanceStep(TimeStep &param, bool updateTime=true)
Advances the load step one step forward.
Definition: NonLinSIM.C:191
bool updNewN
If true, update newly activated nodes before new step.
Definition: NonLinSIM.h:132
virtual bool assembleSystem(const TimeDomain &time, const Vectors &pSol, bool newLHSmatrix=true, bool poorConvg=false)
Administers assembly of the linear equation system.
Definition: NonLinSIM.C:553
bool saveExL
If true, the external load vector will be saved to VTF.
Definition: NonLinSIM.h:131
virtual bool updateConfiguration(TimeStep &param)
Updates configuration variables (solution vector) in an iteration.
Definition: NonLinSIM.C:518
double eta
Line search tolerance.
Definition: NonLinSIM.h:124
Base class for NURBS-based FEM simulators.
Definition: SIMbase.h:72
Class for encapsulation of general time stepping parameters.
Definition: TimeStep.h:31
Logging stream class.
Definition: LogStream.h:26
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