diff --git a/src/GridGenerator/grid/BoundaryConditions/BoundaryCondition.cpp b/src/GridGenerator/grid/BoundaryConditions/BoundaryCondition.cpp index c558198bfee2aacbf592550fc18293e4487325a8..622023768cc7e9bf0e901f360f1bb7747649d40b 100644 --- a/src/GridGenerator/grid/BoundaryConditions/BoundaryCondition.cpp +++ b/src/GridGenerator/grid/BoundaryConditions/BoundaryCondition.cpp @@ -1,8 +1,57 @@ #include "BoundaryCondition.h" #include "Side.h" +#include "../Grid.h" bool BoundaryCondition::isSide( SideType side ) const { return this->side->whoAmI() == side; -} \ No newline at end of file +} + +void GeometryBoundaryCondition::setTangentialVelocityForPatch(SPtr<Grid> grid, uint patch, + real p1x, real p1y, real p1z, + real p2x, real p2y, real p2z, + real v, real r) +{ + for( uint index = 0; index < this->indices.size(); index++ ){ + if( this->patches[index] == patch ){ + + real x, y, z; + + grid->transIndexToCoords( this->indices[index], x, y, z ); + + real pVecX = p2x - p1x; + real pVecY = p2y - p1y; + real pVecZ = p2z - p1z; + + real xVecX = x - p1x; + real xVecY = y - p1y; + real xVecZ = z - p1z; + + // compute and normalize tangent + + real tangentX = pVecY * xVecZ - pVecZ * xVecY; + real tangentY = pVecZ * xVecX - pVecX * xVecZ; + real tangentZ = pVecX * xVecY - pVecY * xVecX; + + real tangentNorm = sqrt( tangentX*tangentX + tangentY*tangentY + tangentZ*tangentZ ); + + tangentX /= tangentNorm; + tangentY /= tangentNorm; + tangentZ /= tangentNorm; + + // compute distance from rotation axis + + real projection = ( pVecX*xVecX + pVecY*xVecY + pVecZ*xVecZ ) / ( pVecX*pVecX + pVecY*pVecY + pVecZ*pVecZ ); + + real d = sqrt( ( xVecX - projection * pVecX ) * ( xVecX - projection * pVecX ) + + ( xVecY - projection * pVecY ) * ( xVecY - projection * pVecY ) + + ( xVecZ - projection * pVecZ ) * ( xVecZ - projection * pVecZ ) ); + + this->vxList[index] = tangentX * d / r * v; + this->vyList[index] = tangentY * d / r * v; + this->vzList[index] = tangentZ * d / r * v; + + } + } +} diff --git a/src/GridGenerator/grid/BoundaryConditions/BoundaryCondition.h b/src/GridGenerator/grid/BoundaryConditions/BoundaryCondition.h index 3fc9494efdd70081047090cd25b25b8e44fddf90..e28974f9644f7179172689133aaf6a8930291e06 100644 --- a/src/GridGenerator/grid/BoundaryConditions/BoundaryCondition.h +++ b/src/GridGenerator/grid/BoundaryConditions/BoundaryCondition.h @@ -7,6 +7,8 @@ #include <core/DataTypes.h> #include "grid/NodeValues.h" +class Grid; + class Side; enum class SideType; @@ -17,6 +19,8 @@ public: SPtr<Side> side; std::vector<std::vector<real> > qs; + std::vector<uint> patches; + virtual char getType() const = 0; bool isSide( SideType side ) const; @@ -24,6 +28,8 @@ public: real getQ( uint index, uint dir ){ return this->qs[index][dir]; } }; +////////////////////////////////////////////////////////////////////////// + class PressureBoundaryCondition : public BoundaryCondition { public: @@ -32,15 +38,11 @@ public: return SPtr<PressureBoundaryCondition>(new PressureBoundaryCondition(rho)); } - std::vector<uint> neighborIndices; real rho; -private: - PressureBoundaryCondition(real rho) : rho(rho) - { - - } +protected: + PressureBoundaryCondition(real rho) : rho(rho) { } public: char getType() const override @@ -54,6 +56,8 @@ public: } }; +////////////////////////////////////////////////////////////////////////// + class VelocityBoundaryCondition : public BoundaryCondition { public: @@ -63,25 +67,38 @@ public: } real vx, vy, vz; -private: - VelocityBoundaryCondition(real vx, real vy, real vz) : vx(vx), vy(vy), vz(vz) - { - - } + std::vector<real> vxList, vyList, vzList; +protected: + VelocityBoundaryCondition(real vx, real vy, real vz) : vx(vx), vy(vy), vz(vz) { } public: - char getType() const override + virtual char getType() const override { return BC_VELOCITY; } + void fillVelocityLists() + { + for( uint index : this->indices ){ + this->vxList.push_back(vx); + this->vyList.push_back(vy); + this->vzList.push_back(vz); + } + } + real getVx() { return this->vx; } real getVy() { return this->vy; } real getVz() { return this->vz; } + + real getVx(uint index) { return this->vxList[index]; } + real getVy(uint index) { return this->vyList[index]; } + real getVz(uint index) { return this->vzList[index]; } }; +////////////////////////////////////////////////////////////////////////// -class GeometryBoundaryCondition : public BoundaryCondition + +class GeometryBoundaryCondition : public VelocityBoundaryCondition { public: static SPtr<GeometryBoundaryCondition> make() @@ -89,12 +106,8 @@ public: return SPtr<GeometryBoundaryCondition>(new GeometryBoundaryCondition()); } - real vx, vy, vz; private: - GeometryBoundaryCondition() - { - - } + GeometryBoundaryCondition() : VelocityBoundaryCondition(0.0, 0.0, 0.0) { } public: char getType() const override @@ -102,9 +115,20 @@ public: return BC_SOLID; } - real getVx() { return this->vx; } - real getVy() { return this->vy; } - real getVz() { return this->vz; } + void setVelocityForPatch( uint patch, real vx, real vy, real vz ){ + for( uint index = 0; index < this->indices.size(); index++ ){ + if( this->patches[index] == patch ){ + this->vxList[index] = vx; + this->vyList[index] = vy; + this->vzList[index] = vz; + } + } + } + + VF_PUBLIC void setTangentialVelocityForPatch( SPtr<Grid> grid, uint patch, + real p1x, real p1y, real p1z, + real p2x, real p2y, real p2z, + real v, real r ); }; diff --git a/src/GridGenerator/grid/BoundaryConditions/Side.cpp b/src/GridGenerator/grid/BoundaryConditions/Side.cpp index de6ef1a36c6dddf6e0af35fe39946d10a23f51d3..5182018302e866bca4030c4be6b7ea1aaa818a29 100644 --- a/src/GridGenerator/grid/BoundaryConditions/Side.cpp +++ b/src/GridGenerator/grid/BoundaryConditions/Side.cpp @@ -26,6 +26,8 @@ void Side::addIndices(SPtr<Grid> grid, SPtr<BoundaryCondition> boundaryCondition setPressureNeighborIndices(boundaryCondition, grid, index); setQs(grid, boundaryCondition, index); + + boundaryCondition->patches.push_back(0); } } } @@ -126,6 +128,7 @@ void Geometry::addIndices(std::vector<SPtr<Grid> > grids, uint level, SPtr<Bound geometryBoundaryCondition->indices.push_back(index); geometryBoundaryCondition->qs.push_back(qNode); + geometryBoundaryCondition->patches.push_back( grids[level]->getQPatch(index) ); qFound = false; } diff --git a/src/GridGenerator/grid/Grid.h b/src/GridGenerator/grid/Grid.h index 886ead4f988031a99d37cfe397c74f6bc385d0e4..fc918be0c3a43e3385f5abbfaf379ad7bdc53ed6 100644 --- a/src/GridGenerator/grid/Grid.h +++ b/src/GridGenerator/grid/Grid.h @@ -108,6 +108,7 @@ public: HOST virtual void setNumberOfSolidBoundaryNodes(uint numberOfSolidBoundaryNodes) = 0; HOST virtual real getQValue(const uint index, const uint dir) const = 0; + HOST virtual uint getQPatch(const uint index) const = 0; HOST virtual void setInnerRegionFromFinerGrid( bool innerRegionFromFinerGrid ) = 0; diff --git a/src/GridGenerator/grid/GridBuilder/GridBuilder.h b/src/GridGenerator/grid/GridBuilder/GridBuilder.h index 1a4ce6d6f624001933e56ecfc6458260863533da..a241391387655f69b89c42c1028d83c75c8afb54 100644 --- a/src/GridGenerator/grid/GridBuilder/GridBuilder.h +++ b/src/GridGenerator/grid/GridBuilder/GridBuilder.h @@ -31,6 +31,7 @@ class Grid; enum class SideType; class BoundaryCondition; +class GeometryBoundaryCondition; class GridBuilder { @@ -76,6 +77,8 @@ public: virtual SPtr<BoundaryCondition> getBoundaryCondition( SideType side, uint level ) const = 0; + virtual SPtr<GeometryBoundaryCondition> getGeometryBoundaryCondition( uint level ) const = 0; + }; #endif diff --git a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp index 5accee3ea9ef793adf0a21ea0c1146663aa0459b..9344c9ff902c1c25405a31598809d6f5ca29a2e3 100644 --- a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp +++ b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp @@ -60,27 +60,13 @@ void LevelGridBuilder::setVelocityBoundaryCondition(SideType sideType, real vx, velocityBoundaryCondition->side = side; velocityBoundaryCondition->side->addIndices(grids, level, velocityBoundaryCondition); + velocityBoundaryCondition->fillVelocityLists(); + boundaryConditions[level]->velocityBoundaryConditions.push_back(velocityBoundaryCondition); *logging::out << logging::Logger::INFO_INTERMEDIATE << "Set Velocity BC on level " << level << " with " << (int)velocityBoundaryCondition->indices.size() <<"\n"; } } - - //// DEBUG - //{ - // std::ofstream file; - - // file.open("M:/TestGridGeneration/results/Box2_25_Qs.csv"); - - // for (auto nodeQs : boundaryConditions[0]->geometryBoundaryCondition->qs) { - // for (auto q : nodeQs) { - // file << q << ", "; - // } - // file << "100" << std::endl; - // } - - // file.close(); - //} } void LevelGridBuilder::setVelocityGeometryBoundaryCondition(real vx, real vy, real vz) @@ -95,6 +81,10 @@ void LevelGridBuilder::setVelocityGeometryBoundaryCondition(real vx, real vy, re boundaryConditions[level]->geometryBoundaryCondition->vy = vy; boundaryConditions[level]->geometryBoundaryCondition->vz = vz; boundaryConditions[level]->geometryBoundaryCondition->side->addIndices(grids, level, boundaryConditions[level]->geometryBoundaryCondition); + + boundaryConditions[level]->geometryBoundaryCondition->fillVelocityLists(); + + *logging::out << logging::Logger::INFO_INTERMEDIATE << "Set Geometry Velocity BC on level " << level << " with " << (int)boundaryConditions[level]->geometryBoundaryCondition->indices.size() <<"\n"; } } } @@ -110,6 +100,8 @@ void LevelGridBuilder::setPressureBoundaryCondition(SideType sideType, real rho) pressureBoundaryCondition->side->addIndices(grids, level, pressureBoundaryCondition); boundaryConditions[level]->pressureBoundaryConditions.push_back(pressureBoundaryCondition); + + *logging::out << logging::Logger::INFO_INTERMEDIATE << "Set Pressure BC on level " << level << " with " << (int)pressureBoundaryCondition->indices.size() <<"\n"; } } @@ -275,9 +267,9 @@ void LevelGridBuilder::getVelocityValues(real* vx, real* vy, real* vz, int* indi { indices[allIndicesCounter] = grids[level]->getSparseIndex(boundaryCondition->indices[i]) +1; - vx[allIndicesCounter] = boundaryCondition->vx; - vy[allIndicesCounter] = boundaryCondition->vy; - vz[allIndicesCounter] = boundaryCondition->vz; + vx[allIndicesCounter] = boundaryCondition->getVx(i); + vy[allIndicesCounter] = boundaryCondition->getVy(i); + vz[allIndicesCounter] = boundaryCondition->getVz(i); allIndicesCounter++; } } @@ -408,9 +400,9 @@ void LevelGridBuilder::getGeometryValues(real* vx, real* vy, real* vz, int level { for (uint i = 0; i < boundaryConditions[level]->geometryBoundaryCondition->indices.size(); i++) { - vx[i] = boundaryConditions[level]->geometryBoundaryCondition->vx; - vy[i] = boundaryConditions[level]->geometryBoundaryCondition->vy; - vz[i] = boundaryConditions[level]->geometryBoundaryCondition->vz; + vx[i] = boundaryConditions[level]->geometryBoundaryCondition->getVx(i); + vy[i] = boundaryConditions[level]->geometryBoundaryCondition->getVy(i); + vz[i] = boundaryConditions[level]->geometryBoundaryCondition->getVz(i); } } @@ -452,3 +444,8 @@ VF_PUBLIC SPtr<BoundaryCondition> LevelGridBuilder::getBoundaryCondition(SideTyp return nullptr; } + +VF_PUBLIC SPtr<GeometryBoundaryCondition> LevelGridBuilder::getGeometryBoundaryCondition(uint level) const +{ + return this->boundaryConditions[level]->geometryBoundaryCondition; +} diff --git a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h index 96c3f4de4d8fe2236da3fcff0d8acb795a8d5f27..c3b28c2c50fe6b95efffec310aede3ea96e32ce0 100644 --- a/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h +++ b/src/GridGenerator/grid/GridBuilder/LevelGridBuilder.h @@ -78,6 +78,7 @@ public: VF_PUBLIC void writeArrows(std::string fileName) const; VF_PUBLIC SPtr<BoundaryCondition> getBoundaryCondition( SideType side, uint level ) const override; + VF_PUBLIC SPtr<GeometryBoundaryCondition> getGeometryBoundaryCondition(uint level) const override; protected: diff --git a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp index 7e42fa7755cd139f54b9401fbe2b1fb45e094d7b..02e5978fc3a89ce927f06ebfe231a0b10dcba75b 100644 --- a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp +++ b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp @@ -445,7 +445,7 @@ void MultipleGridBuilder::buildGrids( LbmOrGks lbmOrGks, bool enableThinWalls ) grids[grids.size() - 1]->mesh(solidObject); - //grids[grids.size() - 1]->closeNeedleCells(); + grids[grids.size() - 1]->closeNeedleCells(); if( enableThinWalls ){ grids[grids.size() - 1]->enableFindSolidBoundaryNodes(); diff --git a/src/GridGenerator/grid/GridImp.cu b/src/GridGenerator/grid/GridImp.cu index 258f052af6145f03e4d6362f385b98884372e348..3e5d5133a4e95ae89811d6d174f77526875dda74 100644 --- a/src/GridGenerator/grid/GridImp.cu +++ b/src/GridGenerator/grid/GridImp.cu @@ -758,6 +758,11 @@ HOST real GridImp::getQValue(const uint index, const uint dir) const return this->qValues[qIndex]; } +HOST uint GridImp::getQPatch(const uint index) const +{ + return this->qPatches[ this->qIndices[index] ]; +} + HOST void GridImp::setInnerRegionFromFinerGrid(bool innerRegionFromFinerGrid) { this->innerRegionFromFinerGrid = innerRegionFromFinerGrid; @@ -1032,14 +1037,15 @@ HOST void GridImp::closeNeedleCells() do{ numberOfClosedNeedleCells = this->gridStrategy->closeNeedleCells( shared_from_this() ); - *logging::out << logging::Logger::INFO_INTERMEDIATE << " " << " cells closed!\n"; + *logging::out << logging::Logger::INFO_INTERMEDIATE << numberOfClosedNeedleCells << " cells closed!\n"; } while( numberOfClosedNeedleCells > 0 ); } HOSTDEVICE bool GridImp::closeCellIfNeedle(uint index) { - if( !this->getField().is( index, FLUID ) ) return false; + //if( !this->getField().is( index, FLUID ) ) return false; + if( !this->getField().is( index, BC_SOLID ) ) return false; real x, y, z; this->transIndexToCoords(index, x, y, z); @@ -1203,6 +1209,9 @@ HOSTDEVICE void GridImp::calculateQs(const uint index, const Vertex &point, cons subdistance < this->qValues[i*this->numberOfSolidBoundaryNodes + this->qIndices[index]] ) { this->qValues[i*this->numberOfSolidBoundaryNodes + this->qIndices[index]] = subdistance; + + this->qPatches[ this->qIndices[index] ] = triangle.patchIndex; + //printf("%d %f \n", this->qIndices[index], subdistance); } } diff --git a/src/GridGenerator/grid/GridImp.h b/src/GridGenerator/grid/GridImp.h index 96e9ae2f0dd81829f2adb90eb1ccfb0d1f62ecf7..576704bf7383d029f0ac7707e0fc1428123d309b 100644 --- a/src/GridGenerator/grid/GridImp.h +++ b/src/GridGenerator/grid/GridImp.h @@ -73,6 +73,7 @@ private: uint *qIndices; real *qValues; + uint *qPatches; bool innerRegionFromFinerGrid; @@ -111,6 +112,7 @@ public: HOST void setNumberOfSolidBoundaryNodes(uint numberOfSolidBoundaryNodes) override; HOST real getQValue(const uint index, const uint dir) const override; + HOST uint getQPatch(const uint index) const override; HOST void setInnerRegionFromFinerGrid( bool innerRegionFromFinerGrid ) override; diff --git a/src/GridGenerator/grid/GridMocks.h b/src/GridGenerator/grid/GridMocks.h index c163690de84d9aca67660d7577f5144026010fb1..ebcae9696785a20bfa6cb5ee16011d705cd7aae8 100644 --- a/src/GridGenerator/grid/GridMocks.h +++ b/src/GridGenerator/grid/GridMocks.h @@ -92,6 +92,7 @@ public: void setNumberOfSolidBoundaryNodes(uint numberOfSolidBoundaryNodes) override {} real getQValue(const uint index, const uint dir) const override { return 0.0; } + uint getQPatch(const uint index) const override { return 0.0; } void setInnerRegionFromFinerGrid( bool innerRegionFromFinerGrid ) override {}; diff --git a/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.cpp b/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.cpp index 250bdbdda9127f48e87a6085c8c8b7e9a722f58a..197155678446b412554b2e077b20edcce1b2c4f3 100644 --- a/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.cpp +++ b/src/GridGenerator/grid/GridStrategy/GridCpuStrategy/GridCpuStrategy.cpp @@ -41,6 +41,8 @@ void GridCpuStrategy::allocateGridMemory(SPtr<GridImp> grid) void GridCpuStrategy::allocateQs(SPtr<GridImp> grid) { + grid->qPatches = new uint[grid->getNumberOfSolidBoundaryNodes()]; + const uint numberOfQs = grid->getNumberOfSolidBoundaryNodes() * (grid->distribution.dir_end + 1); grid->qValues = new real[numberOfQs]; #pragma omp parallel for diff --git a/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp b/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp index 7edcd2e6225ed04b5cf80fc1debe968364a5e608..f41086ac8ab09842b3cc6aac83ad50e129e547c7 100644 --- a/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp +++ b/src/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp @@ -74,10 +74,11 @@ void GridProvider::setInitalNodeValues(const int numberOfNodes, const int level) } + // initial condition para->getParH(level)->rho_SP[j] = 0.0; - para->getParH(level)->vx_SP[j] = 0.02; + para->getParH(level)->vx_SP[j] = 0.0; para->getParH(level)->vy_SP[j] = 0.0; para->getParH(level)->vz_SP[j] = 0.0; diff --git a/targets/apps/HULC/main.cpp b/targets/apps/HULC/main.cpp index 6e54b79ac9d80b52cd24a2c61612f11a912de5eb..0f2dfbb761911f4a06f72959f3d1ed771d10f7f5 100644 --- a/targets/apps/HULC/main.cpp +++ b/targets/apps/HULC/main.cpp @@ -49,6 +49,7 @@ #include "utilities/math/Math.h" #include "grid/BoundaryConditions/Side.h" +#include "grid/BoundaryConditions/BoundaryCondition.h" std::string getGridPath(std::shared_ptr<Parameter> para, std::string Gridpath) { @@ -278,35 +279,39 @@ void multipleLevel(const std::string& configPath) // DrivAer ////////////////////////////////////////////////////////////////////////// - //real dx = 0.2; - //real vx = 0.1; - - //TriangularMesh* triangularMesh = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/DrivAer_Fastback_Coarse.stl"); - ////TriangularMesh* triangularMesh = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/DrivAer_Coarse.stl"); - ////TriangularMesh* triangularMesh = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/DrivAer_NoSTLGroups.stl"); - ////TriangularMesh* triangularMesh = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/DrivAer_Fastback_Coarse_200k.stl"); - ////TriangularMesh* triangularMesh = TriangularMesh::make("M:/TestGridGeneration/STL/DrivAer_NoSTLGroups.stl"); - ////TriangularMesh* triangularMesh = TriangularMesh::make("M:/TestGridGeneration/STL/DrivAer_Coarse.stl"); - //gridBuilder->addCoarseGrid(-5, -5, -0.4, 15, 5, 5, dx); // DrivAer - // //gridBuilder->addGrid(new Cuboid(-1.5, -1.2, -1.5, 6.5, 1.5, 1.5), 2); - // //gridBuilder->addGrid(triangularMesh, 3); // DrivAer + real dx = 0.2; + real vx = 0.05; - // Object* floorBox = new Cuboid( -0.3, -1, -1, 4.0, 1, 0.2 ); - // Object* wakeBox = new Cuboid( 3.5, -1, -1, 5.5, 1, 0.8 ); + TriangularMesh* triangularMesh = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/DrivAer_Fastback_Coarse.stl"); + //TriangularMesh* triangularMesh = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/DrivAer_Coarse.stl"); + //TriangularMesh* triangularMesh = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/DrivAer_NoSTLGroups.stl"); + //TriangularMesh* triangularMesh = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/DrivAer_Fastback_Coarse_200k.stl"); + //TriangularMesh* triangularMesh = TriangularMesh::make("M:/TestGridGeneration/STL/DrivAer_NoSTLGroups.stl"); + //TriangularMesh* triangularMesh = TriangularMesh::make("M:/TestGridGeneration/STL/DrivAer_Coarse.stl"); - // Conglomerate* refRegion = new Conglomerate(); + real z0 = 0.318+0.5*dx; - // refRegion->add(floorBox); - // refRegion->add(wakeBox); - // refRegion->add(triangularMesh); + gridBuilder->addCoarseGrid(- 5.0, -5.0, 0.0 - z0, + 15.0, 5.0, 5.0 - z0, dx); // DrivAer + //gridBuilder->addGrid(new Cuboid(-1.5, -1.2, -1.5, 6.5, 1.5, 1.5), 2); + //gridBuilder->addGrid(triangularMesh, 3); // DrivAer - // gridBuilder->setNumberOfLayers(15,8); - // gridBuilder->addGrid(refRegion, 2); - // - // gridBuilder->setNumberOfLayers(10,8); - // gridBuilder->addGrid(triangularMesh, 3); + Object* floorBox = new Cuboid( -0.3, -1, -1, 4.0, 1, 0.2 ); + Object* wakeBox = new Cuboid( 3.5, -1, -1, 5.5, 1, 0.8 ); - //gridBuilder->addGeometry(triangularMesh); + Conglomerate* refRegion = new Conglomerate(); + + refRegion->add(floorBox); + refRegion->add(wakeBox); + refRegion->add(triangularMesh); + + gridBuilder->setNumberOfLayers(15,8); + gridBuilder->addGrid(refRegion, 4); + + //gridBuilder->setNumberOfLayers(10,8); + //gridBuilder->addGrid(triangularMesh, 5); + + gridBuilder->addGeometry(triangularMesh); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // DLC @@ -353,19 +358,20 @@ void multipleLevel(const std::string& configPath) // Testing layer refinement ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real dx = 0.25; - real vx = 0.002; + //real dx = 0.25; + //real vx = 0.02; - TriangularMesh* triangularMesh = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/Box_2.00.stl"); + ////TriangularMesh* triangularMesh = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/Box_2.00.stl"); + //TriangularMesh* triangularMesh = TriangularMesh::make("C:/Users/lenz/Desktop/Work/gridGenerator/stl/STL_Group_Test.stl"); - gridBuilder->addCoarseGrid(-4, -4, -4, - 4, 4, 4, dx); + //gridBuilder->addCoarseGrid(-6, -4, -4, + // 6, 12, 4, dx); - gridBuilder->setNumberOfLayers(8, 8); // this must come before the grids are added!!! - - gridBuilder->addGrid(triangularMesh, 1); + //gridBuilder->setNumberOfLayers(15, 8); // this must come before the grids are added!!! + // + //gridBuilder->addGrid(triangularMesh, 2); - gridBuilder->addGeometry(triangularMesh); + //gridBuilder->addGeometry(triangularMesh); //gridBuilder->addGrid( new Sphere( 0, 0, 0, 0.0005 ), 12 ); //gridBuilder->addGrid( new Cuboid( -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 ), 3 ); @@ -471,13 +477,13 @@ void multipleLevel(const std::string& configPath) //BCs //gridBuilder->setVelocityBoundaryCondition(SideType::PX, 0.0, 0.0, 0.0); //gridBuilder->setVelocityBoundaryCondition(SideType::MX, 0.0, 0.0, 0.0); - gridBuilder->setVelocityBoundaryCondition(SideType::PY, vx, 0.0, 0.0); - gridBuilder->setVelocityBoundaryCondition(SideType::MY, vx, 0.0, 0.0); - gridBuilder->setVelocityBoundaryCondition(SideType::PZ, vx, 0.0, 0.0); - gridBuilder->setVelocityBoundaryCondition(SideType::MZ, vx, 0.0, 0.0); + gridBuilder->setVelocityBoundaryCondition(SideType::PY, 0.0, vx, 0.0); + gridBuilder->setVelocityBoundaryCondition(SideType::MY, 0.0, vx, 0.0); + gridBuilder->setVelocityBoundaryCondition(SideType::PZ, 0.0, vx, 0.0); + gridBuilder->setVelocityBoundaryCondition(SideType::MZ, 0.0, vx, 0.0); gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0); - gridBuilder->setVelocityBoundaryCondition(SideType::MX, vx , 0.0, 0.0); + gridBuilder->setVelocityBoundaryCondition(SideType::MX, 0.0, vx , 0.0); //////////////////////////////////////////////////////////////////////////// @@ -489,6 +495,21 @@ void multipleLevel(const std::string& configPath) gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0); + { + //gridBuilder->getGeometryBoundaryCondition(gridBuilder->getNumberOfLevels() - 1)->setVelocityForPatch(0, vx, 0.0, 0.0); + + SPtr<Grid> grid = gridBuilder->getGrid(gridBuilder->getNumberOfLevels() - 1); + + // Walze: + //gridBuilder->getGeometryBoundaryCondition(gridBuilder->getNumberOfLevels() - 1)->setTangentialVelocityForPatch( grid, 1, 0.0, -1.0, 0.0, + // 0.0, 1.0, 0.0, -5.0 * vx, 1.0); + + // DrivAer + gridBuilder->getGeometryBoundaryCondition(gridBuilder->getNumberOfLevels() - 1)->setTangentialVelocityForPatch( grid, 4, 0.0075, -2.0, 0.0, + 0.0075, 2.0, 0.0, -vx, 0.318); + gridBuilder->getGeometryBoundaryCondition(gridBuilder->getNumberOfLevels() - 1)->setTangentialVelocityForPatch( grid, 3, 2.793 , -2.0, 0.0, + 2.793 , 2.0, 0.0, -vx, 0.318); + } //gridBuilder->setVelocityBoundaryCondition(SideType::PX, 0.001, 0.0, 0.0); //gridBuilder->setVelocityBoundaryCondition(SideType::MY, 0.001, 0.0, 0.0); @@ -601,7 +622,7 @@ void multipleLevel(const std::string& configPath) //} //SimulationFileWriter::write("D:/GRIDGENERATION/files/", gridBuilder, FILEFORMAT::ASCII); - SimulationFileWriter::write("C:/Users/lenz/Desktop/Work/gridGenerator/grid/", gridBuilder, FILEFORMAT::ASCII); + //SimulationFileWriter::write("C:/Users/lenz/Desktop/Work/gridGenerator/grid/", gridBuilder, FILEFORMAT::ASCII); //return; @@ -627,22 +648,7 @@ void multipleLevel(const std::string& configPath) int main( int argc, char* argv[]) { - //try - //{ - // throw std::exception("Test"); - //} - //catch (std::exception e) - //{ - // std::cout << e.what() << std::endl; - //} - - //return 0; - - - - - - MPI_Init(&argc, &argv); + MPI_Init(&argc, &argv); std::string str, str2; if ( argv != NULL ) {