www.cemf.ir
particles.hpp
Go to the documentation of this file.
1 /*------------------------------- phasicFlow
2 --------------------------------- O C enter of O O E
3 ngineering and O O M ultiscale modeling of OOOOOOO F luid
4 flow
5 ------------------------------------------------------------------------------
6  Copyright (C): www.cemf.ir
7  email: hamid.r.norouzi AT gmail.com
8 ------------------------------------------------------------------------------
9 Licence:
10  This file is part of phasicFlow code. It is a free software for
11 simulating granular and multiphase flows. You can redistribute it
12 and/or modify it under the terms of GNU General Public License v3 or
13 any other later versions.
14 
15  phasicFlow is distributed to help others in their research in the
16 field of granular and multiphase flows, but WITHOUT ANY WARRANTY;
17 without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
18 PARTICULAR PURPOSE.
19 
20 -----------------------------------------------------------------------------*/
21 
22 #ifndef __particles_hpp__
23 #define __particles_hpp__
24 
25 #include "demComponent.hpp"
27 #include "particleIdHandler.hpp"
28 #include "shape.hpp"
29 
30 namespace pFlow
31 {
32 
33 class particles
34  : public observer
35  , public demComponent
36 {
37 private:
38 
41 
44 
47 
50 
53 
56 
58 
60  static inline const message defaultMessage_{ message::DEFAULT };
61 
62 protected:
63 
64  void zeroForce()
65  {
67  }
68 
69  void zeroTorque()
70  {
72  }
73 
74  inline auto& dynPointStruct()
75  {
76  return dynPointStruct_;
77  }
78 
79  inline auto& pointPosition()
80  {
82  }
83 
84  inline auto& idHandler()
85  {
86  return idHandler_();
87  }
88 
89  inline auto& shapeIndex()
90  {
91  return shapeIndex_;
92  }
93 
94 public:
95 
96  // type info
97  TypeInfo("particles");
98 
99  explicit particles(systemControl& control);
100 
101  inline const auto& dynPointStruct() const
102  {
103  return dynPointStruct_;
104  }
105 
106  inline const pointStructure& pStruct() const
107  {
108  return dynPointStruct_;
109  }
110 
111  inline const auto& simDomain() const
112  {
113  return dynPointStruct_.simDomain();
114  }
115 
116  inline const auto& thisDomain() const
117  {
118  return dynPointStruct_.thisDomain();
119  }
120 
121  inline const auto& extendedDomain() const
122  {
124  }
125 
126  inline auto size() const
127  {
128  return dynPointStruct_.size();
129  }
130 
131  inline auto capacity() const
132  {
133  return dynPointStruct_.capacity();
134  }
135 
136  inline auto numActive() const
137  {
138  return dynPointStruct_.numActive();
139  }
140 
141  inline bool isAllActive() const
142  {
143  return dynPointStruct_.isAllActive();
144  }
145 
146  inline const auto& pointPosition() const
147  {
149  }
150 
151  inline const auto& velocity() const
152  {
153  return dynPointStruct_.velocity();
154  }
155 
156  inline const auto& accelertion() const
157  {
158  return accelertion_;
159  }
160 
161  inline auto& accelertion()
162  {
163  return accelertion_;
164  }
165 
166  inline auto& contactForce()
167  {
168  return contactForce_;
169  }
170 
171  inline const auto& contactForce() const
172  {
173  return contactForce_;
174  }
175 
176  inline auto& contactTorque()
177  {
178  return contactTorque_;
179  }
180 
181  inline const auto& contactTorque() const
182  {
183  return contactTorque_;
184  }
185 
186  inline
187  uint maxId()const
188  {
189  return idHandler_().maxId();
190  }
191 
192  bool beforeIteration() override;
193 
194  bool iterate() override;
195 
196  bool afterIteration() override;
197 
198  virtual bool insertParticles(
199  const realx3Vector& position,
200  const wordVector& shapesNames,
201  const anyList& setVarList
202  ) = 0;
203 
204  virtual const uint32PointField_D& propertyId() const = 0;
205 
206  virtual const realPointField_D& diameter() const = 0;
207 
208  virtual const realPointField_D& mass() const = 0;
209 
210  virtual realx3PointField_D& rAcceleration() = 0;
211 
212  virtual const realx3PointField_D& rAcceleration() const = 0;
213 
214  virtual const realPointField_D& boundingSphere() const = 0;
215 
216  virtual word shapeTypeName() const = 0;
217 
218  virtual const shape& getShapes() const = 0;
219 
220  virtual void boundingSphereMinMax(real& minDiam, real& maxDiam) const = 0;
221 
222 }; // particles
223 
224 } // namespace pFlow
225 
226 #endif //__particles_hpp__
pFlow::internalPoints::isAllActive
bool isAllActive() const
Definition: internalPoints.hpp:195
pFlow::observer
Definition: observer.hpp:33
pFlow::particles::beforeIteration
bool beforeIteration() override
This is called in time loop, before iterate.
Definition: particles.cpp:86
pFlow::particles::iterate
bool iterate() override
This is called in time loop.
Definition: particles.cpp:104
pFlow::dynamicPointStructure::velocity
const realx3PointField_D & velocity() const
Definition: dynamicPointStructure.hpp:74
pFlow::particles::velocity
const auto & velocity() const
Definition: particles.hpp:151
pFlow::particles::zeroTorque
void zeroTorque()
Definition: particles.hpp:69
pFlow::particles::accelertion
const auto & accelertion() const
Definition: particles.hpp:156
pFlow::message
Definition: message.hpp:33
pFlow::real
float real
Definition: builtinTypes.hpp:45
pFlow::particles::pointPosition
const auto & pointPosition() const
Definition: particles.hpp:146
pFlow::particles::contactForce
const auto & contactForce() const
Definition: particles.hpp:171
pFlow::demComponent::control
const auto & control() const
Const ref to systemControl.
Definition: demComponent.hpp:88
shape.hpp
pFlow::particles::dynPointStruct
const auto & dynPointStruct() const
Definition: particles.hpp:101
pFlow::pointStructure::thisDomain
const auto & thisDomain() const
Definition: pointStructure.hpp:155
pFlow::particles::contactForce
auto & contactForce()
Definition: particles.hpp:166
pFlow::particles::rAcceleration
virtual realx3PointField_D & rAcceleration()=0
pFlow::particles::shapeTypeName
virtual word shapeTypeName() const =0
pFlow::internalPoints::pointPosition
const PointsType & pointPosition() const
Definition: internalPoints.cpp:209
pFlow::word
std::string word
Definition: builtinTypes.hpp:64
pFlow::particles::insertParticles
virtual bool insertParticles(const realx3Vector &position, const wordVector &shapesNames, const anyList &setVarList)=0
pFlow::systemControl
Definition: systemControl.hpp:41
pFlow::zero3
const realx3 zero3(0.0)
Definition: types.hpp:137
pFlow::particles::mass
virtual const realPointField_D & mass() const =0
pFlow::particles::capacity
auto capacity() const
Definition: particles.hpp:131
pFlow::particles::thisDomain
const auto & thisDomain() const
Definition: particles.hpp:116
pFlow::pointStructure::simDomain
const auto & simDomain() const
Definition: pointStructure.hpp:149
pFlow::dynamicPointStructure
Definition: dynamicPointStructure.hpp:35
pFlow::particles::extendedDomain
const auto & extendedDomain() const
Definition: particles.hpp:121
pFlow::particles::diameter
virtual const realPointField_D & diameter() const =0
pFlow
Definition: demGeometry.hpp:27
pFlow::particles::dynPointStruct_
dynamicPointStructure dynPointStruct_
dynamic point structure for particles center mass
Definition: particles.hpp:40
pFlow::pointField
Definition: pointField.hpp:33
pFlow::particles::zeroForce
void zeroForce()
Definition: particles.hpp:64
pFlow::particles::shapeIndex_
uint32PointField_D shapeIndex_
shape index of each particle
Definition: particles.hpp:43
pFlow::pointStructure
Definition: pointStructure.hpp:34
pFlow::anyList
Definition: anyList.hpp:35
pFlow::particles::boundingSphere
virtual const realPointField_D & boundingSphere() const =0
pFlow::particles::maxId
uint maxId() const
Definition: particles.hpp:187
pFlow::particles
Definition: particles.hpp:33
pFlow::particles::pointPosition
auto & pointPosition()
Definition: particles.hpp:79
pFlow::internalPoints::numActive
uint32 numActive() const
Definition: internalPoints.hpp:188
pFlow::particles::particles
particles(systemControl &control)
Definition: particles.cpp:22
pFlow::particles::baseFieldBoundaryUpdateTimer_
Timer baseFieldBoundaryUpdateTimer_
Definition: particles.hpp:57
pFlow::shape
Definition: shape.hpp:30
pFlow::particles::simDomain
const auto & simDomain() const
Definition: particles.hpp:111
pFlow::demComponent
A base class for every main component of DEM system.
Definition: demComponent.hpp:42
pFlow::particles::contactTorque
auto & contactTorque()
Definition: particles.hpp:176
pFlow::Timer
Definition: Timer.hpp:33
pFlow::particles::contactForce_
realx3PointField_D contactForce_
contact force field
Definition: particles.hpp:49
pFlow::particles::getShapes
virtual const shape & getShapes() const =0
pFlow::particles::shapeIndex
auto & shapeIndex()
Definition: particles.hpp:89
pFlow::particles::afterIteration
bool afterIteration() override
This is called in time loop, after iterate.
Definition: particles.cpp:110
pFlow::particles::propertyId
virtual const uint32PointField_D & propertyId() const =0
pFlow::particles::size
auto size() const
Definition: particles.hpp:126
pFlow::pointStructure::extendedDomain
const auto & extendedDomain() const
Definition: pointStructure.hpp:161
pFlow::particles::contactTorque
const auto & contactTorque() const
Definition: particles.hpp:181
pFlow::particles::numActive
auto numActive() const
Definition: particles.hpp:136
pFlow::pointField::fill
void fill(const T &val)
Definition: pointField.hpp:138
pFlow::particles::isAllActive
bool isAllActive() const
Definition: particles.hpp:141
pFlow::internalPoints::size
uint32 size() const
Definition: internalPoints.hpp:168
pFlow::particles::defaultMessage_
static const message defaultMessage_
messages for this objects
Definition: particles.hpp:60
dynamicPointStructure.hpp
pFlow::particles::idHandler
auto & idHandler()
Definition: particles.hpp:84
pFlow::particles::accelertion
auto & accelertion()
Definition: particles.hpp:161
demComponent.hpp
pFlow::particles::accelertion_
realx3PointField_D accelertion_
acceleration on device
Definition: particles.hpp:46
pFlow::uniquePtr
Definition: uniquePtr.hpp:42
pFlow::particles::idHandler_
uniquePtr< particleIdHandler > idHandler_
handling new ids for new particles
Definition: particles.hpp:55
pFlow::particles::dynPointStruct
auto & dynPointStruct()
Definition: particles.hpp:74
pFlow::particles::TypeInfo
TypeInfo("particles")
pFlow::particles::pStruct
const pointStructure & pStruct() const
Definition: particles.hpp:106
pFlow::particles::contactTorque_
realx3PointField_D contactTorque_
contact torque field
Definition: particles.hpp:52
particleIdHandler.hpp
pFlow::Vector< realx3 >
pFlow::particles::boundingSphereMinMax
virtual void boundingSphereMinMax(real &minDiam, real &maxDiam) const =0
Definition: particles.cpp:116
pFlow::message::DEFAULT
@ DEFAULT
Definition: message.hpp:38
pFlow::internalPoints::capacity
uint32 capacity() const
Definition: internalPoints.hpp:175