24 X, Y = np.meshgrid(ix, ix, indexing=
"ij")
25 u2 = U0 * amp * np.sin(k * X) * np.cos(k * Y)
26 v2 = -U0 * amp * np.cos(k * X) * np.sin(k * Y)
27 u = np.repeat(u2[:, :,
None], nz, axis=2)
28 v = np.repeat(v2[:, :,
None], nz, axis=2)
29 w = np.zeros((N, N, nz))
30 return (np.asfortranarray(u), np.asfortranarray(v), np.asfortranarray(w))
33def run(SolverCls, N, nz=4, U0=1.0, rho=1.0, nu=0.05, dt=0.5, steps=100):
35 s = SolverCls(N, N, nz)
40 s.set_velocity_solver_params(80)
41 sdf = np.asfortranarray(np.ones((N, N, nz)) * 1e3)
42 s.set_solid(sdf, cutcell_pressure=
True)
44 s.set_state(u0, v0, w0)
46 for _
in range(steps):
50 amp = np.exp(-2.0 * nu * k * k * T)
52 uu, vv = s.get_u(), s.get_v()
53 num = np.sqrt(np.mean((uu - ue) ** 2 + (vv - ve) ** 2))
54 den = np.sqrt(np.mean(u0 ** 2 + v0 ** 2))
57 e_now = float(np.mean(uu ** 2 + vv ** 2))
58 e_ini = float(np.mean(u0 ** 2 + v0 ** 2))
59 ratio_meas = e_now / e_ini
61 div = float(s.max_open_divergence())
62 return l2, div, ratio_meas, ratio_ana