OOFEM 3.0
Loading...
Searching...
No Matches
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 - 2025 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
39#include "sparselinsystemnm.h"
40#include "sparsemtrxtype.h"
41#include "node.h"
42
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
64namespace oofem {
65class SparseMtrx;
66class QCFullsolveddomain;
67
84{
85protected:
89
94
96
98
99 int qcApproach; // 0-full, 1-hn, 2-global homog., 3 local homog.
100 int homogenizationMtrxType; // 1-iso, 2-aniso
103 int generateInterpolationElements; // 0-use oofem input, 1-generate, 2-load from extern file
106 std::string t3dFileName;
107
108 std::vector<bool> activatedElementList;
109 std::vector<bool> activatedNodeList;
110
111 // km TO DO: use this lists for faster loops
112 //std :: vector< std :: unique_ptr< Element > > interpolationElementList;
113 //std :: vector< std :: unique_ptr< Element > > links;
114
115 std::vector<IntArray> interpolationMeshNodes;
117
119
124
125public:
126 QClinearStatic(int i, EngngModel *master = nullptr);
127 virtual ~QClinearStatic();
128
129 void postInitialize() override;
130
131 void solveYourself() override;
132 void solveYourselfAt(TimeStep *tStep) override;
133
134 void initializeFrom(InputRecord &ir) override;
135
136 // identification
137 const char *giveInputRecordName() const override { return _IFT_QClinearStatic_Name; }
138 const char *giveClassName() const override { return "QClinearStatic"; }
139 fMode giveFormulation() override { return TL; }
140
141 virtual void updateNodeTypes(Domain *d);
142 virtual void setQCNodeType(Domain *d);
143
144 virtual void initializeFullSolvedDomain(InputRecord &ir);
145 virtual bool nodeInFullSolvedDomainTest(Node *n);
147
148 virtual void createInterpolationMeshNodes(Domain *d);
149 virtual std::vector<IntArray> generateInterpolationMesh(Domain *d);
150 virtual std::vector<IntArray> loadInterpolationMesh(Domain *d);
151 virtual std::vector<IntArray> transformMeshToParticles(Domain *d, std::vector<FloatArray> &nodeCoords, std::vector<IntArray> &meshNodes);
153
154 virtual DofManager* findNearestParticle(Domain *d, FloatArray coords);
159 virtual int giveQcApproachNumber() {return qcApproach;}
160
161 bool isElementActivated( int elemNum ) override { return activatedElementList[elemNum-1]; }
162 bool isElementActivated( Element *e ) override { return activatedElementList[e->giveNumber()-1]; }
163
164 void setActivatedNodeList( IntArray nodeList, Domain *d);
165 void setActivatedElementList( IntArray elemList);
166
167 UnknownNumberingScheme &giveEquationNumbering() override { return this->qcEquationNumbering; }
168};
169
170
171} // end namespace oofem
172#endif // qclinearstatic_h
EngngModel * master
Master e-model; if defined receiver is in maintained (slave) mode.
Definition engngm.h:274
int giveNumber() const
Definition femcmpnn.h:104
LinearStatic(int i, EngngModel *master=nullptr)
virtual QCFullsolveddomain * giveFullSolvedDomain()
FloatArray FullSolvedDomainNodes
virtual double computeTotalVolumeOfInterpolationMesh(Domain *d)
QClinearStatic(int i, EngngModel *master=nullptr)
virtual void updateNodeTypes(Domain *d)
void solveYourselfAt(TimeStep *tStep) override
std::vector< bool > activatedElementList
void initializeFrom(InputRecord &ir) override
UnknownNumberingScheme & giveEquationNumbering() override
SparseLinearSystemNM * nMethod
Numerical method used to solve the problem.
virtual std::vector< IntArray > transformMeshToParticles(Domain *d, std::vector< FloatArray > &nodeCoords, std::vector< IntArray > &meshNodes)
const char * giveClassName() const override
Returns class name of the receiver.
virtual std::vector< IntArray > loadInterpolationMesh(Domain *d)
QuasicontinuumNumberingscheme qcEquationNumbering
fMode giveFormulation() override
virtual bool nodeInFullSolvedDomainTest(Node *n)
void solveYourself() override
LinSystSolverType solverType
FloatArray FullSolvedDomainRadius
SparseMtrxType sparseMtrxType
bool isElementActivated(Element *e) override
virtual int giveQcApproachNumber()
virtual void setQCNodeType(Domain *d)
std::vector< bool > activatedNodeList
void setActivatedElementList(IntArray elemList)
FloatArray FullSolvedDomainElements
QCFullsolveddomain Fullsolveddomain
void setActivatedNodeList(IntArray nodeList, Domain *d)
void postInitialize() override
virtual void initializeFullSolvedDomain(InputRecord &ir)
virtual void setRepNodesInVerticesOfInterpolationMesh(Domain *d)
virtual std::vector< IntArray > generateInterpolationMesh(Domain *d)
virtual DofManager * findNearestParticle(Domain *d, FloatArray coords)
std::vector< IntArray > interpolationMeshNodes
virtual void createInterpolationMeshNodes(Domain *d)
bool isElementActivated(int elemNum) override
SparseMtrx * stiffnessMatrix
FloatArray displacementVector
const char * giveInputRecordName() const override
fMode
Definition fmode.h:42
@ TL
Total Lagrange.
Definition fmode.h:44
#define _IFT_QClinearStatic_Name

This page is part of the OOFEM-3.0 documentation. Copyright Copyright (C) 1994-2025 Borek Patzak Bořek Patzák
Project e-mail: oofem@fsv.cvut.cz
Generated at for OOFEM by doxygen 1.15.0 written by Dimitri van Heesch, © 1997-2011