11def run(N, mode, mu=0.1, F=0.01, dt=50.0, max_steps=1500):
13 ylo = 0.3 * ny + 0.137
14 yhi = 0.7 * ny - 0.137
16 gy = np.arange(ny, dtype=np.float64) + 0.5
17 sdf = np.minimum(gy - ylo, yhi - gy)[
None, :,
None] * np.ones((nx, ny, nz))
18 lv = max(2, int(np.log2(N)) - 1)
19 s = flow.SolverColocated(nx, ny, nz)
20 s.set_rho(1.0); s.set_mu(mu); s.set_dt(dt); s.set_body_force(F, 0, 0); s.set_advection(
False)
21 s.set_velocity_solver_params(200); s.set_pressure_multigrid(
True, levels=lv)
22 s.set_pressure_pcg(
True, 400, 1e-11); s.set_face_interp(mode)
23 s.set_solid(sdf, cutcell_pressure=
True, pressure_coarse=
"rediscretized")
25 for it
in range(max_steps):
26 s.step(); u = float(s.get_u().max())
27 if it > 10
and abs(u - prev) < 1e-9 * (abs(u) + 1e-30):
break
29 U_sim = float(s.get_u().max()); U_ana = F * H * H / (8.0 * mu)
30 return H, U_sim, U_ana, 100 * abs(U_sim - U_ana) / U_ana