35 b = geom.SceneBuilder()
36 sph = b.add_leaf(
"sphere", [DH / 2])
37 ni, nr, _, _ = b.encode()
38 ii = np.zeros((1, KI_I), dtype=np.int32); ir = np.zeros((1, KI_R))
40 ii[0] = (sph, -1); ir[0, 0:3] = (x0, y0, x0); ir[0, 6] = 1.0; ir[0, 7] = 1.0
41 s = sdflow.Solver(N, N, N)
42 s.set_rho(1.0); s.set_mu(NU); s.set_dt(DT); s.set_advection(ADV)
43 s.set_velocity_solver_params(60); s.set_pressure_solver_params(20)
44 s.set_pressure_multigrid(
True, levels=4)
45 s.set_scene(np.asarray(ni, np.int32), np.asarray(nr, float), ii.ravel(), ir.ravel(),
47 s.set_solid_from_scene(
True)
59 y0 = 0.72 * N
if moving
else 0.5 * N + OFF
61 s.set_body_force(0.0, B, 0.0)
63 v0 = np.full((N, N, N), U, dtype=np.float64, order=
"F")
65 y = y0; Fh = []; vm = []
66 for k
in range(STEPS):
68 s.set_instance_transform(0, [x0, y, x0])
69 s.set_instance_motion(0, lin_vel=[0.0, -U, 0.0])
72 F = np.asarray(s.hydro_force_torque_reaction())[0][0].astype(float)
74 if k % 50 == 49
or k == STEPS - 1:
75 vmean = float(np.asarray(s.get_v()).
mean())
76 vm.append((k + 1, vmean))
79 bud = np.asarray(s.reaction_budget_terms()).astype(float)
80 return np.array(Fh), vm, bud
84 % (DH, RE, N, DT, STEPS, ADV, B, F_EST))
97 "k=%d:%.3f" % (k, abs(FM[k] - FS[k]) / abs(FS[k]))
for k
in (10, 50, 100, 200, 400, STEPS - 1)))
104 % (bS[0][1], bS[1][1], bM[0][1], bM[1][1]))