VirtualFluids 0.2.0
Parallel CFD LBM Solver
Loading...
Searching...
No Matches
Interactor3D.h
Go to the documentation of this file.
1//=======================================================================================
2// ____ ____ __ ______ __________ __ __ __ __
3// \ \ | | | | | _ \ |___ ___| | | | | / \ | |
4// \ \ | | | | | |_) | | | | | | | / \ | |
5// \ \ | | | | | _ / | | | | | | / /\ \ | |
6// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____
7// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______|
8// \ \ | | ________________________________________________________________
9// \ \ | | | ______________________________________________________________|
10// \ \| | | | __ __ __ __ ______ _______
11// \ | | |_____ | | | | | | | | | _ \ / _____)
12// \ | | _____| | | | | | | | | | | \ \ \_______
13// \ | | | | |_____ | \_/ | | | | |_/ / _____ |
14// \ _____| |__| |________| \_______/ |__| |______/ (_______/
15//
16// This file is part of VirtualFluids. VirtualFluids is free software: you can
17// redistribute it and/or modify it under the terms of the GNU General Public
18// License as published by the Free Software Foundation, either version 3 of
19// the License, or (at your option) any later version.
20//
21// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
22// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
23// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
24// for more details.
25//
26// SPDX-License-Identifier: GPL-3.0-or-later
27// SPDX-FileCopyrightText: Copyright © VirtualFluids Project contributors, see AUTHORS.md in root folder
28//
33//=======================================================================================
34
35#ifndef INTERACTOR3D_H
36#define INTERACTOR3D_H
37
38#include <PointerDefinitions.h>
39#include <vector>
40
41#include "UbSystem.h"
42#include "UbTuple.h"
43#include "lbm/constants/D3Q27.h"
44
45class Block3D;
46class Grid3D;
47class GbObject3D;
48
50class Interactor3D : public enableSharedFromThis<Interactor3D>
51{
52public:
60
61 virtual ~Interactor3D();
62 virtual void initInteractor(const real &timestep = 0) = 0;
63 virtual void updateInteractor(const real &timestep = 0) = 0;
64
65 void setSolidBlock(SPtr<Block3D> block);
66 void setBCBlock(SPtr<Block3D> block);
67
68 virtual UbTupleDouble3 getForces();
69
72
73 bool isSolid() { return ub_system::bitCheck(this->type, SOLID); }
76 bool isMoveable() { return ub_system::bitCheck(this->type, MOVEABLE); }
77
78 SPtr<Grid3D> getGrid3D() const { return grid.lock(); }
79 void setGrid3D(SPtr<Grid3D> grid) { this->grid = grid; }
80 virtual SPtr<GbObject3D> getGbObject3D() const { return geoObject3D; }
82 virtual std::vector<SPtr<Block3D>> &getBcBlocks() { return this->bcBlocks; }
83 virtual void removeBcBlocks() { this->bcBlocks.clear(); }
84 virtual std::vector<SPtr<Block3D>> &getSolidBlockSet() { return this->solidBlocks; }
85 virtual void removeSolidBlocks() { this->solidBlocks.clear(); }
86
87 void setID(int id);
88 int getID();
89
90 void setActive();
91 void setInactive();
92 bool isActive();
93
94protected:
97
101 bool arePointsInsideGeoObject(real minX1, real minX2, real minX3, real maxX1, real maxX2, real maxX3,
102 real delta);
103
107 bool arePointsOutsideGeoObject(real minX1, real minX2, real minX3, real maxX1, real maxX2, real maxX3,
108 real delta);
109
113 bool arePointsCuttingGeoObject(real minX1, real minX2, real minX3, real maxX1, real maxX2, real maxX3,
114 real delta);
115
116 bool isBlockOutsideGeoObject(real minX1, real minX2, real minX3, real maxX1, real maxX2, real maxX3,
117 real delta);
118 bool isBlockInsideGeoObject(real minX1, real minX2, real minX3, real maxX1, real maxX2, real maxX3,
119 real delta);
120 bool isBlockCuttingGeoObject(real minX1, real minX2, real minX3, real maxX1, real maxX2, real maxX3,
121 real delta);
122
123 void updateBlocks();
124
127 int type;
128
129 std::vector<SPtr<Block3D>> bcBlocks;
130 std::vector<SPtr<Block3D>> solidBlocks;
132
133 bool active;
134 int id;
135
136public:
137 static const int SOLID; //= (1<<0); //1
138 static const int INVERSESOLID; //= (1<<1); //2
139 static const int TIMEDEPENDENT; //= (1<<2); //4 //zeitlich
140 static const int FLUID; //= (1<<3); //8
141 static const int MOVEABLE; //= (1<<4); //16 // geometrisch
142 static const int CHANGENOTNECESSARY; //= (1<<5); //32
143
144private:
145};
146
147#endif
148
A class implements a block structure.
Definition Block3D.h:49
This Interface provides basic 3D geometry objects methods.
Definition GbObject3D.h:64
A class implements block grid.
Definition Grid3D.h:60
A base class for grid generation.
WPtr< Grid3D > grid
virtual void removeBcBlocks()
SPtr< GbObject3D > geoObject3D
bool isTimeDependent()
void setTimeDependent()
void setSolid()
std::vector< SPtr< Block3D > > solidBlocks
virtual std::vector< SPtr< Block3D > > & getSolidBlockSet()
virtual void initInteractor(const real &timestep=0)=0
void setMoveable()
virtual bool setDifferencesToGbObject3D(const SPtr< Block3D >)=0
bool isInverseSolid()
void unsetTimeDependent()
virtual SPtr< GbObject3D > getGbObject3D() const
SPtr< Grid3D > getGrid3D() const
std::vector< SPtr< Block3D > > bcBlocks
virtual std::vector< SPtr< Block3D > > & getBcBlocks()
void setGrid3D(SPtr< Grid3D > grid)
virtual void removeSolidBlocks()
bool isMoveable()
A class implements a tuple.
Definition UbTuple.h:477
std::shared_ptr< T > SPtr
float real
Definition DataTypes.h:42
std::enable_shared_from_this< T > enableSharedFromThis
bool arePointsCuttingGeoObject(real minX1, real minX2, real minX3, real maxX1, real maxX2, real maxX3, real delta)
void setBCBlock(SPtr< Block3D > block)
static const int CHANGENOTNECESSARY
static const int TIMEDEPENDENT
static const int MOVEABLE
static const int FLUID
virtual void updateInteractor(const real &timestep=0)=0
static const int INVERSESOLID
virtual UbTupleDouble3 getForces()
bool isBlockOutsideGeoObject(real minX1, real minX2, real minX3, real maxX1, real maxX2, real maxX3, real delta)
void setID(int id)
virtual ~Interactor3D()
void setSolidBlock(SPtr< Block3D > block)
bool arePointsInsideGeoObject(real minX1, real minX2, real minX3, real maxX1, real maxX2, real maxX3, real delta)
bool isBlockCuttingGeoObject(real minX1, real minX2, real minX3, real maxX1, real maxX2, real maxX3, real delta)
bool isBlockInsideGeoObject(real minX1, real minX2, real minX3, real maxX1, real maxX2, real maxX3, real delta)
static const int SOLID
bool arePointsOutsideGeoObject(real minX1, real minX2, real minX3, real maxX1, real maxX2, real maxX3, real delta)
void unsetBit(T &value, const T &bitmask)
Definition UbSystem.h:164
void setBit(T &value, const T &bitmask)
Definition UbSystem.h:158
bool bitCheck(const T &value, const T &bitmask)
Definition UbSystem.h:151