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 
26 #include "contactSearchGlobals.hpp"
27 #include "dictionary.hpp"
28 #include "virtualConstructor.hpp"
29 #include "timeInfo.hpp"
30 #include "Timer.hpp"
31 
32 namespace pFlow
33 {
34 
35 // - forward
36 class box;
37 class particles;
38 class geometry;
39 class pointStructure;
40 
41 
43 {
44 private:
45 
47 
50 
53 
55  bool performedSearch_ = false;
56 
59 
62 
65 
67 
69 
71 
72  virtual
73  bool BroadSearch(
74  const timeInfo& ti,
75  csPairContainerType& ppPairs,
76  csPairContainerType& pwPairs,
77  bool force
78  )=0;
79 
80  virtual
82  uint32 bndryIndex,
83  const timeInfo& ti,
84  csPairContainerType& ppPairs,
85  csPairContainerType& pwPairs,
86  bool force = false
87  )=0;
88 
89 public:
90 
91  TypeInfo("contactSearch");
92 
94  const dictionary& dict,
95  const box& extDomain,
96  const particles& prtcl,
97  const geometry& geom,
98  Timers& timers);
99 
100  virtual ~contactSearch()=default;
101 
102 
104  (
106  dictionary,
107  (
108  const dictionary& dict,
109  const box& domain,
110  const particles& prtcl,
111  const geometry& geom,
112  Timers& timers
113  ),
114  (dict, domain, prtcl, geom, timers)
115  );
116 
117  inline
118  bool performedSearch()const
119  {
120  return performedSearch_;
121  }
122 
123  inline
125  {
127  }
128 
129  inline
130  bool performSearch(uint32 iter, bool force = false)const
131  {
132  if((iter-lastUpdated_) % updateInterval_ == 0 || iter == 0 || force )
133  {
134  return true;
135  }
136  return false;
137  }
138 
139  bool enterBroadSearch(const timeInfo& ti, bool force = false)const
140  {
141  return performSearch(ti.iter(), force);
142  }
143 
144  virtual
145  bool enterBroadSearchBoundary(const timeInfo& ti, bool force=false)const = 0;
146 
147  inline
149  {
150  return updateInterval_;
151  }
152 
153  inline
154  const dictionary& dict()const
155  {
156  return dict_;
157  }
158 
159  inline
160  const box& extendedDomainBox()const
161  {
162  return extendedDomainBox_;
163  }
164 
165  inline
166  const particles& Particles()const
167  {
168  return particles_;
169  }
170 
171  const pointStructure& pStruct()const;
172 
173  inline
174  const geometry& Geometry()const
175  {
176  return geometry_;
177  }
178 
179  inline
181  {
182  return ppTimer_;
183  }
184 
185  inline
187  {
188  return bTimer_;
189  }
190 
191  bool broadSearch(
192  const timeInfo& ti,
193  csPairContainerType& ppPairs,
194  csPairContainerType& pwPairs,
195  bool force = false);
196 
197  bool boundaryBroadSearch(
198  uint32 bndryIndex,
199  const timeInfo& ti,
200  csPairContainerType& ppPairs,
201  csPairContainerType& pwPairs,
202  bool force = false);
203 
204  virtual
205  real sizeRatio()const = 0;
206 
207  virtual
208  real cellExtent()const = 0;
209 
210  static
212  const dictionary& dict,
213  const box& extDomain,
214  const particles& prtcl,
215  const geometry& geom,
216  Timers& timers);
217 
218 };
219 
220 
221 }
222 
223 
224 #endif //__ContactSearch_hpp__
pFlow::contactSearch::cellExtent
virtual real cellExtent() const =0
pFlow::contactSearch::Geometry
const geometry & Geometry() const
Definition: contactSearch.hpp:174
pFlow::contactSearch::contactSearch
contactSearch(const dictionary &dict, const box &extDomain, const particles &prtcl, const geometry &geom, Timers &timers)
Definition: contactSearch.cpp:26
pFlow::contactSearch::bTimer
Timer & bTimer()
Definition: contactSearch.hpp:186
pFlow::contactSearch::enterBroadSearchBoundary
virtual bool enterBroadSearchBoundary(const timeInfo &ti, bool force=false) const =0
pFlow::real
float real
Definition: builtinTypes.hpp:45
timeInfo.hpp
pFlow::contactSearch::updateInterval
uint32 updateInterval() const
Definition: contactSearch.hpp:148
pFlow::contactSearch::BroadSearch
virtual bool BroadSearch(const timeInfo &ti, csPairContainerType &ppPairs, csPairContainerType &pwPairs, bool force)=0
pFlow::contactSearch::enterBroadSearch
bool enterBroadSearch(const timeInfo &ti, bool force=false) const
Definition: contactSearch.hpp:139
pFlow::contactSearch::ppTimer_
Timer ppTimer_
Definition: contactSearch.hpp:68
pFlow::contactSearch::sizeRatio
virtual real sizeRatio() const =0
pFlow::uint32
unsigned int uint32
Definition: builtinTypes.hpp:56
pFlow::contactSearch::broadSearch
bool broadSearch(const timeInfo &ti, csPairContainerType &ppPairs, csPairContainerType &pwPairs, bool force=false)
Definition: contactSearch.cpp:49
pFlow::contactSearch::create
static uniquePtr< contactSearch > create(const dictionary &dict, const box &extDomain, const particles &prtcl, const geometry &geom, Timers &timers)
Definition: contactSearch.cpp:118
pFlow::contactSearch::boundaryBroadSearch
bool boundaryBroadSearch(uint32 bndryIndex, const timeInfo &ti, csPairContainerType &ppPairs, csPairContainerType &pwPairs, bool force=false)
Definition: contactSearch.cpp:82
pFlow::contactSearch::bTimer_
Timer bTimer_
Definition: contactSearch.hpp:66
pFlow::contactSearch::particles_
const particles & particles_
const ref to particles
Definition: contactSearch.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::timeInfo
Definition: timeInfo.hpp:28
pFlow::unsortedPairs
Definition: unsortedPairs.hpp:32
pFlow
Definition: demGeometry.hpp:27
pFlow::contactSearch::geometry_
const geometry & geometry_
const ref to geometry
Definition: contactSearch.hpp:64
pFlow::pointStructure
Definition: pointStructure.hpp:34
pFlow::particles
Definition: particles.hpp:33
contactSearchGlobals.hpp
pFlow::Timer
Definition: Timer.hpp:33
dictionary.hpp
pFlow::contactSearch::updateInterval_
uint32 updateInterval_
update interval in terms of iteration numebr
Definition: contactSearch.hpp:49
pFlow::contactSearch::extendedDomainBox_
const box & extendedDomainBox_
Definition: contactSearch.hpp:46
virtualConstructor.hpp
pFlow::contactSearch::lastUpdated_
uint32 lastUpdated_
last iteration number which contact search has been performed
Definition: contactSearch.hpp:52
pFlow::contactSearch::performSearch
bool performSearch(uint32 iter, bool force=false) const
Definition: contactSearch.hpp:130
pFlow::contactSearch::create_vCtor
create_vCtor(contactSearch, dictionary,(const dictionary &dict, const box &domain, const particles &prtcl, const geometry &geom, Timers &timers),(dict, domain, prtcl, geom, timers))
pFlow::contactSearch::performedSearchBoundary_
bool performedSearchBoundary_
performed search in boundaries
Definition: contactSearch.hpp:58
pFlow::contactSearch::ppTimer
Timer & ppTimer()
Definition: contactSearch.hpp:180
pFlow::contactSearch
Definition: contactSearch.hpp:42
pFlow::contactSearch::TypeInfo
TypeInfo("contactSearch")
pFlow::contactSearch::extendedDomainBox
const box & extendedDomainBox() const
Definition: contactSearch.hpp:160
pFlow::contactSearch::Particles
const particles & Particles() const
Definition: contactSearch.hpp:166
pFlow::contactSearch::performedSearch_
bool performedSearch_
performed search?
Definition: contactSearch.hpp:55
pFlow::box
Definition: box.hpp:32
pFlow::timeInfo::iter
const uint32 & iter() const
Definition: timeInfo.hpp:55
pFlow::uniquePtr
Definition: uniquePtr.hpp:42
pFlow::geometry
Base class for geometry for managing tri-surfaces, geometry motion, and surface physical properties.
Definition: geometry.hpp:44
pFlow::contactSearch::performedSearchBoundary
bool performedSearchBoundary() const
Definition: contactSearch.hpp:124
Timer.hpp
pFlow::contactSearch::BoundaryBroadSearch
virtual bool BoundaryBroadSearch(uint32 bndryIndex, const timeInfo &ti, csPairContainerType &ppPairs, csPairContainerType &pwPairs, bool force=false)=0
pFlow::contactSearch::~contactSearch
virtual ~contactSearch()=default
pFlow::domain
Definition: domain.hpp:31
pFlow::contactSearch::performedSearch
bool performedSearch() const
Definition: contactSearch.hpp:118
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
pFlow::contactSearch::dict_
dictionary dict_
Definition: contactSearch.hpp:70