OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
diidynamic.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 diidynamic_h
36 #define diidynamic_h
37 
38 #include "../sm/EngineeringModels/structengngmodel.h"
39 #include "sparselinsystemnm.h"
40 #include "sparsemtrx.h"
41 #include "timediscretizationtype.h"
42 
44 
45 #define _IFT_DIIDynamic_Name "diidynamic"
46 #define _IFT_DIIDynamic_deltat "deltat"
47 #define _IFT_DIIDynamic_ddtScheme "ddtscheme"
48 #define _IFT_DIIDynamic_gamma "gamma"
49 #define _IFT_DIIDynamic_beta "beta"
50 #define _IFT_DIIDynamic_eta "eta"
51 #define _IFT_DIIDynamic_delta "delta"
52 #define _IFT_DIIDynamic_theta "theta"
53 
54 
55 namespace oofem {
74 {
75 protected:
76  bool initFlag;
77  std :: unique_ptr< SparseMtrx > stiffnessMatrix;
83  double a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11;
84  double gamma, beta, deltaT;
85  double eta, delta;
86  double theta;
87 
90 
93 
95  std :: unique_ptr< SparseLinearSystemNM > nMethod;
96 
97 public:
98  DIIDynamic(int i, EngngModel * _master = NULL);
99  virtual ~DIIDynamic();
100 
101  virtual void solveYourself();
102  virtual void solveYourselfAt(TimeStep *tStep);
103  virtual void updateYourself(TimeStep *tStep);
104  virtual double giveUnknownComponent(ValueModeType type, TimeStep *tStep, Domain *d, Dof *dof);
106  virtual TimeStep *giveNextStep();
108  virtual void initializeYourself(TimeStep *tStep);
109 
110  // identification
111  virtual const char *giveClassName() const { return "DIIDynamic"; }
112  virtual const char *giveInputRecordName() const { return _IFT_DIIDynamic_Name; }
113  virtual fMode giveFormulation() { return TL; }
114 
115  virtual void printDofOutputAt(FILE *stream, Dof *iDof, TimeStep *tStep);
116 
117  void timesMtrx(FloatArray &answer, FloatArray &vec, CharType type, Domain *domain, TimeStep *tStep);
118  void assembleLoadVector(FloatArray &_loadVector, Domain *domain, ValueModeType mode, TimeStep *tStep);
119 
120 
121  void assembleDirichletBcRhsVector (FloatArray& answer, Domain* d, TimeStep *tStep);
122  void determineConstants(TimeStep *tStep);
123  virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode);
125 
127 };
128 } // end namespace oofem
129 #endif // diidynamic_h
LinSystSolverType
The values of this type should be related not to specific solvers, but more to specific packages that...
std::unique_ptr< SparseMtrx > stiffnessMatrix
Definition: diidynamic.h:77
virtual double giveUnknownComponent(ValueModeType type, TimeStep *tStep, Domain *d, Dof *dof)
Returns requested unknown.
Definition: diidynamic.C:140
Class and object Domain.
Definition: domain.h:115
Class representing meta step.
Definition: metastep.h:62
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode)
Restores the state of model from output stream.
Definition: diidynamic.C:655
Total Lagrange.
Definition: fmode.h:44
std::unique_ptr< SparseLinearSystemNM > nMethod
Numerical method used to solve the problem.
Definition: diidynamic.h:95
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
Definition: datastream.h:54
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
Definition: valuemodetype.h:78
virtual const char * giveInputRecordName() const
Definition: diidynamic.h:112
FloatArray displacementVector
Definition: diidynamic.h:79
This base class is an abstraction for numerical algorithm.
Definition: nummet.h:80
FloatArray previousDisplacementVector
Definition: diidynamic.h:80
LinSystSolverType solverType
Definition: diidynamic.h:88
virtual NumericalMethod * giveNumericalMethod(MetaStep *mStep)
Returns reference to receiver&#39;s numerical method.
Definition: diidynamic.C:65
FloatArray previousLoadVector
Definition: diidynamic.h:78
virtual void solveYourself()
Starts solution process.
Definition: diidynamic.C:243
TimeDiscretizationType previousTimeDiscretization
Definition: diidynamic.h:91
void assembleDirichletBcRhsVector(FloatArray &answer, Domain *d, TimeStep *tStep)
Definition: diidynamic.C:491
TimeDiscretizationType giveInitialTimeDiscretization()
Definition: diidynamic.h:126
FloatArray previousAccelerationVector
Definition: diidynamic.h:80
virtual void printDofOutputAt(FILE *stream, Dof *iDof, TimeStep *tStep)
DOF printing routine.
Definition: diidynamic.C:414
virtual TimeStep * giveNextStep()
Returns next time step (next to current step) of receiver.
Definition: diidynamic.C:174
virtual ~DIIDynamic()
Definition: diidynamic.C:61
TimeDiscretizationType
Time discretization used by transient solvers.
FloatArray velocityVector
Definition: diidynamic.h:79
TimeDiscretizationType initialTimeDiscretization
Definition: diidynamic.h:92
SparseMtrxType
Enumerative type used to identify the sparse matrix type.
virtual const char * giveClassName() const
Returns class name of the receiver.
Definition: diidynamic.h:111
SparseMtrxType sparseMtrxType
Definition: diidynamic.h:89
void timesMtrx(FloatArray &answer, FloatArray &vec, CharType type, Domain *domain, TimeStep *tStep)
Definition: diidynamic.C:426
void determineConstants(TimeStep *tStep)
Definition: diidynamic.C:555
virtual void initializeYourself(TimeStep *tStep)
Provides the opportunity to initialize state variables stored in element integration points according...
Definition: diidynamic.C:199
Class representing vector of real numbers.
Definition: floatarray.h:82
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
#define _IFT_DIIDynamic_Name
Definition: diidynamic.h:45
FloatArray previousIncrementOfDisplacement
Definition: diidynamic.h:81
CharType
Definition: chartype.h:87
DIIDynamic(int i, EngngModel *_master=NULL)
Definition: diidynamic.C:51
Class representing the general Input Record.
Definition: inputrecord.h:101
This class implements Direct Implicit Integration of Dynamic problem.
Definition: diidynamic.h:73
fMode
Type representing the type of formulation (total or updated) of non-linear computation.
Definition: fmode.h:42
void assembleLoadVector(FloatArray &_loadVector, Domain *domain, ValueModeType mode, TimeStep *tStep)
Definition: diidynamic.C:479
FloatArray rhs2
Definition: diidynamic.h:78
FloatArray previousVelocityVector
Definition: diidynamic.h:80
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
Definition: contextmode.h:43
This class implements extension of EngngModel for structural models.
FloatArray accelerationVector
Definition: diidynamic.h:79
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description in input reader.
Definition: diidynamic.C:83
FloatArray loadVector
Definition: diidynamic.h:78
Abstract base class representing the "problem" under consideration.
Definition: engngm.h:181
the oofem namespace is to define a context or scope in which all oofem names are defined.
virtual void updateYourself(TimeStep *tStep)
Updates internal state after finishing time step.
Definition: diidynamic.C:401
Abstract class Dof represents Degree Of Freedom in finite element mesh.
Definition: dof.h:93
virtual void solveYourselfAt(TimeStep *tStep)
Solves problem for given time step.
Definition: diidynamic.C:248
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode)
Stores the state of model to output stream.
Definition: diidynamic.C:624
Class representing solution step.
Definition: timestep.h:80
virtual fMode giveFormulation()
Indicates type of non linear computation (total or updated formulation).
Definition: diidynamic.h:113
FloatArray help
Definition: diidynamic.h:82
FloatArray rhs
Definition: diidynamic.h:78

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:28 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011