aboutsummaryrefslogtreecommitdiff
path: root/src/boundary_conditions.h
diff options
context:
space:
mode:
authorAdrian Kummerlaender2018-08-02 21:07:30 +0200
committerAdrian Kummerlaender2018-08-02 21:07:30 +0200
commitc4771584ae3b0b4c34fbef20f13c6fc7d80cd046 (patch)
tree1b376a43b6798e17ef63ac342643c27c7f08448d /src/boundary_conditions.h
parent424879d10c29d550e258f91873ae7c2681e5e853 (diff)
downloadboltzbub-c4771584ae3b0b4c34fbef20f13c6fc7d80cd046.tar
boltzbub-c4771584ae3b0b4c34fbef20f13c6fc7d80cd046.tar.gz
boltzbub-c4771584ae3b0b4c34fbef20f13c6fc7d80cd046.tar.bz2
boltzbub-c4771584ae3b0b4c34fbef20f13c6fc7d80cd046.tar.lz
boltzbub-c4771584ae3b0b4c34fbef20f13c6fc7d80cd046.tar.xz
boltzbub-c4771584ae3b0b4c34fbef20f13c6fc7d80cd046.tar.zst
boltzbub-c4771584ae3b0b4c34fbef20f13c6fc7d80cd046.zip
Bring in some more structure
Diffstat (limited to 'src/boundary_conditions.h')
-rw-r--r--src/boundary_conditions.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/boundary_conditions.h b/src/boundary_conditions.h
new file mode 100644
index 0000000..c825c32
--- /dev/null
+++ b/src/boundary_conditions.h
@@ -0,0 +1,48 @@
+#pragma once
+
+#include "vector.h"
+#include "data_cell_buffer.h"
+
+std::pair<Vector<int>, Vector<int>> neighbors(Vector<int> v) {
+ if ( v[0] == 0 ) {
+ return {
+ { -1, v[1] },
+ { 1, v[1] }
+ };
+ } else if ( v[1] == 0 ) {
+ return {
+ { v[0], -1 },
+ { v[0], 1 }
+ };
+ } else {
+ return {
+ { 0, v[1] },
+ { v[0], 0 }
+ };
+ }
+}
+
+void computeWallCell(DataCellBuffer& pop, Vector<std::size_t> cell, Vector<int> normal) {
+ const auto [neighborA, neighborB] = neighbors(normal);
+
+ pop.curr(cell).get(neighborA) = pop.curr(cell).get(-neighborA);
+ pop.curr(cell).get(normal ) = pop.curr(cell).get(-normal );
+ pop.curr(cell).get(neighborB) = pop.curr(cell).get(-neighborB);
+}
+
+void computeZouHeVelocityWallCell(DataCellBuffer& pop, Vector<std::size_t> cell, Vector<int> normal, double vX) {
+ const auto [neighborA, neighborB] = neighbors(normal);
+
+ const double rho = pop.curr(cell).get(-1,0) + pop.curr(cell).get(0,0) + pop.curr(cell).get(1,0)
+ + 2.*(
+ pop.curr(cell).get(-neighborA) +
+ pop.curr(cell).get(-normal ) +
+ pop.curr(cell).get(-neighborB)
+ );
+
+ pop.curr(cell).get(neighborA) = pop.curr(cell).get(-neighborA)
+ + 0.5*( pop.curr(cell).get( 1,0) - pop.curr(cell).get(-1,0) - vX*rho );
+ pop.curr(cell).get(normal ) = pop.curr(cell).get(-normal );
+ pop.curr(cell).get(neighborB) = pop.curr(cell).get(-neighborB)
+ + 0.5*( pop.curr(cell).get(-1,0) - pop.curr(cell).get( 1,0) + vX*rho );
+}