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
27class NonLinSIM : public MultiStepSIM
28{
29public:
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
87protected:
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
108public:
112 virtual bool parse(char* keyWord, std::istream& is);
113
116 virtual bool parse(const tinyxml2::XMLElement* elem);
117
118protected:
119 bool fromIni;
121 double rTol;
122 double aTol;
123 double divgLim;
124 double eta;
125 double alpha;
126 double alphaO;
127 int maxit;
129 int nupdat;
131 bool saveExL;
132 char updNewN;
133
134 std::map<int,int> slowNodes;
135
136public:
137 static const char* inputContext;
138};
139
140#endif
std::vector< Real > RealArray
A real-valued array without algebraic operations.
Definition ImmersedBoundaries.h:32
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
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:44
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:493
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
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
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
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
SIM::ConvStatus solveIteration(TimeStep &param)
Solves the linearized system of current iteration.
Definition NonLinSIM.C:303
virtual void initPrm()
Initializes some integration parameters for the integrand.
Definition NonLinSIM.C:168
virtual SIM::ConvStatus checkConvergence(TimeStep &param)
Checks whether the nonlinear iterations have converged or diverged.
Definition NonLinSIM.C:409
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
char updNewN
If > 0, update newly activated nodes before new step.
Definition NonLinSIM.h:132
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:343
virtual bool parse(char *keyWord, std::istream &is)
Parses a data section from an input stream.
Definition NonLinSIM.C:66
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
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:559
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:524
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