NLMech  0.1.0
QuasiStaticModel.h
1 // Copyright (c) 2019 Prashant K. Jha
3 // Copyright (c) 2019 Patrick Diehl
4 //
5 // Distributed under the Boost Software License, Version 1.0. (See accompanying
6 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8 
9 #ifndef MODEL_QSMODEL_H
10 #define MODEL_QSMODEL_H
11 
12 #include <hpx/config.hpp>
13 #include "model/model.h"
14 #include "inp/decks/modelDeck.h"
15 
16 // forward declaration of class
17 namespace fe {
18 class MassMatrix;
19 class Mesh;
20 // class Quadrature;
21 }// namespace fe
22 
23 namespace geometry {
24 class Fracture;
25 class InteriorFlags;
26 class Neighbor;
27 class VolumeCorrection;
28 } // namespace geometry
29 
30 namespace inp {
31 struct ModelDeck;
32 struct RestartDeck;
33 struct OutputDeck;
34 struct SolverDeck;
35 class Input;
36 class Policy;
37 } // namespace inp
38 
39 namespace loading {
40 class InitialCondition;
41 class ULoading;
42 class FLoading;
43 struct BCData;
44 } // namespace loading
45 
46 namespace material {
47 namespace pd {
48 class BaseMaterial;
49 }
50 } // namespace material
51 
52 namespace util {
53 class StateBasedHelperFunctions;
54 } // namespace util
55 
56 namespace data {
57 class DataManager;
58 } // namespace data
59 
60 namespace rw {
61 namespace writer {
62 class Writer;
63 }
64 }
65 
66 namespace model {
67 
91 template<class T>
92 class QuasiStaticModel: public Model {
93 
94 public:
95 
100 
103 
104 private:
105 
109  void initHObjects();
110 
115  void computeForces(bool full=false);
116 
121  void computePertubatedForces(size_t thread);
122 
126 
132  void assembly_jacobian_matrix_part(size_t begin, size_t end, size_t thread);
133 
139 
143  void solver();
144 
150 
162  void removeRow(util::Matrixij &matrix, size_t rowToRemove);
163 
169  void removeCol(util::Matrixij &matrix, size_t colToRemove);
170 
176  void removeRow(util::VectorXi &vector, size_t rowToRemove);
177 
181  size_t d_nnodes;
182 
184  double d_time;
185 
187  std::string d_name;
188 
190  size_t d_osThreads;
191 
194 
196  std::vector<data::DataManager*> d_dataManagers;
197 
200 
203 
206 
209 
212 
213 };
214 
215 }
216 
217 #endif
Data manager to collect the global simulation data.
Definition: DataManager.h:58
A class to read input file.
Definition: input.h:63
A base class providing methods to compute energy density and force.
Definition: baseMaterial.h:26
A base class for different model implementation.
Definition: model.h:37
A class for finite difference approximation of Peridynamics
Definition: QuasiStaticModel.h:92
A interface class writing data.
Definition: writer.h:41
void initHObjects()
Initialize all data members.
Definition: QuasiStaticModel.cpp:77
QuasiStaticModel(inp::Input *deck)
Constructor.
Definition: QuasiStaticModel.cpp:26
inp::ModelDeck * d_modelDeck_p
Model deck.
Definition: QuasiStaticModel.h:199
data::DataManager * d_dataManager_p
Data Manager.
Definition: QuasiStaticModel.h:211
util::VectorXi newton_step(util::VectorXi &res)
Computes the new displacement of Newton step.
Definition: QuasiStaticModel.cpp:457
void computeForces(bool full=false)
Computes the forces of all nodes.
Definition: QuasiStaticModel.cpp:169
std::vector< data::DataManager * > d_dataManagers
Data manager objects for the assembly of the stiffness matrix.
Definition: QuasiStaticModel.h:196
inp::OutputDeck * d_outputDeck_p
Output deck.
Definition: QuasiStaticModel.h:202
void solver()
Starts the simulation and controls the solver.
Definition: QuasiStaticModel.cpp:527
void removeRow(util::Matrixij &matrix, size_t rowToRemove)
Removes the i-th row of a matrix.
Definition: QuasiStaticModel.cpp:294
size_t d_nnodes
Number of nodes.
Definition: QuasiStaticModel.h:181
double d_time
Current simulation time.
Definition: QuasiStaticModel.h:184
void removeCol(util::Matrixij &matrix, size_t colToRemove)
Removes the i-th column of a matrix.
Definition: QuasiStaticModel.cpp:307
inp::Input * d_input_p
Pointer to Input object.
Definition: QuasiStaticModel.h:205
util::Matrixij jacobian
Definition: QuasiStaticModel.h:193
void assembly_jacobian_matrix_part(size_t begin, size_t end, size_t thread)
Assembles the Jacobian matrix.
Definition: QuasiStaticModel.cpp:362
std::string d_name
Name of the model.
Definition: QuasiStaticModel.h:187
size_t d_osThreads
Number of available os threads.
Definition: QuasiStaticModel.h:190
material::pd::BaseMaterial * d_material_p
Pointer to Material object.
Definition: QuasiStaticModel.h:208
void computePertubatedForces(size_t thread)
Computes the forces of all nodes using the perturbed displacement.
Definition: QuasiStaticModel.cpp:242
util::VectorXi computeResidual()
Computes the residual for the Newton step.
Definition: QuasiStaticModel.cpp:597
void assembly_jacobian_matrix()
Assembles the Jacobian matrix.
Definition: QuasiStaticModel.cpp:331
~QuasiStaticModel()
Destructor.
Definition: QuasiStaticModel.cpp:60
Data mamanger to share the global simulation data between the classes.
Definition: DataManager.h:55
Collection of methods and data related to finite element and mesh.
Definition: baseElem.h:15
Collection of methods and data related to geometry.
Definition: DataManager.h:23
Collection of methods and database related to input.
Definition: main.cpp:21
Collection of methods and database related to loading.
Definition: DataManager.h:38
Collection of Peridynamic models.
Definition: fDModel.h:56
Collection of methods and database related to reading and writing.
Definition: QuasiStaticModel.h:60
Collection of methods useful in simulation.
Definition: DataManager.h:50
blaze::DynamicMatrix< double > Matrixij
Blaze: Definition of n x m matrix.
Definition: matrixBlaze.h:19
blaze::DynamicVector< double, blaze::columnVector > VectorXi
Blaze: Definition of vector.
Definition: matrixBlaze.h:17
Structure to read and store model related input data.
Definition: modelDeck.h:23
Structure to read input data for performing simulation output.
Definition: outputDeck.h:24