ASL  0.1.7
Advanced Simulation Library
aslBCond.h
Go to the documentation of this file.
1 /*
2  * Advanced Simulation Library <http://asl.org.il>
3  *
4  * Copyright 2015 Avtech Scientific <http://avtechscientific.com>
5  *
6  *
7  * This file is part of Advanced Simulation Library (ASL).
8  *
9  * ASL is free software: you can redistribute it and/or modify it
10  * under the terms of the GNU Affero General Public License as
11  * published by the Free Software Foundation, version 3 of the License.
12  *
13  * ASL is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU Affero General Public License for more details.
17  *
18  * You should have received a copy of the GNU Affero General Public License
19  * along with ASL. If not, see <http://www.gnu.org/licenses/>.
20  *
21  */
22 
23 
24 #ifndef ASLBCOND_H
25 #define ASLBCOND_H
26 
27 #include "aslNumMethod.h"
28 #include <data/aslBlocks.h>
29 #include <acl/aclMath/aclVectorOfElementsDef.h>
30 
31 
32 namespace acl
33 {
34  class ExpressionContainer;
35 }
36 
37 namespace asl
38 {
39 
40  class VectorTemplate;
41  template <typename V> class DataWithGhostNodes;
42  typedef DataWithGhostNodes<acl::VectorOfElementsData> DataWithGhostNodesACLData;
43  typedef std::shared_ptr<DataWithGhostNodesACLData> SPDataWithGhostNodesACLData;
44  typedef DataWithGhostNodes<acl::VectorOfElements> DataWithGhostNodesACL;
45  typedef std::shared_ptr<DataWithGhostNodesACL> SPDataWithGhostNodesACL;
46  class TemplateVE;
47  class DistanceFunction;
48  typedef std::shared_ptr<DistanceFunction> SPDistanceFunction;
49 
50 
51  class AbstractDataWithGhostNodes;
52  typedef std::shared_ptr<AbstractDataWithGhostNodes> SPAbstractDataWithGhostNodes;
53 
55 
58  class BCond: public NumMethod
59  {
60  protected:
61  Block block;
62  const VectorTemplate * const templ;
63 
64  std::vector<int> indices;
65  std::vector<int> directions;
66  std::vector<double> fractions;
67  std::vector<int> neighbourIndices;
68 
73 
78 
79  public:
80  BCond(const Block & b);
81  BCond(const Block & b, const VectorTemplate * const t);
82  void addPoint(AVec<int> a,int d=0,double fr=0);
83  const Block & getBlock();
84  inline const VectorTemplate * getVT();
85 
86  };
87 
88  typedef std::shared_ptr<BCond> SPBCond;
89 
91 
100  class BCondWithMap:public NumMethod
101  {
102  protected:
104  bool pointsListFlag;
106  const VectorTemplate * const templ;
107 
109  Block bl;
116 
117  unique_ptr<TemplateVE> mapTVE;
118  unique_ptr<TemplateVE> cDomainTVE;
119 
123 
128 
133 
136  acl::VectorOfElements isComputationNode(const vector<unsigned int> & ii);
141 
151  BCondWithMap(SPDistanceFunction m, const Block & b, const VectorTemplate * const vt);
159  const VectorTemplate * const vt);
166  SPDistanceFunction cd,
167  const VectorTemplate * const vt);
176  const Block & b,
177  const VectorTemplate * const vt);
178  public:
179  inline const VectorTemplate * getVT();
180  };
181 
182 
184 
189  class BCondConnector:public NumMethod
190  {
191  protected:
192  Block block1;
193  Block block2;
194 
195  std::vector<int> indices1;
196  std::vector<int> directions1;
197  std::vector<int> indices2;
198  std::vector<int> directions2;
199 
204 
207  public:
208  BCondConnector(const Block & b1, const Block & b2);
210  void addGhostPoint(AVec<int> a1,int d1,AVec<int> a2,int d2);
211  const Block & getBlock1();
212  const Block & getBlock2();
213  };
214 
215 
217 
227  class BCondSlice:public NumMethod
228  {
229  protected:
230  Block block;
231  const VectorTemplate * const templ;
232 
233  int pointB;
234  int pointE;
237  int direction;
238 
239  public:
240  BCondSlice(const Block & b);
241  BCondSlice(const Block & b, const VectorTemplate * const t);
242  void addGhostSlice(AVec<int> pB,AVec<int> pE, int dir);
243  const Block & getBlock();
244  };
245 
247 
258  class BCondConnectorSlice:public NumMethod
259  {
260  protected:
261  Block block1;
262  Block block2;
263  const VectorTemplate * const templ;
264 
265  int point1B;
266  int point1E;
269  int direction1;
270 
271  int point2B;
272  int point2E;
275  int direction2;
276 
277  public:
278  BCondConnectorSlice(const Block & b1, const Block & b2, const VectorTemplate *const t);
279  void addGhostSlice1(AVec<int> pB,AVec<int> pE, int dir);
280  void addGhostSlice2(AVec<int> pB,AVec<int> pE, int dir);
281  const Block & getBlock1();
282  const Block & getBlock2();
283  };
284 
286 
292  class BCondDynamic:public NumMethod
293  {
294  protected:
295  Block block;
296  const VectorTemplate * const templ;
297 
300 
301  public:
302  BCondDynamic(const Block & b);
303  BCondDynamic(const Block & b, const VectorTemplate * const t);
304  const Block & getBlock();
305  inline const VectorTemplate * getVT();
306  };
307 
309  enum SlicesNames {X0, XE, Y0, YE, Z0, ZE};
310 
313  void addSliceX0(BCond &);
314  void addSliceXE(BCond &);
315  void addSliceY0(BCond &);
316  void addSliceYE(BCond &);
317  void addSliceZ0(BCond &);
318  void addSliceZE(BCond &);
320 
321  void addSlices(BCond &, const vector<SlicesNames> &);
322 
325  void addSliceX(BCond &, int x);
326  void addSliceY(BCond &, int y);
327  void addSliceZ(BCond &, int z);
329 
332  void addSliceX0(BCondSlice &);
333  void addSliceXE(BCondSlice &);
334  void addSliceY0(BCondSlice &);
335  void addSliceYE(BCondSlice &);
336  void addSliceZ0(BCondSlice &);
337  void addSliceZE(BCondSlice &);
339 
340 // --------------------------- Implementation ----------------------
341  inline const VectorTemplate * BCond::getVT()
342  {
343  return templ;
344  }
345 
346  inline const VectorTemplate * BCondWithMap::getVT()
347  {
348  return templ;
349  }
350 
351 }
352 
353 #endif //ASLBCOND_H
asl::BCondConnectorSlice::point2E
int point2E
Definition: aslBCond.h:272
asl::BCond::getVT
const VectorTemplate * getVT()
Definition: aslBCond.h:341
asl::BCondWithMap::initMapInfrastructure
virtual void initMapInfrastructure(acl::ExpressionContainer &ec)
initialize mapTVE and cDomainTVE
asl::BCondWithMap::BCondWithMap
BCondWithMap(SPDistanceFunction m, SPDistanceFunction cd, const Block &b, const VectorTemplate *const vt)
asl::DataWithGhostNodesACL
DataWithGhostNodes< acl::VectorOfElements > DataWithGhostNodesACL
Definition: aslGenerators.h:48
asl::addSliceZE
void addSliceZE(BCond &)
asl::BCond::BCond
BCond(const Block &b)
asl::BCondWithMap::isGhostNode
acl::VectorOfElements isGhostNode()
returns expression corresponding to check if the current node is ghost one
asl::BCondWithMap::cDomainTVE
unique_ptr< TemplateVE > cDomainTVE
Definition: aslBCond.h:118
asl::BCondConnector::loadIndicesToACL
void loadIndicesToACL()
asl::BCond::directions
std::vector< int > directions
Definition: aslBCond.h:65
asl::BCondWithMap::isComputationNode
acl::VectorOfElements isComputationNode(unsigned int i)
returns expression corresponding to check if the node in i^th direction is computation one
asl::addSliceYE
void addSliceYE(BCond &)
asl::BCondWithMap::mapTVE
unique_ptr< TemplateVE > mapTVE
Definition: aslBCond.h:117
asl::BCondConnectorSlice::addGhostSlice1
void addGhostSlice1(AVec< int > pB, AVec< int > pE, int dir)
asl::BCond::addPoint
void addPoint(AVec< int > a, int d=0, double fr=0)
asl::BCondDynamic::pointsACL
acl::SPVectorOfElementsData pointsACL
Definition: aslBCond.h:298
asl::BCondWithMap::currentPoint
acl::VectorOfElements currentPoint
Definition: aslBCond.h:105
asl::SPBCond
std::shared_ptr< BCond > SPBCond
Definition: aslBCond.h:88
asl::BCondWithMap::BCondWithMap
BCondWithMap(SPAbstractDataWithGhostNodes m, const VectorTemplate *const vt)
asl::BCondConnector::indices1ACL
acl::SPVectorOfElementsData indices1ACL
Definition: aslBCond.h:200
asl::BCondSlice::pointB
int pointB
Definition: aslBCond.h:233
asl::BCondDynamic::normalsACL
acl::SPVectorOfElementsData normalsACL
Definition: aslBCond.h:299
asl::BCond::loadNeighbourIndicesToACL
void loadNeighbourIndicesToACL()
asl::BCondWithMap::isComputationNode
acl::VectorOfElements isComputationNode()
returns expression corresponding to check if the current node is computation one
asl::addSliceY
void addSliceY(BCond &, int y)
asl::SPDataWithGhostNodesACLData
std::shared_ptr< DataWithGhostNodesACLData > SPDataWithGhostNodesACLData
Definition: aslGenerators.h:47
asl::BCondConnectorSlice::point2B
int point2B
Definition: aslBCond.h:271
asl::BCondSlice::BCondSlice
BCondSlice(const Block &b, const VectorTemplate *const t)
asl::BCondConnectorSlice::direction1
int direction1
Definition: aslBCond.h:269
asl::BCond::loadfractionsACL
void loadfractionsACL()
asl::BCondSlice::addGhostSlice
void addGhostSlice(AVec< int > pB, AVec< int > pE, int dir)
asl::BCond::indices
std::vector< int > indices
Definition: aslBCond.h:64
asl::BCondWithMap::bl
Block bl
block
Definition: aslBCond.h:109
asl::BCond::getBlock
const Block & getBlock()
asl::BCondWithMap::pointsListFlag
bool pointsListFlag
flag whether the point list to be generated or not
Definition: aslBCond.h:104
asl::addSliceZ
void addSliceZ(BCond &, int z)
asl::BCond::directionsACL
acl::SPVectorOfElementsData directionsACL
Definition: aslBCond.h:71
asl::BCondConnector::block1
Block block1
Definition: aslBCond.h:192
asl::BCondConnector::directions2
std::vector< int > directions2
Definition: aslBCond.h:198
asl::addSliceX
void addSliceX(BCond &, int x)
asl::BCondConnectorSlice::sliceDimentions1
AVec< int > sliceDimentions1
Definition: aslBCond.h:267
acl::SPVectorOfElementsData
shared_ptr< VectorOfElementsData > SPVectorOfElementsData
Definition: aclVectorOfElementsDef.h:105
asl::BCondConnector
Virtual class describes general interface for boundary conditions which connect two datas.
Definition: aslBCond.h:190
acl::ExpressionContainer
Definition: aclExpressionContainer.h:44
asl::BCondDynamic::templ
const VectorTemplate *const templ
Definition: aslBCond.h:296
asl::addSlices
void addSlices(BCond &, const vector< SlicesNames > &)
asl::Z0
@ Z0
Definition: aslBCond.h:309
asl::BCondSlice::sliceDimentions
AVec< int > sliceDimentions
Definition: aslBCond.h:235
asl::BCondSlice::sliceIncrements
AVec< int > sliceIncrements
Definition: aslBCond.h:236
asl::BCond::fractionsACL
acl::SPVectorOfElementsData fractionsACL
Definition: aslBCond.h:72
asl::DataWithGhostNodesACLData
DataWithGhostNodes< acl::VectorOfElementsData > DataWithGhostNodesACLData
Definition: aslGenerators.h:45
aslNumMethod.h
asl::BCondConnector::directions2ACL
acl::SPVectorOfElementsData directions2ACL
Definition: aslBCond.h:203
asl::BCondConnectorSlice::point1E
int point1E
Definition: aslBCond.h:266
asl::YE
@ YE
Definition: aslBCond.h:309
asl::BCondDynamic
Virtual class describes general interface for boundary conditions.
Definition: aslBCond.h:293
asl::BCondConnector::indices2
std::vector< int > indices2
Definition: aslBCond.h:197
asl::BCondConnectorSlice::sliceIncrements2
AVec< int > sliceIncrements2
Definition: aslBCond.h:274
asl::addSliceY0
void addSliceY0(BCond &)
asl::BCondWithMap::BCondWithMap
BCondWithMap(SPAbstractDataWithGhostNodes m, SPDistanceFunction cd, const VectorTemplate *const vt)
asl::BCondDynamic::getVT
const VectorTemplate * getVT()
asl::BCondSlice
Virtual class describes general interface for boundary conditions.
Definition: aslBCond.h:228
asl::BCondSlice::direction
int direction
Definition: aslBCond.h:237
asl::X0
@ X0
Definition: aslBCond.h:309
asl::BCondWithMap::isComputationNode
acl::VectorOfElements isComputationNode(const vector< unsigned int > &ii)
returns expression corresponding to check if nodes in directions ii are computation ones
asl::BCond::indicesACL
acl::SPVectorOfElementsData indicesACL
Definition: aslBCond.h:69
asl::BCondConnectorSlice::point1B
int point1B
Definition: aslBCond.h:265
asl::BCondWithMap::mapDF
SPDistanceFunction mapDF
Definition: aslBCond.h:112
acl::VectorOfElements
The class represents several Element.
Definition: aclVectorOfElementsDef.h:92
asl::BCondWithMap::getVT
const VectorTemplate * getVT()
asl::Block
Definition: aslBlocks.h:57
asl::BCondConnectorSlice::direction2
int direction2
Definition: aslBCond.h:275
asl::BCondConnectorSlice::templ
const VectorTemplate *const templ
Definition: aslBCond.h:263
asl::BCondDynamic::BCondDynamic
BCondDynamic(const Block &b)
asl::BCond::BCond
BCond(const Block &b, const VectorTemplate *const t)
asl::BCondDynamic::block
Block block
Definition: aslBCond.h:295
asl::BCondConnector::getBlock1
const Block & getBlock1()
asl::SlicesNames
SlicesNames
defines names of walls of a box
Definition: aslBCond.h:309
asl::BCondWithMap::isGhostNode
acl::VectorOfElements isGhostNode(unsigned int i)
returns expression corresponding to check if the node in i^th direction is ghost one
asl::BCondWithMap::BCondWithMap
BCondWithMap(SPDistanceFunction m, const Block &b, const VectorTemplate *const vt)
asl::BCondConnectorSlice::addGhostSlice2
void addGhostSlice2(AVec< int > pB, AVec< int > pE, int dir)
asl::BCondWithMap::map
SPAbstractDataWithGhostNodes map
boundary description for the particular BC
Definition: aslBCond.h:111
asl::BCondConnector::BCondConnector
BCondConnector(const Block &b1, const Block &b2)
asl::NumMethod
Definition: aslNumMethod.h:35
asl::BCondWithMap::computationalDomain
SPAbstractDataWithGhostNodes computationalDomain
Computational domain which contains all boundaries and the particular boundary as well.
Definition: aslBCond.h:114
asl::Y0
@ Y0
Definition: aslBCond.h:309
asl::BCond::loadDirectionsToACL
void loadDirectionsToACL()
asl::BCondDynamic::BCondDynamic
BCondDynamic(const Block &b, const VectorTemplate *const t)
asl::BCondDynamic::getBlock
const Block & getBlock()
asl::BCond::neighbourIndices
std::vector< int > neighbourIndices
Definition: aslBCond.h:67
asl::BCondConnector::addGhostPoint
void addGhostPoint(AVec< int > a1, AVec< int > a2)
asl::BCondConnector::getBlock2
const Block & getBlock2()
asl::BCond::block
Block block
Definition: aslBCond.h:61
asl::addSliceXE
void addSliceXE(BCond &)
asl::BCond::templ
const VectorTemplate *const templ
Definition: aslBCond.h:62
asl::BCondConnectorSlice
Virtual class describes general interface for boundary conditions which connect two datas.
Definition: aslBCond.h:259
asl::BCond::getVT
const VectorTemplate * getVT()
asl::addSliceZ0
void addSliceZ0(BCond &)
asl::SPDistanceFunction
std::shared_ptr< DistanceFunction > SPDistanceFunction
Definition: aslGeomInc.h:44
asl::BCondConnector::loadDirectionsToACL
void loadDirectionsToACL()
asl::BCondSlice::pointE
int pointE
Definition: aslBCond.h:234
asl::VectorTemplate
Defines set of vectros with several properties.
Definition: aslTemplates.h:88
asl::BCondConnectorSlice::BCondConnectorSlice
BCondConnectorSlice(const Block &b1, const Block &b2, const VectorTemplate *const t)
asl::BCondConnectorSlice::block2
Block block2
Definition: aslBCond.h:262
asl::XE
@ XE
Definition: aslBCond.h:309
asl::BCondWithMap::computationalDomainDF
SPDistanceFunction computationalDomainDF
Definition: aslBCond.h:115
asl::BCondWithMap
Virtual class describes general interface for boundary conditions.
Definition: aslBCond.h:101
asl::BCondConnector::block2
Block block2
Definition: aslBCond.h:193
asl::BCondConnector::indices2ACL
acl::SPVectorOfElementsData indices2ACL
Definition: aslBCond.h:202
asl::BCondSlice::templ
const VectorTemplate *const templ
Definition: aslBCond.h:231
asl::ZE
@ ZE
Definition: aslBCond.h:309
asl::BCond::fractions
std::vector< double > fractions
Definition: aslBCond.h:66
asl::BCondSlice::BCondSlice
BCondSlice(const Block &b)
asl::BCond::loadIndicesToACL
void loadIndicesToACL()
asl::BCondConnectorSlice::sliceDimentions2
AVec< int > sliceDimentions2
Definition: aslBCond.h:273
asl::BCondConnector::directions1ACL
acl::SPVectorOfElementsData directions1ACL
Definition: aslBCond.h:201
asl::BCondWithMap::BCondWithMap
BCondWithMap(SPAbstractDataWithGhostNodes m, SPAbstractDataWithGhostNodes cd, const VectorTemplate *const vt)
asl::BCondWithMap::templ
const VectorTemplate *const templ
Definition: aslBCond.h:106
asl::BCondConnector::indices1
std::vector< int > indices1
Definition: aslBCond.h:195
asl::BCondConnectorSlice::sliceIncrements1
AVec< int > sliceIncrements1
Definition: aslBCond.h:268
asl::BCondConnectorSlice::getBlock2
const Block & getBlock2()
asl::AVec< int >
asl::SPDataWithGhostNodesACL
std::shared_ptr< DataWithGhostNodesACL > SPDataWithGhostNodesACL
Definition: aslGenerators.h:49
asl::addSliceX0
void addSliceX0(BCond &)
asl::BCondConnector::directions1
std::vector< int > directions1
Definition: aslBCond.h:196
asl::BCondConnectorSlice::block1
Block block1
Definition: aslBCond.h:261
asl
Advanced Simulation Library.
Definition: aslDataInc.h:31
acl
Advanced Computational Language.
Definition: acl.h:41
asl::BCondSlice::getBlock
const Block & getBlock()
asl::BCondSlice::block
Block block
Definition: aslBCond.h:230
asl::BCond::neighbourIndicesACL
acl::SPVectorOfElementsData neighbourIndicesACL
Definition: aslBCond.h:70
asl::BCondConnectorSlice::getBlock1
const Block & getBlock1()
asl::BCondWithMap::getVT
const VectorTemplate * getVT()
Definition: aslBCond.h:346
asl::BCondConnector::addGhostPoint
void addGhostPoint(AVec< int > a1, int d1, AVec< int > a2, int d2)
asl::SPAbstractDataWithGhostNodes
std::shared_ptr< AbstractDataWithGhostNodes > SPAbstractDataWithGhostNodes
Definition: aslGenerators.h:50