flow 1.3.0
Kokkos cut-cell IBM incompressible Navier-Stokes solver + pnm pore extraction
Loading...
Searching...
No Matches
galilean_gate Namespace Reference

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
 

Detailed Description

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.

Function Documentation

◆ run()

galilean_gate.run (   boost,
  wall_flux = True 
)

Definition at line 50 of file galilean_gate.py.

References mean().

◆ sdf_at()

galilean_gate.sdf_at (   offx,
  offy,
  offz 
)

Definition at line 83 of file galilean_gate.py.

◆ worst()

galilean_gate.worst (   masks)

Definition at line 114 of file galilean_gate.py.

◆ l2()

galilean_gate.l2 (   masks)

Definition at line 118 of file galilean_gate.py.

Variable Documentation

◆ N

int galilean_gate.N = int(sys.argv[1]) if len(sys.argv) > 1 else 48

Definition at line 25 of file galilean_gate.py.

◆ RF

float galilean_gate.RF = 0.18

Definition at line 26 of file galilean_gate.py.

◆ R

float galilean_gate.R = RF * N

Definition at line 27 of file galilean_gate.py.

◆ V

float galilean_gate.V = 0.7

Definition at line 28 of file galilean_gate.py.

◆ F

int galilean_gate.F = 1e-3

Definition at line 29 of file galilean_gate.py.

◆ MU

galilean_gate.MU

Definition at line 31 of file galilean_gate.py.

◆ RHO

galilean_gate.RHO

Definition at line 31 of file galilean_gate.py.

◆ DT

galilean_gate.DT

Definition at line 31 of file galilean_gate.py.

◆ STEPS

galilean_gate.STEPS = int(os.environ.get("GAL_STEPS", "260"))

Definition at line 32 of file galilean_gate.py.

◆ CEN

list galilean_gate.CEN
Initial value:
1= [(0.25*N, 0.25*N, 0.25*N), (0.75*N, 0.75*N, 0.25*N),
2 (0.75*N, 0.25*N, 0.75*N), (0.25*N, 0.75*N, 0.75*N)]

Definition at line 34 of file galilean_gate.py.

◆ KN_R

galilean_gate.KN_R

Definition at line 37 of file galilean_gate.py.

◆ KI_I

galilean_gate.KI_I

Definition at line 37 of file galilean_gate.py.

◆ KI_R

galilean_gate.KI_R

Definition at line 37 of file galilean_gate.py.

◆ node_ints

galilean_gate.node_ints = np.array([1, -1, -1], dtype=np.int32)

Definition at line 38 of file galilean_gate.py.

◆ node_reals

float galilean_gate.node_reals = R

Definition at line 39 of file galilean_gate.py.

◆ inst_ints

galilean_gate.inst_ints = np.zeros((len(CEN), KI_I), dtype=np.int32)

Definition at line 41 of file galilean_gate.py.

◆ inst_reals

galilean_gate.inst_reals = np.zeros((len(CEN), KI_R))

Definition at line 42 of file galilean_gate.py.

◆ sdU

galilean_gate.sdU = sdf_at(-0.5, 0.0, 0.0)

Definition at line 94 of file galilean_gate.py.

◆ sdV

galilean_gate.sdV = sdf_at(0.0, -0.5, 0.0)

Definition at line 95 of file galilean_gate.py.

◆ sdW

galilean_gate.sdW = sdf_at(0.0, 0.0, -0.5)

Definition at line 96 of file galilean_gate.py.

◆ mU

galilean_gate.mU

Definition at line 97 of file galilean_gate.py.

◆ mV

galilean_gate.mV

Definition at line 97 of file galilean_gate.py.

◆ mW

galilean_gate.mW

Definition at line 97 of file galilean_gate.py.

◆ bU

galilean_gate.bU

Definition at line 98 of file galilean_gate.py.

◆ bV

galilean_gate.bV

Definition at line 98 of file galilean_gate.py.

◆ bW

galilean_gate.bW

Definition at line 98 of file galilean_gate.py.

◆ dU

galilean_gate.dU

Definition at line 99 of file galilean_gate.py.

◆ dV

galilean_gate.dV

Definition at line 99 of file galilean_gate.py.

◆ dW

galilean_gate.dW

Definition at line 99 of file galilean_gate.py.

◆ uA

galilean_gate.uA

Definition at line 101 of file galilean_gate.py.

◆ vA

galilean_gate.vA

Definition at line 101 of file galilean_gate.py.

◆ wA

galilean_gate.wA

Definition at line 101 of file galilean_gate.py.

◆ divA

galilean_gate.divA

Definition at line 101 of file galilean_gate.py.

◆ imbA

galilean_gate.imbA

Definition at line 101 of file galilean_gate.py.

◆ itA

galilean_gate.itA

Definition at line 101 of file galilean_gate.py.

◆ ftA

galilean_gate.ftA

Definition at line 101 of file galilean_gate.py.

◆ frA

galilean_gate.frA

Definition at line 101 of file galilean_gate.py.

◆ uB

galilean_gate.uB

Definition at line 108 of file galilean_gate.py.

◆ vB

galilean_gate.vB

Definition at line 108 of file galilean_gate.py.

◆ wB

galilean_gate.wB

Definition at line 108 of file galilean_gate.py.

◆ divB

galilean_gate.divB

Definition at line 108 of file galilean_gate.py.

◆ imbB

galilean_gate.imbB

Definition at line 108 of file galilean_gate.py.

◆ itB

galilean_gate.itB

Definition at line 108 of file galilean_gate.py.

◆ ftB

galilean_gate.ftB

Definition at line 108 of file galilean_gate.py.

◆ frB

galilean_gate.frB

Definition at line 108 of file galilean_gate.py.

◆ True

galilean_gate.True

Definition at line 108 of file galilean_gate.py.

◆ wall_flux

galilean_gate.wall_flux

Definition at line 108 of file galilean_gate.py.

◆ du

tuple galilean_gate.du = (uB + V) - uA

Definition at line 109 of file galilean_gate.py.

◆ dv

galilean_gate.dv = vB - vA

Definition at line 110 of file galilean_gate.py.

◆ dw

galilean_gate.dw = wB - wA

Definition at line 111 of file galilean_gate.py.

◆ scale

galilean_gate.scale = max(abs(uA[mU]).max(), 1e-30)

Definition at line 112 of file galilean_gate.py.

◆ e_all

galilean_gate.e_all

Definition at line 123 of file galilean_gate.py.

◆ e_band

galilean_gate.e_band

Definition at line 123 of file galilean_gate.py.

◆ e_deep

galilean_gate.e_deep

Definition at line 123 of file galilean_gate.py.

◆ keep

galilean_gate.keep = e_all

Definition at line 139 of file galilean_gate.py.

◆ ok

int galilean_gate.ok = e_all < 1e-4

Definition at line 140 of file galilean_gate.py.