NLMech  0.1.0
fDModel.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_FDMODEL_H
10 #define MODEL_FDMODEL_H
11 
12 #include <model/model.h>
13 #include <geometry/dampingGeom.h>
14 #include <hpx/config.hpp>
15 #include <vector>
16 
17 // forward declaration of class
18 namespace fe {
19 class MassMatrix;
20 class Mesh;
21 // class Quadrature;
22 } // namespace fe
23 
24 namespace geometry {
25 class Fracture;
26 class InteriorFlags;
27 class Neighbor;
28 class DampingGeom;
29 } // namespace geometry
30 
31 namespace inp {
32 struct ModelDeck;
33 struct RestartDeck;
34 struct OutputDeck;
35 class Input;
36 class Policy;
37 } // namespace inp
38 
39 namespace loading {
40 class InitialCondition;
41 class ULoading;
42 class FLoading;
43 } // namespace loading
44 
45 namespace material {
46 namespace pd {
47 class Material;
48 class BaseMaterial;
49 }
50 } // namespace material
51 
52 namespace data {
53 class DataManager;
54 } // namespace data
55 
56 namespace model {
57 
81 template<class T>
82 class FDModel : public Model {
83 
84 public:
89  explicit FDModel(inp::Input *deck);
90 
91  ~FDModel();
92 
93 
94 private:
99  void run(inp::Input *deck);
100 
105  void restart(inp::Input *deck);
106 
110  void computeForces();
111 
117  std::pair<double, util::Point3> computeForce(const size_t &i);
118 
125  bool is_reaction_force(size_t i, size_t j);
126 
130  void computeDampingForces();
131 
135  void computePostProcFields();
136 
145  void initHObjects();
146 
150  void init();
151 
162  void integrate();
163 
172  void integrateCD();
173 
187  void integrateVerlet();
188 
236  void checkOutputCriteria();
237 
238 
239 
240 
243 private:
246 
249 
252 
255 
257  bool d_stop;
258 
266 
269 
272 
275 
278 
281 
283 };
284 
287 } // namespace model
288 
289 #endif // MODEL_FDMODEL_H
Data manager to collect the global simulation data.
Definition: DataManager.h:58
An abstraction class to process geometry for damping force calculation.
Definition: dampingGeom.h:31
A class to read input file.
Definition: input.h:63
A class to enforce certain policies to reduce memory loads.
Definition: policy.h:45
A class to apply initial condition.
Definition: initialCondition.h:34
A class for finite difference approximation of Peridynamics
Definition: fDModel.h:82
void restart(inp::Input *deck)
Restarts the simulation from previous state.
Definition: fDModel.cpp:103
void computePostProcFields()
Computes postprocessing quantities.
Definition: fDModel.cpp:652
void checkOutputCriteria()
Checks if output frequency is to be modified.
Definition: fDModel.cpp:781
void integrateVerlet()
Perform time integration using velocity-verlet scheme.
Definition: fDModel.cpp:446
inp::AbsorbingCondDeck * d_absorbingCondDeck_p
Absorbing condition deck.
Definition: fDModel.h:254
void computeDampingForces()
Computes damping force in absorbing layers.
Definition: fDModel.cpp:608
bool d_stop
flag to stop the simulation midway
Definition: fDModel.h:257
inp::Input * d_input_p
Pointer to Input object.
Definition: fDModel.h:265
void integrateCD()
Perform time integration using central-difference scheme.
Definition: fDModel.cpp:377
std::pair< double, util::Point3 > computeForce(const size_t &i)
Computes peridynamic force on node.
Definition: fDModel.cpp:544
T * d_material_p
Pointer to Material object.
Definition: fDModel.h:274
inp::Policy * d_policy_p
Pointer to Policy object.
Definition: fDModel.h:268
geometry::DampingGeom * d_dampingGeom_p
Pointer to Material object.
Definition: fDModel.h:277
data::DataManager * d_dataManager_p
Data Manager.
Definition: fDModel.h:280
inp::OutputDeck * d_outputDeck_p
Output deck.
Definition: fDModel.h:251
inp::RestartDeck * d_restartDeck_p
Restart deck.
Definition: fDModel.h:248
bool is_reaction_force(size_t i, size_t j)
Validates if there is a reaction force between node i and node j.
Definition: fDModel.cpp:585
inp::ModelDeck * d_modelDeck_p
Model deck.
Definition: fDModel.h:245
void computeForces()
Computes peridynamic forces.
Definition: fDModel.cpp:528
void run(inp::Input *deck)
Main driver to simulate.
Definition: fDModel.cpp:91
FDModel(inp::Input *deck)
Constructor.
Definition: fDModel.cpp:48
void integrate()
Perform time integration.
Definition: fDModel.cpp:318
loading::InitialCondition * d_initialCondition_p
Pointer to InitialCondition object.
Definition: fDModel.h:271
void init()
Initialize remaining data members.
Definition: fDModel.cpp:192
void initHObjects()
Initialize high level data members.
Definition: fDModel.cpp:134
A base class for different model implementation.
Definition: model.h:37
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
Structure to read and store mesh related input data.
Definition: absborbingCondDeck.h:82
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
Structure to read and store restart related data input.
Definition: restartDeck.h:23