Skip to content
Snippets Groups Projects
Commit c1aa8c8b authored by Henrik Asmuth's avatar Henrik Asmuth
Browse files

Add option for Side with q!=0.5

To be used in StressBC which gets improved results for q<0.5. q=0.5 still set as default argument for all other BCs
parent e1174b91
No related branches found
No related tags found
1 merge request!187Add eddy-viscosity in refinments and updates in StressBC
......@@ -350,7 +350,8 @@ void multipleLevel(const std::string& configPath)
gridBuilder->setStressBoundaryCondition(SideType::MZ,
0.0, 0.0, 1.0, // wall normals
samplingOffset, z0, dx); // wall model settinng
samplingOffset, z0, dx, // wall model settinng
0.5f); // q
para->setHasWallModelMonitor(true);
gridBuilder->setSlipBoundaryCondition(SideType::PZ, 0.0f, 0.0f, -1.0f);
......
......@@ -67,7 +67,7 @@ class LevelGridBuilder(GridBuilder):
def set_precursor_boundary_condition(self, side_type: pyfluids.bindings.gpu.SideType, file_collection: pyfluids.bindings.gpu.VelocityFileCollection, n_t_read: int, velocity_x: float = ..., velocity_y: float = ..., velocity_z: float = ..., file_level_to_grid_level_map: List[int] = ...) -> None: ...
def set_pressure_boundary_condition(self, side_type: pyfluids.bindings.gpu.SideType, rho: float) -> None: ...
def set_slip_boundary_condition(self, side_type: pyfluids.bindings.gpu.SideType, normal_x: float, normal_y: float, normal_z: float) -> None: ...
def set_stress_boundary_condition(self, side_type: pyfluids.bindings.gpu.SideType, normal_x: float, normal_y: float, normal_z: float, sampling_offset: int, z0: float, dx: float) -> None: ...
def set_stress_boundary_condition(self, side_type: pyfluids.bindings.gpu.SideType, normal_x: float, normal_y: float, normal_z: float, sampling_offset: int, z0: float, dx: float, q: float) -> None: ...
def set_velocity_boundary_condition(self, side_type: pyfluids.bindings.gpu.SideType, vx: float, vy: float, vz: float) -> None: ...
class MultipleGridBuilder(LevelGridBuilder):
......
......@@ -92,7 +92,7 @@ namespace grid_generator
.def("set_periodic_boundary_condition", &LevelGridBuilder::setPeriodicBoundaryCondition, py::arg("periodic_x"), py::arg("periodic_y"), py::arg("periodic_z"))
.def("set_no_slip_boundary_condition", &LevelGridBuilder::setNoSlipBoundaryCondition, py::arg("side_type"))
.def("set_precursor_boundary_condition", &LevelGridBuilder::setPrecursorBoundaryCondition, py::arg("side_type"), py::arg("file_collection"), py::arg("n_t_read"), py::arg("velocity_x")=0.0f, py::arg("velocity_y")=0.0f, py::arg("velocity_z")=0.0f, py::arg("file_level_to_grid_level_map")=std::vector<uint>())
.def("set_stress_boundary_condition", &LevelGridBuilder::setStressBoundaryCondition, py::arg("side_type"), py::arg("normal_x"), py::arg("normal_y"), py::arg("normal_z"), py::arg("sampling_offset"), py::arg("z0"), py::arg("dx"));
.def("set_stress_boundary_condition", &LevelGridBuilder::setStressBoundaryCondition, py::arg("side_type"), py::arg("normal_x"), py::arg("normal_y"), py::arg("normal_z"), py::arg("sampling_offset"), py::arg("z0"), py::arg("dx"), py::arg("q"));
py::class_<MultipleGridBuilder, LevelGridBuilder, std::shared_ptr<MultipleGridBuilder>>(gridGeneratorModule, "MultipleGridBuilder")
.def_static("make_shared", &MultipleGridBuilder::makeShared, py::return_value_policy::reference, py::arg("grid_factory"))
......
......@@ -53,7 +53,7 @@ std::vector<real> Side::getNormal()
}
void Side::addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, std::string coord, real constant,
real startInner, real endInner, real startOuter, real endOuter)
real startInner, real endInner, real startOuter, real endOuter, real q)
{
for (real v2 = startOuter; v2 <= endOuter; v2 += grid->getDelta())
{
......@@ -80,7 +80,7 @@ void Side::addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition
setPressureNeighborIndices(boundaryCondition, grid, index);
setStressSamplingIndices(boundaryCondition, grid, index);
setQs(grid, boundaryCondition, index);
setQs(grid, boundaryCondition, index, q);
boundaryCondition->patches.push_back(0);
}
......@@ -136,7 +136,7 @@ void Side::setStressSamplingIndices(SPtr<BoundaryCondition> boundaryCondition, S
}
}
void Side::setQs(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, uint index)
void Side::setQs(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, uint index, real q)
{
std::vector<real> qNode(grid->getEndDirection() + 1);
......@@ -181,7 +181,7 @@ void Side::setQs(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition, uin
grid->getFieldEntry(neighborIndex) == vf::gpu::STOPPER_OUT_OF_GRID ||
grid->getFieldEntry(neighborIndex) == vf::gpu::STOPPER_SOLID) &&
alignedWithNormal )
qNode[dir] = 0.5;
qNode[dir] = q;
else
qNode[dir] = -1.0;
}
......@@ -201,7 +201,7 @@ uint Side::getIndex(SPtr<Grid> grid, std::string coord, real constant, real v1,
}
void Geometry::addIndices(std::vector<SPtr<Grid> > grids, uint level, SPtr<BoundaryCondition> boundaryCondition)
void Geometry::addIndices(std::vector<SPtr<Grid> > grids, uint level, SPtr<BoundaryCondition> boundaryCondition, real q)
{
auto geometryBoundaryCondition = std::dynamic_pointer_cast<GeometryBoundaryCondition>(boundaryCondition);
......@@ -231,7 +231,7 @@ void Geometry::addIndices(std::vector<SPtr<Grid> > grids, uint level, SPtr<Bound
if( qNode[dir] < -0.5 && ( grids[level]->getFieldEntry(neighborIndex) == vf::gpu::STOPPER_OUT_OF_GRID_BOUNDARY ||
grids[level]->getFieldEntry(neighborIndex) == vf::gpu::STOPPER_OUT_OF_GRID ||
grids[level]->getFieldEntry(neighborIndex) == vf::gpu::STOPPER_SOLID ) )
qNode[dir] = 0.5;
qNode[dir] = q;
}
geometryBoundaryCondition->indices.push_back(index);
......@@ -242,7 +242,7 @@ void Geometry::addIndices(std::vector<SPtr<Grid> > grids, uint level, SPtr<Bound
void MX::addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<BoundaryCondition> boundaryCondition)
void MX::addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<BoundaryCondition> boundaryCondition, real q)
{
real startInner = grid[level]->getStartY();
real endInner = grid[level]->getEndY();
......@@ -254,11 +254,11 @@ void MX::addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<BoundaryCond
if( coordinateNormal > grid[0]->getStartX() + grid[0]->getDelta() ) return;
Side::addIndices(grid[level], boundaryCondition, "x", coordinateNormal, startInner, endInner, startOuter, endOuter);
Side::addIndices(grid[level], boundaryCondition, "x", coordinateNormal, startInner, endInner, startOuter, endOuter, q);
}
void PX::addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<BoundaryCondition> boundaryCondition)
void PX::addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<BoundaryCondition> boundaryCondition, real q)
{
real startInner = grid[level]->getStartY();
real endInner = grid[level]->getEndY();
......@@ -270,10 +270,10 @@ void PX::addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<BoundaryCond
if( coordinateNormal < grid[0]->getEndX() - grid[0]->getDelta() ) return;
Side::addIndices(grid[level], boundaryCondition, "x", coordinateNormal, startInner, endInner, startOuter, endOuter);
Side::addIndices(grid[level], boundaryCondition, "x", coordinateNormal, startInner, endInner, startOuter, endOuter, q);
}
void MY::addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<BoundaryCondition> boundaryCondition)
void MY::addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<BoundaryCondition> boundaryCondition, real q)
{
real startInner = grid[level]->getStartX();
real endInner = grid[level]->getEndX();
......@@ -285,11 +285,11 @@ void MY::addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<BoundaryCond
if( coordinateNormal > grid[0]->getStartY() + grid[0]->getDelta() ) return;
Side::addIndices(grid[level], boundaryCondition, "y", coordinateNormal, startInner, endInner, startOuter, endOuter);
Side::addIndices(grid[level], boundaryCondition, "y", coordinateNormal, startInner, endInner, startOuter, endOuter, q);
}
void PY::addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<BoundaryCondition> boundaryCondition)
void PY::addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<BoundaryCondition> boundaryCondition, real q)
{
real startInner = grid[level]->getStartX();
real endInner = grid[level]->getEndX();
......@@ -301,11 +301,11 @@ void PY::addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<BoundaryCond
if( coordinateNormal < grid[0]->getEndY() - grid[0]->getDelta() ) return;
Side::addIndices(grid[level], boundaryCondition, "y", coordinateNormal, startInner, endInner, startOuter, endOuter);
Side::addIndices(grid[level], boundaryCondition, "y", coordinateNormal, startInner, endInner, startOuter, endOuter, q);
}
void MZ::addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<BoundaryCondition> boundaryCondition)
void MZ::addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<BoundaryCondition> boundaryCondition, real q)
{
real startInner = grid[level]->getStartX();
real endInner = grid[level]->getEndX();
......@@ -317,10 +317,10 @@ void MZ::addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<BoundaryCond
if( coordinateNormal > grid[0]->getStartZ() + grid[0]->getDelta() ) return;
Side::addIndices(grid[level], boundaryCondition, "z", coordinateNormal, startInner, endInner, startOuter, endOuter);
Side::addIndices(grid[level], boundaryCondition, "z", coordinateNormal, startInner, endInner, startOuter, endOuter, q);
}
void PZ::addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<BoundaryCondition> boundaryCondition)
void PZ::addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<BoundaryCondition> boundaryCondition, real q)
{
real startInner = grid[level]->getStartX();
real endInner = grid[level]->getEndX();
......@@ -332,5 +332,5 @@ void PZ::addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<BoundaryCond
if( coordinateNormal < grid[0]->getEndZ() - grid[0]->getDelta() ) return;
Side::addIndices(grid[level], boundaryCondition, "z", coordinateNormal, startInner, endInner, startOuter, endOuter);
Side::addIndices(grid[level], boundaryCondition, "z", coordinateNormal, startInner, endInner, startOuter, endOuter, q);
}
......@@ -65,7 +65,7 @@ class Side
{
public:
virtual ~Side() = default;
virtual void addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<gg::BoundaryCondition> boundaryCondition) = 0;
virtual void addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<gg::BoundaryCondition> boundaryCondition, real q = 0.5) = 0;
virtual int getCoordinate() const = 0;
virtual int getDirection() const = 0;
......@@ -76,13 +76,13 @@ public:
protected:
void addIndices(SPtr<Grid> grid, SPtr<gg::BoundaryCondition> boundaryCondition, std::string coord, real constant,
real startInner, real endInner, real startOuter, real endOuter);
real startInner, real endInner, real startOuter, real endOuter, real q);
static void setPressureNeighborIndices(SPtr<gg::BoundaryCondition> boundaryCondition, SPtr<Grid> grid, const uint index);
static void setStressSamplingIndices(SPtr<gg::BoundaryCondition> boundaryCondition, SPtr<Grid> grid, const uint index);
void setQs(SPtr<Grid> grid, SPtr<gg::BoundaryCondition> boundaryCondition, uint index);
void setQs(SPtr<Grid> grid, SPtr<gg::BoundaryCondition> boundaryCondition, uint index, real q);
private:
static uint getIndex(SPtr<Grid> grid, std::string coord, real constant, real v1, real v2);
......@@ -91,7 +91,7 @@ private:
class Geometry : public Side
{
public:
void addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<gg::BoundaryCondition> boundaryCondition) override;
void addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<gg::BoundaryCondition> boundaryCondition, real q = 0.5) override;
int getCoordinate() const override
{
......@@ -112,7 +112,7 @@ public:
class MX : public Side
{
public:
void addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<gg::BoundaryCondition> boundaryCondition) override;
void addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<gg::BoundaryCondition> boundaryCondition, real q = 0.5) override;
int getCoordinate() const override
{
......@@ -133,7 +133,7 @@ public:
class PX : public Side
{
public:
void addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<gg::BoundaryCondition> boundaryCondition) override;
void addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<gg::BoundaryCondition> boundaryCondition, real q = 0.5) override;
int getCoordinate() const override
{
......@@ -155,7 +155,7 @@ public:
class MY : public Side
{
public:
void addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<gg::BoundaryCondition> boundaryCondition) override;
void addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<gg::BoundaryCondition> boundaryCondition, real q = 0.5) override;
int getCoordinate() const override
{
......@@ -176,7 +176,7 @@ public:
class PY : public Side
{
public:
void addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<gg::BoundaryCondition> boundaryCondition) override;
void addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<gg::BoundaryCondition> boundaryCondition, real q = 0.5) override;
int getCoordinate() const override
{
......@@ -198,7 +198,7 @@ public:
class MZ : public Side
{
public:
void addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<gg::BoundaryCondition> boundaryCondition) override;
void addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<gg::BoundaryCondition> boundaryCondition, real q = 0.5) override;
int getCoordinate() const override
{
......@@ -219,7 +219,7 @@ public:
class PZ : public Side
{
public:
void addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<gg::BoundaryCondition> boundaryCondition) override;
void addIndices(std::vector<SPtr<Grid> > grid, uint level, SPtr<gg::BoundaryCondition> boundaryCondition, real q = 0.5) override;
int getCoordinate() const override
{
......
......@@ -127,7 +127,7 @@ void LevelGridBuilder::setSlipGeometryBoundaryCondition(real normalX, real norma
//!
void LevelGridBuilder::setStressBoundaryCondition( SideType sideType,
real nomalX, real normalY, real normalZ,
uint samplingOffset, real z0, real dx)
uint samplingOffset, real z0, real dx, real q)
{
for (uint level = 0; level < getNumberOfGridLevels(); level++)
{
......@@ -135,7 +135,7 @@ void LevelGridBuilder::setStressBoundaryCondition( SideType sideType,
auto side = SideFactory::make(sideType);
stressBoundaryCondition->side = side;
stressBoundaryCondition->side->addIndices(grids, level, stressBoundaryCondition);
stressBoundaryCondition->side->addIndices(grids, level, stressBoundaryCondition, q);
stressBoundaryCondition->fillStressNormalLists();
stressBoundaryCondition->fillSamplingOffsetLists();
......
......@@ -81,7 +81,7 @@ public:
GRIDGENERATOR_EXPORT ~LevelGridBuilder() override;
GRIDGENERATOR_EXPORT void setSlipBoundaryCondition(SideType sideType, real nomalX, real normalY, real normalZ);
GRIDGENERATOR_EXPORT void setStressBoundaryCondition(SideType sideType, real nomalX, real normalY, real normalZ, uint samplingOffset, real z0, real dx);
GRIDGENERATOR_EXPORT void setStressBoundaryCondition(SideType sideType, real nomalX, real normalY, real normalZ, uint samplingOffset, real z0, real dx, real q = 0.5);
GRIDGENERATOR_EXPORT void setVelocityBoundaryCondition(SideType sideType, real vx, real vy, real vz);
GRIDGENERATOR_EXPORT void setPressureBoundaryCondition(SideType sideType, real rho);
GRIDGENERATOR_EXPORT void setPeriodicBoundaryCondition(bool periodic_X, bool periodic_Y, bool periodic_Z);
......
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