www.cemf.ir
simulationDomain.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 #ifndef __simulationDomain_hpp__
21 #define __simulationDomain_hpp__
22 
23 #include <array>
24 
25 #include "domain.hpp"
26 #include "fileDictionary.hpp"
27 #include "span.hpp"
28 #include "streams.hpp"
29 #include "virtualConstructor.hpp"
30 #include "pointFlag.hpp"
31 
32 namespace pFlow
33 {
34 
35 class systemControl;
36 
37 
39 :
40  public fileDictionary
41 {
42 private:
43 
46 
47  static constexpr uint32 sizeOfBoundaries_ = 6;
48 
49  static
50  inline const std::array<word,6> boundaryNames_ =
51  {
52  "left", "right",
53  "bottom", "top",
54  "rear", "front"
55  };
56 
57 protected:
58 
59  bool prepareBoundaryDicts();
60 
61  virtual
62  bool createBoundaryDicts() = 0;
63 
64  virtual
65  bool setThisDomain() = 0;
66 
67 public:
68 
69  // - type info
70  TypeInfo("simulationDomain");
71 
73  explicit simulationDomain(systemControl& control);
74 
76  ~simulationDomain() override = default;
77 
78 
80  (
83  (systemControl& control),
84  (control)
85  );
86 
87  const auto& globalBox()const
88  {
89  return globalBox_;
90  }
91 
93  inline
94  const auto& globalBoundariesDict()const
95  {
96  return static_cast<const fileDictionary&>(*this);
97  }
98 
101  {
102  return this->subDict(thisBoundariesDictName());
103  }
104 
106  {
107  return "thsiDomainBoundaries";
108  }
109 
111  inline
113  {
115  }
116 
117  virtual
118  bool initialUpdateDomains(span<realx3> pointPos) = 0;
119 
120  virtual
121  uint32 initialNumberInThis()const = 0;
122 
123  virtual
125  span<char> src,
126  span<char> dst,
127  size_t sizeOfElement) const = 0;
128 
129  virtual
131  span<realx3> src,
132  span<realx3> dst) const = 0;
133 
134  virtual
136  span<real> src,
137  span<real> dst) const = 0;
138 
139  virtual
141  span<uint32> src,
142  span<uint32> dst) const = 0;
143 
144  virtual
146  span<int32> src,
147  span<int32> dst) const = 0;
148 
149 
150  template<typename T>
152  span<T> src,
153  span<T> dst )const
154  {
155  size_t el=sizeof(T);
157  (
158  charSpan(src),
159  charSpan(dst),
160  el
161  );
162  }
163 
166  virtual
167  uint32 numberToBeImported()const = 0;
168 
169  virtual
170  uint32 numberToBeExported()const = 0;
171 
175  virtual
176  bool domainActive()const = 0;
177 
178 
180  virtual
181  const domain& thisDomain()const = 0;
182 
183 
185  const realx3& lowerPointExtension,
186  const realx3& upperPointExtension)const;
187 
189  const plane& boundaryPlane(uint32 i)const;
190 
191  static
193 
197  static inline
199  {
200  return boundaryNames_[i];
201  }
202 
203  static inline
205  {
206  return boundaryNames_.size();
207  }
208 
209 }; // simulationDomain
210 
211 
212 
213 }
214 
215 
216 #endif //__simulationDomain_hpp__
pFlow::span
Definition: span.hpp:31
pFlow::simulationDomain::~simulationDomain
~simulationDomain() override=default
Destructor.
pFlow::simulationDomain::initialUpdateDomains
virtual bool initialUpdateDomains(span< realx3 > pointPos)=0
domain.hpp
pFlow::plane
Definition: plane.hpp:30
pFlow::simulationDomain::sizeOfBoundaries_
static constexpr uint32 sizeOfBoundaries_
Definition: simulationDomain.hpp:47
pFlow::simulationDomain::boundaryNames_
static const std::array< word, 6 > boundaryNames_
Definition: simulationDomain.hpp:50
pFlow::simulationDomain::initialTransferBlockData
bool initialTransferBlockData(span< T > src, span< T > dst) const
Definition: simulationDomain.hpp:151
pFlow::simulationDomain::thisBoundariesDictName
word thisBoundariesDictName() const
Definition: simulationDomain.hpp:105
pFlow::simulationDomain::extendThisDomain
domain extendThisDomain(const realx3 &lowerPointExtension, const realx3 &upperPointExtension) const
Definition: simulationDomain.cpp:104
pFlow::simulationDomain::thisBoundariesDict
const dictionary & thisBoundariesDict() const
The generated dictionary generated by code which is used.
Definition: simulationDomain.hpp:100
pFlow::uint32
unsigned int uint32
Definition: builtinTypes.hpp:56
pFlow::simulationDomain::sizeOfBoundaries
static uint32 sizeOfBoundaries()
Definition: simulationDomain.hpp:204
pFlow::word
std::string word
Definition: builtinTypes.hpp:64
pFlow::systemControl
Definition: systemControl.hpp:41
pFlow::simulationDomain::initialNumberInThis
virtual uint32 initialNumberInThis() const =0
pFlow::simulationDomain::numberToBeExported
virtual uint32 numberToBeExported() const =0
pFlow::simulationDomain::boundaryPlane
const plane & boundaryPlane(uint32 i) const
return a const ref to the plane of boundary i of this processor
Definition: simulationDomain.cpp:115
pFlow::simulationDomain::create_vCtor
create_vCtor(simulationDomain, systemControl,(systemControl &control),(control))
pFlow
Definition: demGeometry.hpp:27
pFlow::simulationDomain::thisDomain
virtual const domain & thisDomain() const =0
return the simulation domain of this processor
virtualConstructor.hpp
pFlow::simulationDomain::globalBoundariesDict
const auto & globalBoundariesDict() const
The original dictionary supplied by the user as input.
Definition: simulationDomain.hpp:94
pFlow::simulationDomain::globalBox_
box globalBox_
acutal limits of the global box of simulation
Definition: simulationDomain.hpp:45
pFlow::dictionary::subDict
dictionary & subDict(const word &keyword)
ref to a subdictioanry fatalExit if not found
Definition: dictionary.cpp:560
streams.hpp
pFlow::simulationDomain::setThisDomain
virtual bool setThisDomain()=0
pFlow::charSpan
span< char > charSpan(span< T > s)
Definition: span.hpp:177
pFlow::simulationDomain::boundaryDict
const dictionary & boundaryDict(uint32 i) const
return a const ref to dicrionary of boundary i of this processor
Definition: simulationDomain.hpp:112
fileDictionary.hpp
pFlow::simulationDomain::createBoundaryDicts
virtual bool createBoundaryDicts()=0
pFlow::simulationDomain::create
static uniquePtr< simulationDomain > create(systemControl &control)
Definition: simulationDomain.cpp:121
pFlow::box
Definition: box.hpp:32
pFlow::fileDictionary
Definition: fileDictionary.hpp:29
pFlow::uniquePtr
Definition: uniquePtr.hpp:42
pFlow::simulationDomain::domainActive
virtual bool domainActive() const =0
Is this domain active? Active mean, there is particle in it and boundaries and other entities of simu...
pFlow::simulationDomain::simulationDomain
simulationDomain(systemControl &control)
Constrcut from components.
Definition: simulationDomain.cpp:85
pFlow::simulationDomain
Definition: simulationDomain.hpp:38
pFlow::simulationDomain::numberToBeImported
virtual uint32 numberToBeImported() const =0
Number of points to be imported after updating domains.
pFlow::domain
Definition: domain.hpp:31
pFlow::simulationDomain::bundaryName
static const word & bundaryName(uint32 i)
Boundary name based on boundary index.
Definition: simulationDomain.hpp:198
pFlow::simulationDomain::globalBox
const auto & globalBox() const
Definition: simulationDomain.hpp:87
pFlow::simulationDomain::initialTransferBlockData
virtual bool initialTransferBlockData(span< char > src, span< char > dst, size_t sizeOfElement) const =0
pFlow::triple< real >
span.hpp
pFlow::simulationDomain::TypeInfo
TypeInfo("simulationDomain")
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
pointFlag.hpp
pFlow::simulationDomain::prepareBoundaryDicts
bool prepareBoundaryDicts()
Definition: simulationDomain.cpp:26