OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
nlinearstatic.h
Go to the documentation of this file.
1 /*
2  *
3  * ##### ##### ###### ###### ### ###
4  * ## ## ## ## ## ## ## ### ##
5  * ## ## ## ## #### #### ## # ##
6  * ## ## ## ## ## ## ## ##
7  * ## ## ## ## ## ## ## ##
8  * ##### ##### ## ###### ## ##
9  *
10  *
11  * OOFEM : Object Oriented Finite Element Code
12  *
13  * Copyright (C) 1993 - 2013 Borek Patzak
14  *
15  *
16  *
17  * Czech Technical University, Faculty of Civil Engineering,
18  * Department of Structural Mechanics, 166 29 Prague, Czech Republic
19  *
20  * This library is free software; you can redistribute it and/or
21  * modify it under the terms of the GNU Lesser General Public
22  * License as published by the Free Software Foundation; either
23  * version 2.1 of the License, or (at your option) any later version.
24  *
25  * This program is distributed in the hope that it will be useful,
26  * but WITHOUT ANY WARRANTY; without even the implied warranty of
27  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28  * Lesser General Public License for more details.
29  *
30  * You should have received a copy of the GNU Lesser General Public
31  * License along with this library; if not, write to the Free Software
32  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33  */
34 
35 #ifndef nlinearstatic_h
36 #define nlinearstatic_h
37 
38 #include "../sm/EngineeringModels/linearstatic.h"
39 #include "sparsenonlinsystemnm.h"
40 
42 
43 #define _IFT_NonLinearStatic_Name "nonlinearstatic"
44 #define _IFT_NonLinearStatic_controlmode "controlmode"
45 #define _IFT_NonLinearStatic_deltat "deltat"
46 #define _IFT_NonLinearStatic_stiffmode "stiffmode"
47 #define _IFT_NonLinearStatic_refloadmode "refloadmode"
48 #define _IFT_NonLinearStatic_keepll "keepll"
49 #define _IFT_NonLinearStatic_donotfixload "donotfixload"
50 #define _IFT_NonLinearStatic_nonlocstiff "nonlocstiff"
51 #define _IFT_NonLinearStatic_nonlocalext "nonlocalext"
52 #define _IFT_NonLinearStatic_loadBalancingFlag "loadbalancingflag"
53 #define _IFT_NonLinearStatic_forceloadBalancingFlag "forceloadbalancingflag"
54 #define _IFT_NonLinearStatic_updateElasticStiffnessFlag "updateelasticstiffnessflag"
55 
56 
57 namespace oofem {
64 };
69 };
70 
89 {
90 protected:
94 
106 
120  double deltaT;
121 
132 
135 
136 public:
137  NonLinearStatic(int i, EngngModel * _master = NULL);
138  virtual ~NonLinearStatic();
139 
140  virtual void solveYourself();
141  virtual void solveYourselfAt(TimeStep *tStep);
142  virtual void terminate(TimeStep *tStep);
143 
144  virtual void printOutputAt(FILE *file, TimeStep *tStep);
145 
146  virtual void updateComponent(TimeStep *tStep, NumericalCmpn, Domain *d);
147  virtual void updateAttributes(MetaStep *mStep);
148 
149  virtual double giveUnknownComponent(ValueModeType type, TimeStep *tStep, Domain *d, Dof *dof);
151  virtual TimeStep *giveSolutionStepWhenIcApply(bool force = false);
152  virtual TimeStep *giveNextStep();
154 
155  virtual double giveLoadLevel() { return cumulatedLoadLevel + loadLevel; }
156 
157  virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode);
159 
160  virtual void updateDomainLinks();
161 
162  // identification
163  virtual const char *giveClassName() const { return "NonLinearStatic"; }
165  virtual int useNonlocalStiffnessOption() { return this->nonlocalStiffnessFlag; }
167  virtual int giveUnknownDictHashIndx(ValueModeType mode, TimeStep *tStep) { return ( int ) mode; }
169 
170 #ifdef __OOFEG
171  virtual void showSparseMtrxStructure(int type, oofegGraphicContext &gc, TimeStep *tStep);
172 #endif
173 
174  virtual int estimateMaxPackSize(IntArray &commMap, DataStream &buff, int packUnpackType);
175 #ifdef __PARALLEL_MODE
176  virtual LoadBalancer *giveLoadBalancer();
178 
179 #endif
180 
181 protected:
182  virtual void assemble(SparseMtrx &answer, TimeStep *tStep, const MatrixAssembler &ma,
183  const UnknownNumberingScheme &, Domain *domain);
184  void proceedStep(int di, TimeStep *tStep);
185  virtual void updateLoadVectors(TimeStep *tStep);
186  virtual void computeExternalLoadReactionContribution(FloatArray &reactions, TimeStep *tStep, int di);
187  void assembleIncrementalReferenceLoadVectors(FloatArray &_incrementalLoadVector,
188  FloatArray &_incrementalLoadVectorOfPrescribed,
190  Domain *sourceDomain, TimeStep *tStep);
191 
192  virtual void packMigratingData(TimeStep *tStep);
193  virtual void unpackMigratingData(TimeStep *tStep);
194 };
195 } // end namespace oofem
196 #endif // nlinearstatic_h
virtual int useNonlocalStiffnessOption()
Returns nonzero if nonlocal stiffness option activated.
virtual LoadBalancer * giveLoadBalancer()
Returns reference to receiver's load balancer.
virtual TimeStep * giveNextStep()
Returns next time step (next to current step) of receiver.
Class and object Domain.
Definition: domain.h:115
Base class for all matrices stored in sparse format.
Definition: sparsemtrx.h:60
virtual const char * giveClassName() const
Returns class name of the receiver.
enum fMode nonLinFormulation
Type of non linear formulation (total or updated formulation).
Definition: engngm.h:271
Class representing meta step.
Definition: metastep.h:62
virtual void solveYourself()
Starts solution process.
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
Definition: datastream.h:54
The secant stiffness is used and updated only at the beginning of new load step.
Definition: nlinearstatic.h:63
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
Definition: valuemodetype.h:78
The tangent stiffness is used and updated whenever requested.
Definition: nlinearstatic.h:60
virtual void showSparseMtrxStructure(int type, oofegGraphicContext &gc, TimeStep *tStep)
Shows the sparse structure of required matrix, type == 1 stiffness.
NonLinearStatic_controlType controlMode
Characterizes the type of control used.
This base class is an abstraction for numerical algorithm.
Definition: nummet.h:80
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]
NonLinearStatic_stiffnessMode stiffMode
virtual int estimateMaxPackSize(IntArray &commMap, DataStream &buff, int packUnpackType)
Determines the space necessary for send/receive buffer.
virtual NumericalMethod * giveNumericalMethod(MetaStep *mStep)
Returns reference to receiver's numerical method.
Definition: nlinearstatic.C:94
virtual double giveUnknownComponent(ValueModeType type, TimeStep *tStep, Domain *d, Dof *dof)
Returns requested unknown.
virtual void terminate(TimeStep *tStep)
Terminates the solution of time step.
unsigned long NM_Status
Mask defining NumMetod Status; which can be asked after finishing computation by Numerical Method...
Definition: nmstatus.h:44
Class implementing an array of integers.
Definition: intarray.h:61
FloatArray incrementalLoadVector
Incremental load vector which is applied in loading step (as a whole for direct control or proportion...
NonLinearStatic_controlType
Type determining type of loading control. This type determines the solver to be used.
Definition: nlinearstatic.h:66
NonLinearStatic_stiffnessMode
Type determining the stiffness mode.
Definition: nlinearstatic.h:59
virtual void solveYourselfAt(TimeStep *tStep)
Solves problem for given time step.
FloatArray initialLoadVectorOfPrescribed
A load vector which does not scale for prescribed DOFs.
FloatArray incrementalLoadVectorOfPrescribed
Incremental Load Vector for prescribed DOFs.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description in input reader.
SparseNonLinearSystemNM::referenceLoadInputModeType refLoadInputMode
The following parameter allows to specify how the reference load vector is obtained from given totalL...
void assembleIncrementalReferenceLoadVectors(FloatArray &_incrementalLoadVector, FloatArray &_incrementalLoadVectorOfPrescribed, SparseNonLinearSystemNM::referenceLoadInputModeType _refMode, Domain *sourceDomain, TimeStep *tStep)
void proceedStep(int di, TimeStep *tStep)
NumericalCmpn
Type representing numerical component.
Definition: numericalcmpn.h:46
SparseNonLinearSystemNM * nMethod
Numerical method used to solve the problem.
Callback class for assembling specific types of matrices.
virtual void packMigratingData(TimeStep *tStep)
Packs receiver data when rebalancing load.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode)
Stores the state of model to output stream.
Abstract base class allowing to control the way, how equations are assigned to individual DOFs...
InitialGuess
Means to choose methods for finding a good initial guess.
Definition: engngm.h:197
FloatArray totalDisplacement
Definition: nlinearstatic.h:92
virtual fMode giveFormulation()
Indicates type of non linear computation (total or updated formulation).
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Prints output of receiver to output domain stream, for given time step.
referenceLoadInputModeType
The following parameter allows to specify how the reference load vector is obtained from given totalL...
The initial elastic stiffness is used in the whole solution.
Definition: nlinearstatic.h:62
double deltaT
Intrinsic time increment.
Abstract base class representing general load balancer.
Definition: loadbalancer.h:108
Describes the direct control where load or displacement (or both) are controlled. ...
Definition: nlinearstatic.h:68
virtual void updateComponent(TimeStep *tStep, NumericalCmpn, Domain *d)
Updates components mapped to numerical method if necessary during solution process.
Class representing vector of real numbers.
Definition: floatarray.h:82
virtual void updateDomainLinks()
Updates domain links after the domains of receiver have changed.
virtual void computeExternalLoadReactionContribution(FloatArray &reactions, TimeStep *tStep, int di)
Computes the contribution external loading to reaction forces in given domain.
FloatArray incrementOfDisplacement
Definition: nlinearstatic.h:92
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
InitialGuess initialGuessType
The initial guess type to use before starting the nonlinear solver.
NonLinearStatic(int i, EngngModel *_master=NULL)
Definition: nlinearstatic.C:66
virtual double giveLoadLevel()
Returns the current load level.
Class representing the general Input Record.
Definition: inputrecord.h:101
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode)
Restores the state of model from output stream.
fMode
Type representing the type of formulation (total or updated) of non-linear computation.
Definition: fmode.h:42
This class implements linear static engineering problem.
Definition: linearstatic.h:63
virtual int giveUnknownDictHashIndx(ValueModeType mode, TimeStep *tStep)
For load balancing purposes we store all values so hash is computed from mode value only...
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
Definition: contextmode.h:43
virtual void assemble(SparseMtrx &answer, TimeStep *tStep, const MatrixAssembler &ma, const UnknownNumberingScheme &, Domain *domain)
Assembles characteristic matrix of required type into given sparse matrix.
virtual LoadBalancerMonitor * giveLoadBalancerMonitor()
Returns reference to receiver's load balancer monitor.
This class implements nonlinear static engineering problem.
Definition: nlinearstatic.h:88
A generalized norm of displacement and loading vectors is controlled. In current implementation, the CALM solver is used, the reference load vector is FIXED.
Definition: nlinearstatic.h:67
Abstract base class representing the "problem" under consideration.
Definition: engngm.h:181
The secant stiffness is used and updated whenever requested.
Definition: nlinearstatic.h:61
virtual void updateAttributes(MetaStep *mStep)
Update receiver attributes according to step metaStep attributes.
the oofem namespace is to define a context or scope in which all oofem names are defined.
virtual int giveCurrentNumberOfIterations()
Returns number of iterations that was required to reach equilibrium - used for adaptive step length i...
virtual void updateLoadVectors(TimeStep *tStep)
FloatArray initialLoadVector
A load vector already applied, which does not scales.
Definition: nlinearstatic.h:96
Abstract class Dof represents Degree Of Freedom in finite element mesh.
Definition: dof.h:93
virtual TimeStep * giveSolutionStepWhenIcApply(bool force=false)
Returns the solution step when Initial Conditions (IC) apply.
Class representing solution step.
Definition: timestep.h:80
This base class is an abstraction for all numerical methods solving sparse nonlinear system of equati...
Abstract base class representing general load balancer monitor.
Definition: loadbalancer.h:68
virtual void unpackMigratingData(TimeStep *tStep)
Unpacks receiver data when rebalancing load.

This page is part of the OOFEM documentation. Copyright (c) 2011 Borek Patzak
Project e-mail: info@oofem.org
Generated at Tue Jan 2 2018 20:07:30 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011