Skip to content
Snippets Groups Projects
Commit 666a47bb authored by Martin Schönherr's avatar Martin Schönherr
Browse files

implements flags for lmb and gks, not working

parent 757f5e47
No related branches found
No related tags found
No related merge requests found
Showing
with 119 additions and 41 deletions
......@@ -2,6 +2,9 @@
#define GRID_H
#include "GridGenerator/global.h"
#include "core/LbmOrGks.h"
#include "Cell.h"
#include "geometries/Vertex/Vertex.h"
......@@ -67,7 +70,7 @@ public:
HOST virtual void inital() = 0;
HOST virtual void findGridInterface(SPtr<Grid> grid) = 0;
HOST virtual void findGridInterface(SPtr<Grid> grid, LbmOrGks lbmOrGks) = 0;
HOST virtual void mesh(TriangularMesh& geometry) = 0;
HOST virtual void mesh(Object* object) = 0;
......
......@@ -323,7 +323,7 @@ std::vector<SPtr<Grid> > MultipleGridBuilder::getGrids() const
return this->grids;
}
void MultipleGridBuilder::buildGrids()
void MultipleGridBuilder::buildGrids(LbmOrGks lbmOrGks)
{
for (auto grid : grids)
grid->inital();
......@@ -336,14 +336,14 @@ void MultipleGridBuilder::buildGrids()
for (size_t i = 0; i < grids.size() - 1; i++)
grids[i]->findGridInterface(grids[i + 1]);
grids[i]->findGridInterface(grids[i + 1], lbmOrGks);
if (lbmOrGks == LBM) {
for (size_t i = 0; i < grids.size() - 1; i++)
grids[i]->findSparseIndices(grids[i + 1]);
for (size_t i = 0; i < grids.size() - 1; i++)
grids[i]->findSparseIndices(grids[i + 1]);
grids[grids.size() - 1]->findSparseIndices(nullptr);
grids[grids.size() - 1]->findSparseIndices(nullptr);
}
}
......
......@@ -6,8 +6,9 @@
#include <vector>
#include <array>
#include "LevelGridBuilder.h"
#include "core/LbmOrGks.h"
#include "LevelGridBuilder.h"
#include "../GridFactory.h"
......@@ -41,7 +42,7 @@ public:
VF_PUBLIC real getEndZ(uint level) const;
VF_PUBLIC std::vector<SPtr<Grid> > getGrids() const;
VF_PUBLIC void buildGrids();
VF_PUBLIC void buildGrids(LbmOrGks lbmOrGks);
VF_PUBLIC void writeGridsToVtk(const std::string& path) const;
......
......@@ -91,7 +91,7 @@ TEST(MultipleGridBuilderTest, everyExceptTheFinestGrid_shouldHaveAGridInterface)
gridBuilder->addCoarseGrid(0.0, 0.0, 0.0, 15.0, 15.0, 15.0, 1.0);
gridBuilder->addGrid(new Cuboid(7.0, 7.0, 7.0, 10.0, 10.0, 10.0), 2);
gridBuilder->buildGrids();
gridBuilder->buildGrids(LBM);
auto grid0 = std::dynamic_pointer_cast<GridSpy>(gridBuilder->getGrid(0));
auto grid1 = std::dynamic_pointer_cast<GridSpy>(gridBuilder->getGrid(1));
......@@ -110,7 +110,7 @@ TEST(MultipleGridBuilderTest, afterCreatingGridInterface_FineGridsShouldNotBeHav
gridBuilder->addCoarseGrid(0.0, 0.0, 0.0, 15.0, 15.0, 15.0, 1.0);
gridBuilder->addGrid(new Cuboid(7.0, 7.0, 7.0, 10.0, 10.0, 10.0), 2);
gridBuilder->buildGrids();
gridBuilder->buildGrids(LBM);
auto grid1 = std::dynamic_pointer_cast<GridSpy>(gridBuilder->getGrid(1));
auto grid2 = std::dynamic_pointer_cast<GridSpy>(gridBuilder->getGrid(2));
......
......@@ -586,14 +586,17 @@ HOSTDEVICE int GridImp::getSparseIndex(const real &x, const real &y, const real
// --------------------------------------------------------- //
// Find Interface //
// --------------------------------------------------------- //
HOST void GridImp::findGridInterface(SPtr<Grid> finerGrid)
HOST void GridImp::findGridInterface(SPtr<Grid> finerGrid, LbmOrGks lbmOrGks)
{
gridStrategy->findGridInterface(shared_from_this(), std::static_pointer_cast<GridImp>(finerGrid));
gridStrategy->findGridInterface(shared_from_this(), std::static_pointer_cast<GridImp>(finerGrid), lbmOrGks);
}
HOSTDEVICE void GridImp::findGridInterfaceCF(uint index, GridImp& finerGrid)
HOSTDEVICE void GridImp::findGridInterfaceCF(uint index, GridImp& finerGrid, LbmOrGks lbmOrGks)
{
gridInterface->findInterfaceCF(index, this, &finerGrid);
if(lbmOrGks == LBM)
gridInterface->findInterfaceCF(index, this, &finerGrid);
else if (lbmOrGks == GKS)
gridInterface->findInterfaceCF_GKS(index, this, &finerGrid);
}
HOSTDEVICE void GridImp::findGridInterfaceFC(uint index, GridImp& finerGrid)
......
......@@ -4,6 +4,8 @@
#include "GridGenerator/global.h"
#include "distributions/Distribution.h"
#include "core/LbmOrGks.h"
#include "Grid.h"
#include "Cell.h"
#include "Field.h"
......@@ -80,7 +82,7 @@ public:
HOSTDEVICE int transCoordToIndex(const real &x, const real &y, const real &z) const override;
HOSTDEVICE void transIndexToCoords(int index, real &x, real &y, real &z) const override;
HOST void findGridInterface(SPtr<Grid> grid) override;
HOST virtual void findGridInterface(SPtr<Grid> grid, LbmOrGks lbmOrGks) override;
HOST void freeMemory() override;
HOST uint getLevel(real levelNull) const;
......@@ -99,7 +101,7 @@ public:
HOSTDEVICE void findEndOfGridStopperNode(uint index);
HOSTDEVICE void findSolidStopperNode(uint index);
HOSTDEVICE void findGridInterfaceCF(uint index, GridImp& finerGrid);
HOSTDEVICE void findGridInterfaceCF(uint index, GridImp& finerGrid, LbmOrGks lbmOrGks);
HOSTDEVICE void findGridInterfaceFC(uint index, GridImp& finerGrid);
HOSTDEVICE void findOverlapStopper(uint index, GridImp& finerGrid);
......
......@@ -49,6 +49,29 @@ void GridInterface::findInterfaceCF(const uint& indexOnCoarseGrid, GridImp* coar
}
}
void GridInterface::findInterfaceCF_GKS(const uint& indexOnCoarseGrid, GridImp* coarseGrid, GridImp* fineGrid)
{
const bool nodeOnCoarseGridIsFluid = coarseGrid->getField().isFluid(indexOnCoarseGrid);
if (!nodeOnCoarseGridIsFluid)
return;
real x, y, z;
coarseGrid->transIndexToCoords(indexOnCoarseGrid, x, y, z);
for (const auto dir : coarseGrid->distribution)
{
const uint indexOnFineGrid = fineGrid->transCoordToIndex(x + 0.25 * dir[0] * coarseGrid->getDelta(),
y + 0.25 * dir[1] * coarseGrid->getDelta(),
z + 0.25 * dir[2] * coarseGrid->getDelta());
if (indexOnFineGrid != -1 && fineGrid->getField().is(indexOnFineGrid, STOPPER_END_OF_GRID))
{
coarseGrid->getField().setFieldEntry(indexOnCoarseGrid, FLUID_CFC);
break;
}
}
}
void GridInterface::findInterfaceFC(const uint& indexOnCoarseGrid, GridImp* coarseGrid, GridImp* fineGrid)
{
const bool nodeOnCoarseGridIsFluid = coarseGrid->getField().isFluid(indexOnCoarseGrid);
......
......@@ -16,7 +16,8 @@ public:
HOSTDEVICE VF_PUBLIC ~GridInterface();
HOSTDEVICE void VF_PUBLIC findInterfaceCF(const uint& indexOnCoarseGrid, GridImp* coarseGrid, GridImp* fineGrid);
HOSTDEVICE void VF_PUBLIC findInterfaceFC(const uint& indexOnCoarseGrid, GridImp* coarseGrid, GridImp* fineGrid);
HOSTDEVICE void VF_PUBLIC findInterfaceCF_GKS(const uint& indexOnCoarseGrid, GridImp* coarseGrid, GridImp* fineGrid);
HOSTDEVICE void VF_PUBLIC findInterfaceFC(const uint& indexOnCoarseGrid, GridImp* coarseGrid, GridImp* fineGrid);
HOSTDEVICE void VF_PUBLIC findOverlapStopper(const uint& indexOnCoarseGrid, GridImp* coarseGrid, GridImp* fineGrid);
HOSTDEVICE void VF_PUBLIC findForGridInterfaceSparseIndexCF(GridImp* coarseGrid, GridImp* fineGrid, uint index);
......
......@@ -55,7 +55,7 @@ public:
virtual void setPeriodicity(bool periodicityX, bool periodicityY, bool periodicityZ) override {}
virtual void freeMemory() override {}
virtual void findGridInterface(SPtr<Grid> grid) override {}
virtual void findGridInterface(SPtr<Grid> grid, LbmOrGks lbmOrGks) override {}
virtual void mesh(TriangularMesh& geometry) override {}
virtual int transCoordToIndex(const real& x, const real& y, const real& z) const override { return 0; }
virtual int* getNeighborsX() const override { return nullptr; }
......@@ -133,7 +133,7 @@ public:
this->periodicityZ = periodicityZ;
}
virtual void findGridInterface(SPtr<Grid> grid) override
virtual void findGridInterface(SPtr<Grid> grid, LbmOrGks lbmOrGks) override
{
_hasGridInterface = true;
}
......
......@@ -98,7 +98,7 @@ void GridCpuStrategy::findQs(SPtr<GridImp> grid, TriangularMesh &geom)
}
void GridCpuStrategy::findGridInterface(SPtr<GridImp> grid, SPtr<GridImp> fineGrid)
void GridCpuStrategy::findGridInterface(SPtr<GridImp> grid, SPtr<GridImp> fineGrid, LbmOrGks lbmOrGks)
{
const auto coarseLevel = grid->getLevel(1.0);
const auto fineLevel = fineGrid->getLevel(1.0);
......@@ -115,7 +115,7 @@ void GridCpuStrategy::findGridInterface(SPtr<GridImp> grid, SPtr<GridImp> fineGr
grid->gridInterface->fc.fine = new uint[sizeCF];
for (uint index = 0; index < grid->getSize(); index++)
grid->findGridInterfaceCF(index, *fineGrid);
grid->findGridInterfaceCF(index, *fineGrid, lbmOrGks);
for (uint index = 0; index < grid->getSize(); index++)
grid->findGridInterfaceFC(index, *fineGrid);
......
......@@ -27,7 +27,7 @@ public:
void mesh(SPtr<GridImp> grid, TriangularMesh &geom) override;
void findQs(SPtr<GridImp> grid, TriangularMesh &geom) override;
void findGridInterface(SPtr<GridImp> grid, SPtr<GridImp> fineGrid) override;
void findGridInterface(SPtr<GridImp> grid, SPtr<GridImp> fineGrid, LbmOrGks lbmOrGks) override;
void freeMemory(SPtr<GridImp> grid) override;
......
......@@ -79,7 +79,7 @@ void GridGpuStrategy::findQs(SPtr<GridImp> grid, TriangularMesh &geom)
}
void GridGpuStrategy::findGridInterface(SPtr<GridImp> grid, SPtr<GridImp> fineGrid)
void GridGpuStrategy::findGridInterface(SPtr<GridImp> grid, SPtr<GridImp> fineGrid, LbmOrGks lbmOrGks)
{
copyAndFreeFieldFromGPU(grid->getField());
copyAndFreeFieldFromGPU(fineGrid->getField());
......
......@@ -26,7 +26,7 @@ public:
void findQs(SPtr<GridImp> grid, TriangularMesh &geom) override;
void findGridInterface(SPtr<GridImp> grid, SPtr<GridImp> fineGrid) override;
void findGridInterface(SPtr<GridImp> grid, SPtr<GridImp> fineGrid, LbmOrGks lbmOrGks) override;
void freeMemory(SPtr<GridImp> grid) override;
......
......@@ -3,6 +3,7 @@
#include <VirtualFluidsDefinitions.h>
#include "core/PointerDefinitions.h"
#include "core/LbmOrGks.h"
#include "grid/Field.h"
struct Vertex;
......@@ -29,7 +30,7 @@ public:
virtual void findQs(SPtr<GridImp> grid, TriangularMesh &geom) = 0;
virtual void findGridInterface(SPtr<GridImp> grid, SPtr<GridImp> finerGrid) = 0;
virtual void findGridInterface(SPtr<GridImp> grid, SPtr<GridImp> fineGrid, LbmOrGks lbmOrGks) = 0;
virtual void findSparseIndices(SPtr<GridImp> coarseGrid, SPtr<GridImp> fineGrid) = 0;
......
......@@ -24,7 +24,7 @@ public:
virtual void mesh(SPtr<GridImp> grid, TriangularMesh &geom) override {}
virtual void findGridInterface(SPtr<GridImp> grid, SPtr<GridImp> finerGrid) override {}
virtual void findGridInterface(SPtr<GridImp> grid, SPtr<GridImp> finerGrid, LbmOrGks lbmOrGks) override {}
virtual void freeMemory(SPtr<GridImp> grid) override {}
......
......@@ -83,9 +83,10 @@ float runKernelSetOverlapNodesToInvalid(const LaunchParameter& para, GridImp &gr
GLOBAL void setOverlapNodesToInvalid(GridImp grid, GridImp finerGrid)
{
const uint index = LaunchParameter::getGlobalIdx_2D_1D();
if (index < grid.getSize())
grid.findGridInterfaceCF(index, finerGrid);
// not up to date
//const uint index = LaunchParameter::getGlobalIdx_2D_1D();
//if (index < grid.getSize())
//grid.findGridInterfaceCF(index, finerGrid);
}
......@@ -168,9 +169,10 @@ float runKernelToFindGridInterface(const LaunchParameter& para, GridImp &grid, G
GLOBAL void findGridInterface(GridImp grid, GridImp finerGrid)
{
uint index = LaunchParameter::getGlobalIdx_2D_1D();
if (index < grid.getSize())
grid.findGridInterfaceCF(index, finerGrid);
// not up to date
//uint index = LaunchParameter::getGlobalIdx_2D_1D();
//if (index < grid.getSize())
// grid.findGridInterfaceCF(index, finerGrid);
}
/*#################################################################################*/
......
/*
* Author: St. Lenz
* mail: lenz@irmb.tu-bs.de
*/
#ifndef LBMORGKS_H
#define LBMORGKS_H
enum LbmOrGks
{
LBM,
GKS
};
#endif
......@@ -9,6 +9,8 @@
#include <string>
#include <iostream>
#include "core/LbmOrGks.h"
#include "LBM/Simulation.h"
#include "DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
......@@ -274,29 +276,55 @@ void multipleLevel(const std::string& configPath)
////TriangularMesh* triangularMesh = TriangularMesh::make("D:/GRIDGENERATION/STL/quadarBinaer.stl", DiscretizationMethod::POINT_IN_OBJECT);
//////////////////////////////////////////////////////////////////////////
// Test int cast
real L = 2.2;
real H = 0.41;
uint nx = 440;
real dx = L / real(nx);
real startX = -0.5*dx;
real startY = -0.5*dx;
real endX = round(L / dx)*dx + 0.5 * dx;
real endY = round(H / dx)*dx + 0.5 * dx;
real startZ = -10.0*dx;
real endZ = 10.0*dx;
gridBuilder->addCoarseGrid(startX, startY, startZ, endX, endY, endZ, dx);
Object* refCyln = new VerticalCylinder(0.20, 0.20, 0, 0.05, 8.0*dx);
gridBuilder->addGrid(refCyln, 2);
//////////////////////////////////////////////////////////////////////////
//gridBuilder->addGrid(new Cuboid(-10, -8, -8, 50, 22, 22), 1);
//gridBuilder->addCoarseGrid(-16, -14, -14, 59, 28, 29, 1.0);
//TriangularMesh* triangularMesh = TriangularMesh::make("D:/GRIDGENERATION/STL/input/local_input/bruecke.stl");
gridBuilder->addCoarseGrid(0, -25, -40, 100, 75, 60, 2.0);
//gridBuilder->addCoarseGrid(0, -25, -40, 100, 75, 60, 2.0);
//TriangularMesh* triangularMesh = TriangularMesh::make("D:/GRIDGENERATION/STL/circleBinaer.stl");
//gridBuilder->addGrid(new Sphere(50,25,10,15), 2);
gridBuilder->addGrid(new VerticalCylinder(50, 25, 10, 15, 15), 2);
//gridBuilder->addGrid(new VerticalCylinder(50, 25, 10, 15, 15), 2);
//gridBuilder->addGeometry(triangularMesh);
gridBuilder->setPeriodicBoundaryCondition(false, false, false);
gridBuilder->buildGrids(); // buildGrids() has to be called before setting the BCs!!!!
gridBuilder->buildGrids(LBM); // buildGrids() has to be called before setting the BCs!!!!
//gridBuilder->writeGridsToVtk("D:/GRIDGENERATION/");
//gridBuilder->writeArrows("D:/arrows");
//gridBuilder->writeArrows("D:/arrows");
gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0);
//gridBuilder->writeGridsToVtk("M:/TestGridGeneration/results/gridTest_level_");
//return;
gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0);
gridBuilder->setVelocityBoundaryCondition(SideType::MX, 0.001, 0.0, 0.0);
//gridBuilder->setVelocityBoundaryCondition(SideType::MY, 0.001, 0.0, 0.0);
//gridBuilder->setVelocityBoundaryCondition(SideType::PY, 0.001, 0.0, 0.0);
......@@ -334,7 +362,7 @@ void multipleLevel(const std::string& configPath)
//gridBuilder->addFineGrid(10.0, 10.0, 10.0, 20.0, 20.0, 20.0, 3);
//gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTest_level_2", 2);
gridBuilder->writeGridsToVtk("M:/TestGridGeneration/results/gridTest_level_");
//SimulationFileWriter::write("D:/GRIDGENERATION/files/", gridBuilder, FILEFORMAT::ASCII);
......
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