Skip to content
Snippets Groups Projects
Commit 0d8b9a9e authored by Soeren Peters's avatar Soeren Peters
Browse files

- add pressure

parent 3159b523
No related branches found
No related tags found
No related merge requests found
......@@ -69,6 +69,8 @@ public:
virtual uint getVelocitySize(int level) const = 0;
virtual void getVelocityValues(real* vx, real* vy, real* vz, int* indices, int level) const = 0;
virtual uint getPressureSize(int level) const = 0;
virtual void getPressureValues(real* rho, int* indices, int level) const = 0;
virtual void getVelocityQs(real* qs[27], int level) const = 0;
};
......
......@@ -48,13 +48,25 @@ std::shared_ptr<LevelGridBuilder> LevelGridBuilder::makeShared(Device device, co
return SPtr<LevelGridBuilder>(new LevelGridBuilder(device, d3qxx));
}
void LevelGridBuilder::setVelocityBoundaryCondition(SPtr<Side> side, SPtr<VelocityBoundaryCondition> boundaryCondition)
void LevelGridBuilder::setVelocityBoundaryCondition(SPtr<Side> side, real vx, real vy, real vz)
{
SPtr<VelocityBoundaryCondition> velocityBoundaryCondition = VelocityBoundaryCondition::make(vx, vy, vz);
side->setPeriodicy(grids[0]);
velocityBoundaryConditions.push_back(boundaryCondition);
boundaryCondition->side = side;
velocityBoundaryConditions.push_back(velocityBoundaryCondition);
velocityBoundaryCondition->side = side;
}
void LevelGridBuilder::setPressureBoundaryCondition(SPtr<Side> side, real rho)
{
SPtr<PressureBoundaryCondition> pressureBoundaryCondition = PressureBoundaryCondition::make(rho);
side->setPeriodicy(grids[0]);
pressureBoundaryConditions.push_back(pressureBoundaryCondition);
pressureBoundaryCondition->side = side;
}
void LevelGridBuilder::copyDataFromGpu()
{
for (const auto grid : grids)
......@@ -230,6 +242,30 @@ void LevelGridBuilder::getVelocityValues(real* vx, real* vy, real* vz, int* indi
}
}
uint LevelGridBuilder::getPressureSize(int level) const
{
uint size = 0;
for (auto boundaryCondition : this->pressureBoundaryConditions)
{
size += boundaryCondition->indices.size();
}
return size;
}
void LevelGridBuilder::getPressureValues(real* rho, int* indices, int level) const
{
int allIndicesCounter = 0;
for (auto boundaryCondition : this->pressureBoundaryConditions)
{
for (int i = 0; i < boundaryCondition->indices.size(); i++)
{
indices[allIndicesCounter] = boundaryCondition->indices[i];
rho[allIndicesCounter] = boundaryCondition->rho;
allIndicesCounter++;
}
}
}
void LevelGridBuilder::getVelocityQs(real* qs[27], int level) const
{
int allIndicesCounter = 0;
......
......@@ -32,6 +32,22 @@ public:
};
class PressureBoundaryCondition : public BoundaryCondition
{
public:
static SPtr<PressureBoundaryCondition> make(real rho)
{
return SPtr<PressureBoundaryCondition>(new PressureBoundaryCondition(rho));
}
SPtr<Side> side;
real rho;
private:
PressureBoundaryCondition(real rho) : rho(rho)
{
}
};
class VelocityBoundaryCondition : public BoundaryCondition
{
......@@ -238,7 +254,8 @@ public:
VF_PUBLIC void copyDataFromGpu();
VF_PUBLIC virtual ~LevelGridBuilder();
VF_PUBLIC void setVelocityBoundaryCondition(SPtr<Side> side, SPtr<VelocityBoundaryCondition> boundaryCondition);
VF_PUBLIC void setVelocityBoundaryCondition(SPtr<Side> side, real vx, real vy, real vz);
VF_PUBLIC void setPressureBoundaryCondition(SPtr<Side> side, real rho);
VF_PUBLIC virtual std::shared_ptr<Grid> getGrid(int level, int box);
......@@ -266,7 +283,8 @@ public:
VF_PUBLIC uint getVelocitySize(int level) const;
VF_PUBLIC virtual void getVelocityValues(real* vx, real* vy, real* vz, int* indices, int level) const;
VF_PUBLIC virtual void getVelocityQs(real* qs[27], int level) const;
VF_PUBLIC uint getPressureSize(int level) const override;
VF_PUBLIC void getPressureValues(real* rho, int* indices, int level) const override;
VF_PUBLIC virtual void setPressValues(real* RhoBC, int* kN, int channelSide, int level) const;
......@@ -278,6 +296,7 @@ protected:
std::vector<std::vector<std::vector<real> > > Qs;
std::vector<std::string> channelBoundaryConditions;
std::vector<SPtr<VelocityBoundaryCondition> > velocityBoundaryConditions;
std::vector<SPtr<PressureBoundaryCondition> > pressureBoundaryConditions;
//std::map<Side, BoundaryCondition> channelBoundaryConditionTypes;
......@@ -313,7 +332,7 @@ public:
VF_PUBLIC void setOffsetFC(real* xOffCf, real* yOffCf, real* zOffCf, int level) override;
VF_PUBLIC void setOffsetCF(real* xOffFc, real* yOffFc, real* zOffFc, int level) override;
};
#endif
......
......@@ -277,19 +277,14 @@ void multipleLevel(const std::string& configPath)
gridBuilder->addGeometry(triangularMesh);
//SPtr<VelocityBoundaryCondition> bcVelocity1 = VelocityBoundaryCondition::make(0.01, 0.0, 0.0);
//SPtr<VelocityBoundaryCondition> bcVelocity2 = VelocityBoundaryCondition::make(0.01, 0.0, 0.0);
//SPtr<VelocityBoundaryCondition> bcVelocity3 = VelocityBoundaryCondition::make(0.01, 0.0, 0.0);
//SPtr<VelocityBoundaryCondition> bcVelocity4 = VelocityBoundaryCondition::make(0.01, 0.0, 0.0);
//SPtr<VelocityBoundaryCondition> bcVelocity5 = VelocityBoundaryCondition::make(0.01, 0.0, 0.0);
//SPtr<VelocityBoundaryCondition> bcVelocity6 = VelocityBoundaryCondition::make(0.01, 0.0, 0.0);
//gridBuilder->setVelocityBoundaryCondition(SPtr<Side>(new MX()), bcVelocity1);
//gridBuilder->setVelocityBoundaryCondition(SPtr<Side>(new PX()), bcVelocity2);
//gridBuilder->setVelocityBoundaryCondition(SPtr<Side>(new MY()), bcVelocity3);
//gridBuilder->setVelocityBoundaryCondition(SPtr<Side>(new PY()), bcVelocity4);
//gridBuilder->setVelocityBoundaryCondition(SPtr<Side>(new MZ()), bcVelocity5);
//gridBuilder->setVelocityBoundaryCondition(SPtr<Side>(new PZ()), bcVelocity6);
gridBuilder->setVelocityBoundaryCondition(SPtr<Side>(new MX()), 0.01, 0.0, 0.0);
gridBuilder->setVelocityBoundaryCondition(SPtr<Side>(new PX()), 0.01, 0.0, 0.0);
gridBuilder->setVelocityBoundaryCondition(SPtr<Side>(new MY()), 0.01, 0.0, 0.0);
gridBuilder->setVelocityBoundaryCondition(SPtr<Side>(new PY()), 0.01, 0.0, 0.0);
gridBuilder->setVelocityBoundaryCondition(SPtr<Side>(new MZ()), 0.01, 0.0, 0.0);
gridBuilder->setVelocityBoundaryCondition(SPtr<Side>(new PZ()), 0.01, 0.0, 0.0);
//gridBuilder->setBoundaryCondition("geometry", BoundaryCondition::VELOCITY);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment