www.cemf.ir
ContactSearch.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 __ContactSearch_hpp__
23 #define __ContactSearch_hpp__
24 
25 #include "contactSearchGlobals.hpp"
26 #include "contactSearch.hpp"
27 #include "box.hpp"
28 #include "particles.hpp"
29 #include "geometry.hpp"
31 
32 namespace pFlow
33 {
34 
35 template<
36  class searchMethod
37 >
39 :
40  public contactSearch
41 {
42 public:
43 
44  using IdType = uint32;
45 
47 
48  using SearchMethodType = searchMethod;
49 
50 private:
51 
53 
55 
57  const timeInfo& ti,
58  csPairContainerType& ppPairs,
59  csPairContainerType& pwPairs,
60  bool force = false) override
61  {
62 
63  const auto& position = Particles().pointPosition().deviceViewAll();
64  const auto& flags = Particles().dynPointStruct().activePointsMaskDevice();
65  const auto& diam = Particles().boundingSphere().deviceViewAll();
66 
67  return ppwContactSearch_().broadSearch(
68  ti.iter(),
69  ti.t(),
70  ti.dt(),
71  ppPairs,
72  pwPairs,
73  position,
74  flags,
75  diam,
76  force
77  );
78  }
79 
81  uint32 bndryIndex,
82  const timeInfo& ti,
83  csPairContainerType& ppPairs,
84  csPairContainerType& pwPairs,
85  bool force = false)override
86  {
87  return csBoundaries_[bndryIndex].broadSearch(
88  ti.iter(),
89  ti.t(),
90  ti.dt(),
91  ppPairs,
92  pwPairs,
93  force
94  );
95  }
96 
97 public:
98 
99  TypeInfoTemplate11("ContactSearch", SearchMethodType);
100 
102  const dictionary& csDict,
103  const box& extDomain,
104  const particles& prtcl,
105  const geometry& geom,
106  Timers& timers)
107  :
109  csDict,
110  extDomain,
111  prtcl,
112  geom,
113  timers),
115  csDict,
116  Particles().pStruct().boundaries(),
117  *this)
118  {
119 
120  real minD;
121  real maxD;
122  this->Particles().boundingSphereMinMax(minD, maxD);
123 
124  const auto& position = this->Particles().pointPosition().deviceViewAll();
125  const auto& flags = this->Particles().dynPointStruct().activePointsMaskDevice();
126  const auto& diam = this->Particles().boundingSphere().deviceViewAll();
127 
128  uint32 wnPoints = this->Geometry().numPoints();
129  uint32 wnTri = this->Geometry().size();
130  const auto& wPoints = this->Geometry().points().deviceViewAll();
131  const auto& wVertices = this->Geometry().vertices().deviceViewAll();
132  const auto& wNormals = this->Geometry().normals().deviceViewAll();
133 
134  ppwContactSearch_ =
135  makeUnique<SearchMethodType>
136  (
137  dict(),
138  this->extendedDomainBox(),
139  minD,
140  maxD,
141  position,
142  flags,
143  diam,
144  wnPoints,
145  wnTri,
146  wPoints,
147  wVertices,
148  wNormals
149  );
150  }
151 
152  add_vCtor(
155  dictionary);
156 
157  bool enterBroadSearchBoundary(const timeInfo& ti, bool force=false)const override
158  {
159  return enterBroadSearch(ti, force) || csBoundaries_.boundariesUpdated();
160  }
161 
162  real sizeRatio()const override
163  {
164  return ppwContactSearch_().sizeRatio();
165  }
166 
167  real cellExtent()const override
168  {
169  return ppwContactSearch_().cellExtent();
170  }
171 
172 };
173 
174 }
175 
176 
177 #endif //__ContactSearch_hpp__
pFlow::boundaryContactSearchList::boundariesUpdated
bool boundariesUpdated() const
Definition: boundaryContactSearchList.cpp:29
pFlow::contactSearch::Geometry
const geometry & Geometry() const
Definition: contactSearch.hpp:174
pFlow::ContactSearch::add_vCtor
add_vCtor(contactSearch, ContactSearch, dictionary)
pFlow::triSurface::vertices
const uint32x3Field_D & vertices() const
Definition: triSurface.hpp:192
pFlow::real
float real
Definition: builtinTypes.hpp:45
pFlow::ContactSearch::ppwContactSearch_
uniquePtr< SearchMethodType > ppwContactSearch_
Definition: ContactSearch.hpp:52
pFlow::contactSearch::enterBroadSearch
bool enterBroadSearch(const timeInfo &ti, bool force=false) const
Definition: contactSearch.hpp:139
pFlow::ContactSearch::cellExtent
real cellExtent() const override
Definition: ContactSearch.hpp:167
pFlow::ContactSearch::ExecutionSpace
DefaultExecutionSpace ExecutionSpace
Definition: ContactSearch.hpp:46
pFlow::internalField::deviceViewAll
const auto & deviceViewAll() const
Definition: internalField.hpp:92
pFlow::ContactSearch::enterBroadSearchBoundary
bool enterBroadSearchBoundary(const timeInfo &ti, bool force=false) const override
Definition: ContactSearch.hpp:157
pFlow::ContactSearch::csBoundaries_
boundaryContactSearchList csBoundaries_
Definition: ContactSearch.hpp:54
pFlow::ContactSearch::sizeRatio
real sizeRatio() const override
Definition: ContactSearch.hpp:162
pFlow::uint32
unsigned int uint32
Definition: builtinTypes.hpp:56
box.hpp
boundaryContactSearchList.hpp
particles.hpp
pFlow::DefaultExecutionSpace
Kokkos::DefaultExecutionSpace DefaultExecutionSpace
Default execution space, it can be device exe.
Definition: KokkosTypes.hpp:61
pFlow::contactSearch::dict
const dictionary & dict() const
Definition: contactSearch.hpp:154
pFlow::contactSearch::pStruct
const pointStructure & pStruct() const
Definition: contactSearch.cpp:43
pFlow::Timers
Definition: Timers.hpp:32
pFlow::ContactSearch::IdType
uint32 IdType
Definition: ContactSearch.hpp:44
pFlow::timeInfo
Definition: timeInfo.hpp:28
pFlow::triSurface::numPoints
uint32 numPoints() const
Definition: triSurface.hpp:157
pFlow::unsortedPairs
Definition: unsortedPairs.hpp:32
pFlow
Definition: demGeometry.hpp:27
pFlow::boundaryContactSearchList
Definition: boundaryContactSearchList.hpp:10
pFlow::particles::boundingSphere
virtual const realPointField_D & boundingSphere() const =0
pFlow::particles
Definition: particles.hpp:33
pFlow::particles::pointPosition
auto & pointPosition()
Definition: particles.hpp:79
pFlow::triSurface::size
uint32 size() const
Definition: triSurface.hpp:162
pFlow::triSurface::points
const realx3Field_D & points() const
Definition: triSurface.hpp:172
contactSearchGlobals.hpp
geometry.hpp
pFlow::timeInfo::dt
const real & dt() const
Definition: timeInfo.hpp:51
pFlow::ContactSearch::ContactSearch
ContactSearch(const dictionary &csDict, const box &extDomain, const particles &prtcl, const geometry &geom, Timers &timers)
Definition: ContactSearch.hpp:101
pFlow::VectorSingle::deviceViewAll
INLINE_FUNCTION_H auto & deviceViewAll()
Device view range [0,capcity)
Definition: VectorSingle.cpp:249
pFlow::triSurface::normals
auto & normals()
Definition: triSurface.hpp:202
pFlow::contactSearch
Definition: contactSearch.hpp:42
pFlow::ContactSearch::TypeInfoTemplate11
TypeInfoTemplate11("ContactSearch", SearchMethodType)
pFlow::ContactSearch::SearchMethodType
searchMethod SearchMethodType
Definition: ContactSearch.hpp:48
pFlow::contactSearch::extendedDomainBox
const box & extendedDomainBox() const
Definition: contactSearch.hpp:160
pFlow::contactSearch::Particles
const particles & Particles() const
Definition: contactSearch.hpp:166
pFlow::timeInfo::t
const real & t() const
Definition: timeInfo.hpp:47
pFlow::box
Definition: box.hpp:32
pFlow::timeInfo::iter
const uint32 & iter() const
Definition: timeInfo.hpp:55
pFlow::uniquePtr< SearchMethodType >
pFlow::geometry
Base class for geometry for managing tri-surfaces, geometry motion, and surface physical properties.
Definition: geometry.hpp:44
pFlow::ContactSearch::BroadSearch
bool BroadSearch(const timeInfo &ti, csPairContainerType &ppPairs, csPairContainerType &pwPairs, bool force=false) override
Definition: ContactSearch.hpp:56
pFlow::particles::dynPointStruct
auto & dynPointStruct()
Definition: particles.hpp:74
pFlow::ContactSearch
Definition: ContactSearch.hpp:38
contactSearch.hpp
pFlow::particles::boundingSphereMinMax
virtual void boundingSphereMinMax(real &minDiam, real &maxDiam) const =0
Definition: particles.cpp:116
pFlow::ContactSearch::BoundaryBroadSearch
bool BoundaryBroadSearch(uint32 bndryIndex, const timeInfo &ti, csPairContainerType &ppPairs, csPairContainerType &pwPairs, bool force=false) override
Definition: ContactSearch.hpp:80
pFlow::dictionary
Dictionary holds a set of data entries or sub-dictionaries that are enclosed in a curely braces or ar...
Definition: dictionary.hpp:67