OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
linearstability.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 linearstability_h
36 #define linearstability_h
37 
38 #include "../sm/EngineeringModels/structengngmodel.h"
39 #include "geneigvalsolvertype.h"
41 #include "sparselinsystemnm.h"
42 #include "sparsemtrx.h"
43 #include "floatmatrix.h"
44 #include "floatarray.h"
45 #include "nummet.h"
46 
48 
49 #define _IFT_LinearStability_Name "linearstability"
50 #define _IFT_LinearStability_nroot "nroot"
51 #define _IFT_LinearStability_rtolv "rtolv"
52 #define _IFT_LinearStability_stype "stype"
53 
54 
55 namespace oofem {
69 {
70 private:
71  std :: unique_ptr< SparseMtrx > stiffnessMatrix;
72  std :: unique_ptr< SparseMtrx > initialStressMatrix;
78  double rtolv;
81  std :: unique_ptr< SparseGeneralEigenValueSystemNM > nMethod;
83  std :: unique_ptr< SparseLinearSystemNM > nMethodLS;
84 
85 public:
86  LinearStability(int i, EngngModel * _master = NULL) : StructuralEngngModel(i, _master),
87  loadVector(), displacementVector(), eigVec(), eigVal()
88  {
89  numberOfSteps = 1;
90  ndomains = 1;
91  }
92  virtual ~LinearStability() { }
93 
94  virtual void solveYourself();
95  virtual void solveYourselfAt(TimeStep *tStep);
96 
97  virtual void doStepOutput(TimeStep *tStep);
98  virtual void printOutputAt(FILE *file, TimeStep *tStep);
99  //virtual void printOutputAt(FILE *file, TimeStep *tStep, const IntArray &nodeSets, const IntArray &elementSets);
100  void terminateLinStatic(TimeStep *tStep);
101  int requiresNewLsh() { return 0; }
102  virtual void updateYourself(TimeStep *tStep);
103 
104  // the intrinsic time of time step defines active eigen value and corresponding vector,
105  // for which values can be requested using
106  // giveUnknownComponent method.
107  // When DisplacementVector is requested, then if time==0 linear elastic solution displacement are returned,
108  // otherwise corresponding eigen vector is considered as displacement vector
109  virtual double giveUnknownComponent(ValueModeType type, TimeStep *tStep, Domain *d, Dof *dof);
111  virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode);
113  virtual TimeStep *giveNextStep();
114 
115  virtual double giveEigenValue(int eigNum) { return eigVal.at(eigNum); }
116  virtual void setActiveVector(int i);
117 
120 
121  // identification
122  virtual const char *giveInputRecordName() const { return _IFT_LinearStability_Name; }
123  virtual const char *giveClassName() const { return "LinearStability"; }
124  virtual fMode giveFormulation() { return TL; }
125 };
126 } // end namespace oofem
127 #endif // linearstability_h
GenEigvalSolverType
Types of general eigenvalue solvers.
Class and object Domain.
Definition: domain.h:115
std::unique_ptr< SparseGeneralEigenValueSystemNM > nMethod
Class representing meta step.
Definition: metastep.h:62
virtual void updateYourself(TimeStep *tStep)
Updates internal state after finishing time step.
virtual void doStepOutput(TimeStep *tStep)
Prints the ouput of the solution step (using virtual this->printOutputAtservice) to the stream detemi...
Total Lagrange.
Definition: fmode.h:44
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
Definition: datastream.h:54
double & at(int i)
Coefficient access function.
Definition: floatarray.h:131
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
Definition: valuemodetype.h:78
This base class is an abstraction for all numerical methods solving sparse linear system of equations...
virtual void setActiveVector(int i)
Only relevant for eigen value analysis. Otherwise does noting.
This base class is an abstraction for numerical algorithm.
Definition: nummet.h:80
virtual fMode giveFormulation()
Indicates type of non linear computation (total or updated formulation).
std::unique_ptr< SparseLinearSystemNM > nMethodLS
Numerical method used to solve the static problem.
virtual NumericalMethod * giveNumericalMethod(MetaStep *mStep)
Returns reference to receiver&#39;s numerical method.
#define _IFT_LinearStability_Name
LinearStability(int i, EngngModel *_master=NULL)
virtual const char * giveClassName() const
Returns class name of the receiver.
This class implements way for examining critical load of structure.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode)
Restores the state of model from output stream.
int numberOfSteps
Total number of time steps.
Definition: engngm.h:209
int ndomains
Number of receiver domains.
Definition: engngm.h:205
GenEigvalSolverType solverType
Numerical method used to solve the problem.
std::unique_ptr< SparseMtrx > stiffnessMatrix
SparseLinearSystemNM * giveNumericalMethodForLinStaticProblem(TimeStep *tStep)
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description in input reader.
virtual double giveUnknownComponent(ValueModeType type, TimeStep *tStep, Domain *d, Dof *dof)
Returns requested unknown.
Class representing vector of real numbers.
Definition: floatarray.h:82
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
virtual TimeStep * giveNextStep()
Returns next time step (next to current step) of receiver.
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
Class representing the general Input Record.
Definition: inputrecord.h:101
fMode
Type representing the type of formulation (total or updated) of non-linear computation.
Definition: fmode.h:42
virtual const char * giveInputRecordName() const
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.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode)
Stores the state of model to output stream.
Abstract base class representing the "problem" under consideration.
Definition: engngm.h:181
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Prints output of receiver to output domain stream, for given time step.
the oofem namespace is to define a context or scope in which all oofem names are defined.
void terminateLinStatic(TimeStep *tStep)
Abstract class Dof represents Degree Of Freedom in finite element mesh.
Definition: dof.h:93
virtual double giveEigenValue(int eigNum)
Only relevant for eigen value analysis. Otherwise returns zero.
virtual void solveYourselfAt(TimeStep *tStep)
Solves problem for given time step.
virtual void solveYourself()
Starts solution process.
Class representing solution step.
Definition: timestep.h:80
std::unique_ptr< SparseMtrx > initialStressMatrix

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