particles.hpp
Go to the documentation of this file.
1 /*------------------------------- phasicFlow ---------------------------------
2  O C enter of
3  O O E ngineering and
4  O O M ultiscale modeling of
5  OOOOOOO F luid flow
6 ------------------------------------------------------------------------------
7  Copyright (C): www.cemf.ir
8  email: hamid.r.norouzi AT gmail.com
9 ------------------------------------------------------------------------------
10 Licence:
11  This file is part of phasicFlow code. It is a free software for simulating
12  granular and multiphase flows. You can redistribute it and/or modify it under
13  the terms of GNU General Public License v3 or any other later versions.
14 
15  phasicFlow is distributed to help others in their research in the field of
16  granular and multiphase flows, but WITHOUT ANY WARRANTY; without even the
17  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 
19 -----------------------------------------------------------------------------*/
20 
21 
22 #ifndef __particles_hpp__
23 #define __particles_hpp__
24 
26 #include "particleIdHandler.hpp"
27 #include "demParticles.hpp"
28 namespace pFlow
29 {
30 
31 class setFieldList;
32 
33 class particles
34 :
35  public eventObserver,
36  public demParticles
37 {
38 protected:
39 
40  // owner repository
42 
44 
45  // dynamic point structure for particles
47 
48  // - name of shapes - this is managed by particles
50 
51  // id of particles on host
53 
54  // property id on device
56 
57  // diameter / boundig sphere size of particles on device
59 
60  // mass on device
62 
63  // - acceleration on device
65 
66 
68 
69 
71 
72 
73  // - object handling particle id
75 
77 
78  void zeroForce()
79  {
80  contactForce_.fill(zero3);
81  }
82 
83  void zeroTorque()
84  {
85  contactTorque_.fill(zero3);
86  }
87 
88 public:
89 
90  // type info
91  TypeInfo("particles");
92 
94 
95  inline const auto& time()const {
96  return time_;
97  }
98 
99  inline auto& time() {
100  return time_;
101  }
102 
103  inline auto integrationMethod()const
104  {
105  return integrationMethod_;
106  }
107 
108  inline const auto& dynPointStruct()const
109  {
110  return dynPointStruct_;
111  }
112 
113  inline auto& dynPointStruct()
114  {
115  return dynPointStruct_;
116  }
117 
118  inline const auto& pStruct()const{
119  return dynPointStruct_.pStruct();
120  }
121 
122  inline auto& pStruct(){
123  return dynPointStruct_.pStruct();
124  }
125 
126  inline auto size()const{
127  return pStruct().size();
128  }
129 
130  inline auto capacity() const{
131  return pStruct().capacity();
132  }
133 
134  inline auto activePointsMaskD()const{
135  return pStruct().activePointsMaskD();
136  }
137 
138  inline auto numActive()const
139  {
140  return pStruct().numActive();
141  }
142 
143  inline bool allActive()const{
144  return pStruct().allActive();
145  }
146 
147  inline auto activeRange()const{
148  return pStruct().activeRange();
149  }
150 
151  inline auto activePointsMaskH()const{
152  return pStruct().activePointsMaskH();
153  }
154 
155  inline const auto& pointPosition()const{
156  return pStruct().pointPosition();
157  }
158 
159  inline const auto& position()const
160  {
161  return pStruct().pointPosition();
162  }
163 
164  inline const auto& pointVelocity()const{
165  return dynPointStruct().velocity();
166  }
167 
168  inline const auto& velocity()const{
169  return dynPointStruct().velocity();
170  }
171 
172  inline const auto& id()const{
173  return id_;
174  }
175 
176  inline auto& id(){
177  return id_;
178  }
179 
180  inline const auto& diameter()const{
181  return diameter_;
182  }
183 
184  inline auto& diameter(){
185  return diameter_;
186  }
187 
188  inline const auto& mass()const{
189  return mass_;
190  }
191 
192  inline auto& mass() {
193  return mass_;
194  }
195 
196  inline const auto& accelertion()const{
197  return accelertion_;
198  }
199 
200  inline auto& accelertion(){
201  return accelertion_;
202  }
203 
204  inline
206  {
207  return contactForce_;
208  }
209 
210  inline
212  {
213  return contactForce_;
214  }
215 
216  inline
218  {
219  return contactTorque_;
220  }
221 
222  inline
224  {
225  return contactTorque_;
226  }
227 
228  inline const auto& propertyId()const{
229  return propertyId_;
230  }
231 
232  inline auto& propertyId(){
233  return propertyId_;
234  }
235 
236  inline const auto& shapeName()const{
237  return shapeName_;
238  }
239 
240  inline auto& shapName(){
241  return shapeName_;
242  }
243 
244  bool beforeIteration() override
245  {
246  auto domain = this->control().domain();
247 
248  auto numMarked = dynPointStruct_.markDeleteOutOfBox(domain);
249  /*if(numMarked)
250  {
251  output<<"\nNumber of deleted points/particles that are out of domain box: "<<numMarked<<endl;
252  }*/
253 
254  this->zeroForce();
255  this->zeroTorque();
256 
257  return true;
258  }
259 
260  virtual
261  bool insertParticles
262  (
263  const realx3Vector& position,
264  const wordVector& shapes,
265  const setFieldList& setField
266  ) = 0;
267 
268 
269 
270  virtual
272 
273  virtual
274  const realx3PointField_D& rAcceleration() const = 0;
275 
276  virtual
277  const realVector_D& boundingSphere()const = 0;
278 
279  virtual
280  word shapeTypeName()const = 0;
281 
282  virtual
283  void boundingSphereMinMax(real & minDiam, real& maxDiam)const = 0;
284 
285 
286 
287 }; // particles
288 
289 } // pFlow
290 
291 #endif //__particles_hpp__
pFlow::particles::mass
const auto & mass() const
Definition: particles.hpp:188
pFlow::particles::shapeName_
wordPointField & shapeName_
Definition: particles.hpp:49
pFlow::particles::beforeIteration
bool beforeIteration() override
Definition: particles.hpp:244
pFlow::particles::pointVelocity
const auto & pointVelocity() const
Definition: particles.hpp:164
pFlow::particles::propertyId
auto & propertyId()
Definition: particles.hpp:232
pFlow::particles::velocity
const auto & velocity() const
Definition: particles.hpp:168
pFlow::particles::zeroTorque
void zeroTorque()
Definition: particles.hpp:83
pFlow::particles::accelertion
const auto & accelertion() const
Definition: particles.hpp:196
pFlow::particles::contactTorque
const realx3PointField_D & contactTorque() const
Definition: particles.hpp:223
pFlow::real
float real
Definition: builtinTypes.hpp:46
pFlow::particles::pointPosition
const auto & pointPosition() const
Definition: particles.hpp:155
pFlow::demComponent::control
const auto & control() const
Definition: demComponent.hpp:57
pFlow::particles::position
const auto & position() const
Definition: particles.hpp:159
pFlow::particles::dynPointStruct
const auto & dynPointStruct() const
Definition: particles.hpp:108
pFlow::particles::mass
auto & mass()
Definition: particles.hpp:192
pFlow::particles::rAcceleration
virtual realx3PointField_D & rAcceleration()=0
pFlow::particles::shapeTypeName
virtual word shapeTypeName() const =0
pFlow::dynamicPointStructure::markDeleteOutOfBox
auto markDeleteOutOfBox(const box &domain)
Definition: dynamicPointStructure.hpp:113
pFlow::particles::contactTorque_
realx3PointField_D & contactTorque_
Definition: particles.hpp:70
pFlow::particleIdHandler
Definition: particleIdHandler.hpp:30
pFlow::word
std::string word
Definition: builtinTypes.hpp:63
pFlow::systemControl
Definition: systemControl.hpp:41
pFlow::particles::time
auto & time()
Definition: particles.hpp:99
pFlow::zero3
const realx3 zero3(0.0)
Definition: types.hpp:97
pFlow::particles::capacity
auto capacity() const
Definition: particles.hpp:130
pFlow::eventObserver
Definition: eventObserver.hpp:33
pFlow::particles::integrationMethod
auto integrationMethod() const
Definition: particles.hpp:103
pFlow::dynamicPointStructure
Definition: dynamicPointStructure.hpp:33
pFlow::particles::propertyId
const auto & propertyId() const
Definition: particles.hpp:228
pFlow::particles::integrationMethod_
const word integrationMethod_
Definition: particles.hpp:43
pFlow
Definition: demComponent.hpp:28
pFlow::particles::diameter
auto & diameter()
Definition: particles.hpp:184
pFlow::particles::time
const auto & time() const
Definition: particles.hpp:95
pFlow::particles::dynPointStruct_
dynamicPointStructure dynPointStruct_
Definition: particles.hpp:46
pFlow::particles::id_
int32PointField_HD & id_
Definition: particles.hpp:52
pFlow::particles::contactForce
realx3PointField_D & contactForce()
Definition: particles.hpp:205
pFlow::pointField
Definition: pointField.hpp:35
pFlow::particles::zeroForce
void zeroForce()
Definition: particles.hpp:78
pFlow::particles::time_
Time & time_
Definition: particles.hpp:41
pFlow::particles
Definition: particles.hpp:33
pFlow::particles::accelertion_
realx3PointField_D & accelertion_
Definition: particles.hpp:64
pFlow::demParticles
Definition: demParticles.hpp:31
pFlow::particles::boundingSphere
virtual const realVector_D & boundingSphere() const =0
pFlow::particles::id
auto & id()
Definition: particles.hpp:176
pFlow::particles::pStruct
const auto & pStruct() const
Definition: particles.hpp:118
demParticles.hpp
pFlow::setFieldList
Definition: setFieldList.hpp:32
pFlow::particles::pStruct
auto & pStruct()
Definition: particles.hpp:122
pFlow::particles::getFieldObjectList
virtual uniquePtr< List< eventObserver * > > getFieldObjectList() const
Definition: particles.cpp:154
pFlow::particles::size
auto size() const
Definition: particles.hpp:126
pFlow::dynamicPointStructure::pStruct
pointStructure & pStruct()
Definition: dynamicPointStructure.hpp:88
pFlow::particles::contactTorque
realx3PointField_D & contactTorque()
Definition: particles.hpp:217
pFlow::particles::propertyId_
int8PointField_D & propertyId_
Definition: particles.hpp:55
pFlow::particles::insertParticles
virtual bool insertParticles(const realx3Vector &position, const wordVector &shapes, const setFieldList &setField)=0
pFlow::particles::numActive
auto numActive() const
Definition: particles.hpp:138
pFlow::VectorSingle
Definition: VectorSingle.hpp:45
pFlow::particles::activePointsMaskH
auto activePointsMaskH() const
Definition: particles.hpp:151
pFlow::particles::mass_
realPointField_D & mass_
Definition: particles.hpp:61
dynamicPointStructure.hpp
pFlow::particles::diameter
const auto & diameter() const
Definition: particles.hpp:180
pFlow::particles::accelertion
auto & accelertion()
Definition: particles.hpp:200
pFlow::particles::boundingSphereMinMax
virtual void boundingSphereMinMax(real &minDiam, real &maxDiam) const =0
pFlow::uniquePtr
Definition: uniquePtr.hpp:44
pFlow::particles::dynPointStruct
auto & dynPointStruct()
Definition: particles.hpp:113
pFlow::particles::TypeInfo
TypeInfo("particles")
pFlow::particles::shapeName
const auto & shapeName() const
Definition: particles.hpp:236
pFlow::particles::idHandler_
particleIdHandler idHandler_
Definition: particles.hpp:74
pFlow::particles::shapName
auto & shapName()
Definition: particles.hpp:240
pFlow::particles::allActive
bool allActive() const
Definition: particles.hpp:143
pFlow::particles::id
const auto & id() const
Definition: particles.hpp:172
particleIdHandler.hpp
pFlow::Vector< realx3 >
pFlow::particles::contactForce
const realx3PointField_D & contactForce() const
Definition: particles.hpp:211
pFlow::particles::activePointsMaskD
auto activePointsMaskD() const
Definition: particles.hpp:134
pFlow::particles::contactForce_
realx3PointField_D & contactForce_
Definition: particles.hpp:67
pFlow::particles::particles
particles(systemControl &control, const word &integrationMethod)
Definition: particles.cpp:26
pFlow::particles::diameter_
realPointField_D & diameter_
Definition: particles.hpp:58
pFlow::particles::activeRange
auto activeRange() const
Definition: particles.hpp:147
pFlow::Time
Definition: Time.hpp:39