OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
qclinearstatic.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 qclinearstatic_h
36 #define qclinearstatic_h
37 
38 #include "../sm/EngineeringModels/linearstatic.h"
39 #include "sparselinsystemnm.h"
40 #include "sparsemtrxtype.h"
41 #include "node.h"
42 
43 #include "../sm/Quasicontinuum/fullsolveddomain.h"
44 #include "../sm/Quasicontinuum/quasicontinuumnumberingscheme.h"
45 
46 #define _IFT_QClinearStatic_Name "qclinearstatic"
47 #define _IFT_QuasiContinuum_approach "qcapproach"
48 #define _IFT_QuasiContinuum_mtrx_type "mtrxt"
49 // generation
50 #define _IFT_QuasiContinuum_generate_Particles "genparticles"
51 #define _IFT_QuasiContinuum_generate_Links "genlinks"
52 #define _IFT_QuasiContinuum_generate_Interpolation_Elements "geninterpelem"
53 
54 #define _IFT_QuasiContinuum_t3d_File_Name "t3dfile"
55 #define _IFT_QuasiContinuum_interp_Mat_Number "intmatnum"
56 
57 #define _IFT_QuasiContinuum_T3D_Interpolation_Mesh_size "imsize"
58 // fullsolveddomain
59 #define _IFT_FullSolvedDomain_nodes "fsd_n"
60 #define _IFT_FullSolvedDomain_elements "fsd_e"
61 #define _IFT_FullSolvedDomain_radius "fsd_r"
62 #define _IFT_FullSolvedDomain_box "fsd_b"
63 
64 namespace oofem {
65 class SparseMtrx;
66 class QCFullsolveddomain;
67 
84 {
85 protected:
89 
94 
96 
97 
98  int initFlag;
99 
100  int qcApproach; // 0-full, 1-hn, 2-global homog., 3 local homog.
101  int homogenizationMtrxType; // 1-iso, 2-aniso
104  int generateInterpolationElements; // 0-use oofem input, 1-generate, 2-load from extern file
107  std::string t3dFileName;
108 
109  std::vector<bool> activatedElementList;
110  std::vector<bool> activatedNodeList;
111 
112  // km TO DO: use this lists for faster loops
113  //std :: vector< std :: unique_ptr< Element > > interpolationElementList;
114  //std :: vector< std :: unique_ptr< Element > > links;
115 
116 
117  std::vector<IntArray> interpolationMeshNodes;
119 
121 
126 
127 public:
128  QClinearStatic(int i, EngngModel * _master = NULL);
129  virtual ~QClinearStatic();
130 
131  virtual void postInitialize();
132 
133 
134  virtual void solveYourself();
135  virtual void solveYourselfAt(TimeStep *tStep);
136 
138 
139  // identification
140  virtual const char *giveInputRecordName() const { return _IFT_QClinearStatic_Name; }
141  virtual const char *giveClassName() const { return "QClinearStatic"; }
142  virtual fMode giveFormulation() { return TL; }
143 
144 
145  virtual void updateNodeTypes(Domain *d);
146  virtual void setQCNodeType(Domain *d);
147 
149  virtual bool nodeInFullSolvedDomainTest(Node *n);
151 
152  virtual void createInterpolationMeshNodes(Domain *d);
153  virtual std::vector<IntArray> generateInterpolationMesh(Domain *d);
154  virtual std::vector<IntArray> loadInterpolationMesh(Domain *d);
155  virtual std::vector<IntArray> transformMeshToParticles(Domain *d, std::vector<FloatArray> &nodeCoords, std::vector<IntArray> &meshNodes);
157 
158  virtual DofManager* findNearestParticle(Domain *d, FloatArray coords);
163  virtual int giveQcApproachNumber() {return qcApproach;}
164 
165  bool isElementActivated( int elemNum ) { return activatedElementList[elemNum-1]; }
166  bool isElementActivated( Element *e ) { return activatedElementList[e->giveNumber()-1]; }
167 
168  void setActivatedNodeList( IntArray nodeList, Domain *d);
169  void setActivatedElementList( IntArray elemList);
170 
171 
173 
174 
175 
176 };
177 
178 
179 } // end namespace oofem
180 #endif // linearstatic_h
LinSystSolverType
The values of this type should be related not to specific solvers, but more to specific packages that...
virtual bool nodeInFullSolvedDomainTest(Node *n)
virtual UnknownNumberingScheme * giveEquationNumbering()
FloatArray displacementVector
QCFullsolveddomain Fullsolveddomain
Class and object Domain.
Definition: domain.h:115
virtual void setRepNodesInVerticesOfInterpolationMesh(Domain *d)
Information about fullsolved domain in CQ simulation.
Base class for all matrices stored in sparse format.
Definition: sparsemtrx.h:60
bool isElementActivated(int elemNum)
Total Lagrange.
Definition: fmode.h:44
virtual void solveYourself()
Starts solution process.
SparseLinearSystemNM * nMethod
Numerical method used to solve the problem.
virtual int giveQcApproachNumber()
void setActivatedNodeList(IntArray nodeList, Domain *d)
This base class is an abstraction for all numerical methods solving sparse linear system of equations...
#define _IFT_QClinearStatic_Name
FloatArray FullSolvedDomainBox
SparseMtrxType sparseMtrxType
Abstract base class for all finite elements.
Definition: element.h:145
Base class for dof managers.
Definition: dofmanager.h:113
bool isElementActivated(Element *e)
Class implementing an array of integers.
Definition: intarray.h:61
virtual fMode giveFormulation()
Indicates type of non linear computation (total or updated formulation).
QClinearStatic(int i, EngngModel *_master=NULL)
virtual void createInterpolationMeshNodes(Domain *d)
virtual void postInitialize()
Performs post-initialization for all the problem contents (which is called after initializeFrom).
QuasicontinuumNumberingscheme * qcEquationNumbering
This class implements linear static engineering problem.
virtual DofManager * findNearestParticle(Domain *d, FloatArray coords)
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description in input reader.
SparseMtrxType
Enumerative type used to identify the sparse matrix type.
void setActivatedElementList(IntArray elemList)
Abstract base class allowing to control the way, how equations are assigned to individual DOFs...
LinSystSolverType solverType
std::vector< bool > activatedElementList
virtual std::vector< IntArray > transformMeshToParticles(Domain *d, std::vector< FloatArray > &nodeCoords, std::vector< IntArray > &meshNodes)
FloatArray FullSolvedDomainNodes
virtual std::vector< IntArray > generateInterpolationMesh(Domain *d)
Class representing vector of real numbers.
Definition: floatarray.h:82
SparseMtrx * stiffnessMatrix
virtual void updateNodeTypes(Domain *d)
virtual void solveYourselfAt(TimeStep *tStep)
Solves problem for given time step.
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
virtual QCFullsolveddomain * giveFullSolvedDomain()
Returns Fullsolved domain to which receiver is associated.
Class representing the general Input Record.
Definition: inputrecord.h:101
std::vector< IntArray > interpolationMeshNodes
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 const char * giveInputRecordName() const
virtual double computeTotalVolumeOfInterpolationMesh(Domain *d)
virtual void setQCNodeType(Domain *d)
Numbering scheme that takes into account only list of selected nodes.
FloatArray FullSolvedDomainElements
Abstract base class representing the "problem" under consideration.
Definition: engngm.h:181
FloatArray FullSolvedDomainRadius
the oofem namespace is to define a context or scope in which all oofem names are defined.
std::vector< bool > activatedNodeList
Class implementing node in finite element mesh.
Definition: node.h:87
virtual std::vector< IntArray > loadInterpolationMesh(Domain *d)
int giveNumber() const
Definition: femcmpnn.h:107
virtual IRResultType initializeFullSolvedDomain(InputRecord *ir)
Class representing solution step.
Definition: timestep.h:80
virtual const char * giveClassName() const
Returns class name of the receiver.

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