20 gy = np.arange(ny, dtype=np.float64)
21 sdf = np.empty((nx, ny, nz))
22 sdf[:, :, :] = np.minimum(gy - ylo, yhi - gy)[
None, :,
None]
26def run(SolverCls, N, rho=1.0, mu=0.1, dt=50.0, F=0.01, max_steps=400):
29 ylo = round(0.30 * ny) + 0.5
30 yhi = round(0.70 * ny) + 0.5
33 s = SolverCls(nx, ny, nz)
37 s.set_body_force((F, 0.0, 0.0))
38 s.diagnostics.set_velocity_solver_params(200)
39 s.set_solid(
channel_sdf(nx, ny, nz, ylo, yhi), cutcell_pressure=
False)
42 for it
in range(max_steps):
44 u_now = float(s.get_u().max())
45 if it > 5
and abs(u_now - prev) < 1e-7 * (abs(u_now) + 1e-12):
49 U_sim = float(s.get_u().max())
50 U_ana = F * H * H / (8.0 * mu)
51 err = 100.0 * abs(U_sim - U_ana) / U_ana
52 return ny, H, U_sim, U_ana, err