aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Kummerlaender2018-10-18 20:09:52 +0200
committerAdrian Kummerlaender2018-10-18 20:09:52 +0200
commitf7d67879a40455da49520305549e10bb4c89e061 (patch)
treeb6262678f13c065d9285206fdf98292708bf4389
parentf72650254067bfee063c184dedcce41fdfa32931 (diff)
downloadboltzbub-f7d67879a40455da49520305549e10bb4c89e061.tar
boltzbub-f7d67879a40455da49520305549e10bb4c89e061.tar.gz
boltzbub-f7d67879a40455da49520305549e10bb4c89e061.tar.bz2
boltzbub-f7d67879a40455da49520305549e10bb4c89e061.tar.lz
boltzbub-f7d67879a40455da49520305549e10bb4c89e061.tar.xz
boltzbub-f7d67879a40455da49520305549e10bb4c89e061.tar.zst
boltzbub-f7d67879a40455da49520305549e10bb4c89e061.zip
Remove lid driven cavity example with obstacles
Obstacle support is better illustrated by the channel example.
-rw-r--r--CMakeLists.txt10
-rw-r--r--README.md10
-rw-r--r--lid_driven_cavity_with_obstacles.cc114
3 files changed, 5 insertions, 129 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e1def57..1ea2f78 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -38,16 +38,6 @@ target_link_libraries(
)
add_executable(
- lid_driven_cavity_with_obstacles
- lid_driven_cavity_with_obstacles.cc
-)
-
-target_link_libraries(
- lid_driven_cavity_with_obstacles
- boltzbub
-)
-
-add_executable(
channel
channel.cc
)
diff --git a/README.md b/README.md
index 5ab879a..8d592eb 100644
--- a/README.md
+++ b/README.md
@@ -6,11 +6,11 @@
## Experiments
-| Code | Description |
-| - | - |
-| `lid_driven_cavity.cc` | Lid driven cavity using Zou/He boundary conditions for the top wall and simple bounce back for all other walls |
-| `lid_driven_cavity_with_obstacles.cc` | Same as `lid_driven_cavity.cc` but includes a grid of boxes to make things more interesting |
-| `channel.cc` | Channel flow with some obstacles and Dirichlet inflow condition |
+| Code | Description |
+| - | - |
+| `lid_driven_cavity.cc` | Lid driven cavity using (moving wall) bounce back conditions |
+| `poiseuille.cc` | Poiseuille flow with velocity BC inflow and density BC outflow |
+| `channel.cc` | Channel flow with some obstacles and Dirichlet inflow condition |
## Build
diff --git a/lid_driven_cavity_with_obstacles.cc b/lid_driven_cavity_with_obstacles.cc
deleted file mode 100644
index 55f519e..0000000
--- a/lid_driven_cavity_with_obstacles.cc
+++ /dev/null
@@ -1,114 +0,0 @@
-#include <iostream>
-#include <vector>
-#include <algorithm>
-
-#include "lbm.h"
-#include "boundary_conditions.h"
-#include "box_obstacle.h"
-
-constexpr std::size_t dimX = 120;
-constexpr std::size_t dimY = dimX;
-
-constexpr double uLid = 0.3;
-constexpr double reynolds = 1000;
-
-constexpr double tau = 3 * uLid * (dimX-1) / reynolds + 0.5;
-constexpr double omega = 1. / tau;
-
-DataCellBuffer pop(dimX, dimY);
-FluidBuffer fluid(dimX, dimY);
-
-std::vector<BoxObstacle> obstacles{
- {20, 20, 40, 40},
- {50, 20, 70, 40},
- {80, 20, 100, 40},
- {20, 50, 40, 70},
- {50, 50, 70, 70},
- {80, 50, 100, 70},
- {20, 80, 40, 100},
- {50, 80, 70, 100},
- {80, 80, 100, 100},
-};
-
-void init() {
- for ( std::size_t x = 0; x < dimX; ++x ) {
- for ( std::size_t y = 0; y < dimY; ++y ) {
- fluid.density(x,y) = 1.0;
- fluid.velocity(x,y) = { 0.0, 0.0 };
-
- static_cast<Cell&>(pop.curr(x,y)).equilibrize(
- fluid.density(x,y), fluid.velocity(x,y));
- static_cast<Cell&>(pop.prev(x,y)).equilibrize(
- fluid.density(x,y), fluid.velocity(x,y));
- }
- }
-}
-
-void computeLbmStep() {
- pop.swap();
-
- for ( std::size_t x = 0; x < dimX; ++x ) {
- for ( std::size_t y = 0; y < dimY; ++y ) {
- if ( std::all_of(obstacles.cbegin(), obstacles.cend(), [x, y](const auto& o) {
- return !o.isInside(x, y);
- }) ) {
- streamFluidCell(pop, x, y);
- }
- }
- }
-
- // straight wall cell bounce back
- for ( std::size_t x = 0; x < dimX; ++x ) {
- computeZouHeVelocityWallCell(pop, {x, dimY-1}, { 0,-1}, uLid);
- }
- for ( std::size_t x = 1; x < dimX-1; ++x ) {
- computeWallCell(pop, {x, 0}, { 0, 1});
- }
- for ( std::size_t y = 1; y < dimY-1; ++y ) {
- computeWallCell(pop, {0, y}, { 1, 0});
- computeWallCell(pop, {dimX-1, y}, {-1, 0});
- }
-
- // edge wall cell bounce back
- computeWallCell(pop, {0, 0 }, { 1, 1});
- computeWallCell(pop, {dimX-1, 0 }, {-1, 1});
-
- // obstacles
- for ( const auto& box : obstacles ) {
- box.applyBoundary(pop);
- }
-
- for ( std::size_t x = 0; x < dimX; ++x ) {
- for ( std::size_t y = 0; y < dimY; ++y ) {
- Cell& cell = static_cast<Cell&>(pop.curr(x,y));
- fluid.density(x,y) = cell.sum();
- fluid.velocity(x,y) = cell.velocity(fluid.density(x,y));
-
- if ( std::all_of(obstacles.cbegin(), obstacles.cend(), [x, y](const auto& o) {
- return !o.isInside(x, y);
- }) ) {
- collideFluidCell(omega, pop, fluid, x, y);
- }
- }
- }
-}
-
-int main() {
- init();
-
- std::cout << "Re: " << reynolds << std::endl;
- std::cout << "uLid: " << uLid << std::endl;
- std::cout << "tau: " << tau << std::endl;
-
- for ( std::size_t t = 0; t <= 6000; ++t ) {
- computeLbmStep();
-
- if ( t % 100 == 0 ) {
- std::cout << ".";
- std::cout.flush();
- fluid.writeAsVTK("result/data_t" + std::to_string(t) + ".vtk");
- }
- }
-
- std::cout << std::endl;
-}