|
flow 1.3.0
Kokkos cut-cell IBM incompressible Navier-Stokes solver + pnm pore extraction
|
Functions | |
| run (boost, wall_flux=True) | |
| sdf_at (offx, offy, offz) | |
| worst (masks) | |
| l2 (masks) | |
Variables | |
| int | N = int(sys.argv[1]) if len(sys.argv) > 1 else 48 |
| float | RF = 0.18 |
| float | R = RF * N |
| float | V = 0.7 |
| int | F = 1e-3 |
| MU | |
| RHO | |
| DT | |
| STEPS = int(os.environ.get("GAL_STEPS", "260")) | |
| list | CEN |
| KN_R | |
| KI_I | |
| KI_R | |
| node_ints = np.array([1, -1, -1], dtype=np.int32) | |
| float | node_reals = R |
| inst_ints = np.zeros((len(CEN), KI_I), dtype=np.int32) | |
| inst_reals = np.zeros((len(CEN), KI_R)) | |
| sdU = sdf_at(-0.5, 0.0, 0.0) | |
| sdV = sdf_at(0.0, -0.5, 0.0) | |
| sdW = sdf_at(0.0, 0.0, -0.5) | |
| mU | |
| mV | |
| mW | |
| bU | |
| bV | |
| bW | |
| dU | |
| dV | |
| dW | |
| uA | |
| vA | |
| wA | |
| divA | |
| imbA | |
| itA | |
| ftA | |
| frA | |
| uB | |
| vB | |
| wB | |
| divB | |
| imbB | |
| itB | |
| ftB | |
| frB | |
| True | |
| wall_flux | |
| tuple | du = (uB + V) - uA |
| dv = vB - vA | |
| dw = wB - wA | |
| scale = max(abs(uA[mU]).max(), 1e-30) | |
| e_all | |
| e_band | |
| e_deep | |
| keep = e_all | |
| int | ok = e_all < 1e-4 |
Layer 3 rungs 2-3 gate: GALILEAN INVARIANCE of the moving-wall cut-cell solver.
Stokes flow through a periodic sphere bed, driven by a body force, solved twice:
A (lab frame) spheres static, wall velocity 0 -> u_A
B (boosted frame) IDENTICAL geometry, every sphere given linVel=-V -> u_B
In a frame translating at V the same physical flow reads u' = u - V and the walls move at -V, so
the discrete claim is u_B + V == u_A in every fluid cell.
Why this gates rung 3 and not just rung 2. The true boosted solution has
div_open(u_A - V) = -V_x (oE - oW) != 0 at every cut cell,
which is exactly cancelled by the wall term u_w . A_wall with A_wall = -(oE-oW, oN-oS, oT-oB).
Drop the wall term and the projection wrongly forces div_open(u)=0, so the run is repeated with
set_wall_flux_divergence(False) to EXHIBIT the failure rather than assert it.
Stokes (advection off) is required: with the convective term, a fixed geometry plus a moving wall
is not a Galilean boost of the static problem -- the missing -(V.grad)u term is real physics, not
a discretisation error.
| galilean_gate.run | ( | boost, | |
wall_flux = True |
|||
| ) |
Definition at line 50 of file galilean_gate.py.
References mean().
| galilean_gate.sdf_at | ( | offx, | |
| offy, | |||
| offz | |||
| ) |
Definition at line 83 of file galilean_gate.py.
| galilean_gate.worst | ( | masks | ) |
Definition at line 114 of file galilean_gate.py.
| galilean_gate.l2 | ( | masks | ) |
Definition at line 118 of file galilean_gate.py.
| int galilean_gate.N = int(sys.argv[1]) if len(sys.argv) > 1 else 48 |
Definition at line 25 of file galilean_gate.py.
| float galilean_gate.RF = 0.18 |
Definition at line 26 of file galilean_gate.py.
Definition at line 27 of file galilean_gate.py.
| float galilean_gate.V = 0.7 |
Definition at line 28 of file galilean_gate.py.
| int galilean_gate.F = 1e-3 |
Definition at line 29 of file galilean_gate.py.
| galilean_gate.MU |
Definition at line 31 of file galilean_gate.py.
| galilean_gate.RHO |
Definition at line 31 of file galilean_gate.py.
| galilean_gate.DT |
Definition at line 31 of file galilean_gate.py.
| galilean_gate.STEPS = int(os.environ.get("GAL_STEPS", "260")) |
Definition at line 32 of file galilean_gate.py.
| list galilean_gate.CEN |
Definition at line 34 of file galilean_gate.py.
| galilean_gate.KN_R |
Definition at line 37 of file galilean_gate.py.
| galilean_gate.KI_I |
Definition at line 37 of file galilean_gate.py.
| galilean_gate.KI_R |
Definition at line 37 of file galilean_gate.py.
| galilean_gate.node_ints = np.array([1, -1, -1], dtype=np.int32) |
Definition at line 38 of file galilean_gate.py.
| float galilean_gate.node_reals = R |
Definition at line 39 of file galilean_gate.py.
Definition at line 41 of file galilean_gate.py.
Definition at line 42 of file galilean_gate.py.
| galilean_gate.sdU = sdf_at(-0.5, 0.0, 0.0) |
Definition at line 94 of file galilean_gate.py.
| galilean_gate.sdV = sdf_at(0.0, -0.5, 0.0) |
Definition at line 95 of file galilean_gate.py.
| galilean_gate.sdW = sdf_at(0.0, 0.0, -0.5) |
Definition at line 96 of file galilean_gate.py.
| galilean_gate.mU |
Definition at line 97 of file galilean_gate.py.
| galilean_gate.mV |
Definition at line 97 of file galilean_gate.py.
| galilean_gate.mW |
Definition at line 97 of file galilean_gate.py.
| galilean_gate.bU |
Definition at line 98 of file galilean_gate.py.
| galilean_gate.bV |
Definition at line 98 of file galilean_gate.py.
| galilean_gate.bW |
Definition at line 98 of file galilean_gate.py.
| galilean_gate.dU |
Definition at line 99 of file galilean_gate.py.
| galilean_gate.dV |
Definition at line 99 of file galilean_gate.py.
| galilean_gate.dW |
Definition at line 99 of file galilean_gate.py.
| galilean_gate.uA |
Definition at line 101 of file galilean_gate.py.
| galilean_gate.vA |
Definition at line 101 of file galilean_gate.py.
| galilean_gate.wA |
Definition at line 101 of file galilean_gate.py.
| galilean_gate.divA |
Definition at line 101 of file galilean_gate.py.
| galilean_gate.imbA |
Definition at line 101 of file galilean_gate.py.
| galilean_gate.itA |
Definition at line 101 of file galilean_gate.py.
| galilean_gate.ftA |
Definition at line 101 of file galilean_gate.py.
| galilean_gate.frA |
Definition at line 101 of file galilean_gate.py.
| galilean_gate.uB |
Definition at line 108 of file galilean_gate.py.
| galilean_gate.vB |
Definition at line 108 of file galilean_gate.py.
| galilean_gate.wB |
Definition at line 108 of file galilean_gate.py.
| galilean_gate.divB |
Definition at line 108 of file galilean_gate.py.
| galilean_gate.imbB |
Definition at line 108 of file galilean_gate.py.
| galilean_gate.itB |
Definition at line 108 of file galilean_gate.py.
| galilean_gate.ftB |
Definition at line 108 of file galilean_gate.py.
| galilean_gate.frB |
Definition at line 108 of file galilean_gate.py.
| galilean_gate.True |
Definition at line 108 of file galilean_gate.py.
| galilean_gate.wall_flux |
Definition at line 108 of file galilean_gate.py.
Definition at line 109 of file galilean_gate.py.
Definition at line 110 of file galilean_gate.py.
Definition at line 111 of file galilean_gate.py.
Definition at line 112 of file galilean_gate.py.
| galilean_gate.e_all |
Definition at line 123 of file galilean_gate.py.
| galilean_gate.e_band |
Definition at line 123 of file galilean_gate.py.
| galilean_gate.e_deep |
Definition at line 123 of file galilean_gate.py.
| galilean_gate.keep = e_all |
Definition at line 139 of file galilean_gate.py.
| int galilean_gate.ok = e_all < 1e-4 |
Definition at line 140 of file galilean_gate.py.