30 b = geom.SceneBuilder()
32 if kind ==
"difference":
33 slab = b.add_leaf(
"box", [L * 0.7, NY * 2.0, L * 0.7])
34 cav = b.add_leaf(
"box", [HW, NY * 2.0, HW])
35 node = b.add_difference(slab, cav)
36 ni, nr, _, _ = b.encode()
37 ii = np.zeros((1, KI_I), dtype=np.int32); ir = np.zeros((1, KI_R))
38 ii[0] = (node, -1); ir[0, 0:3] = (x0, 0.5 * NY, x0); ir[0, 6] = 1.0; ir[0, 7] = 1.0
40 elif kind
in (
"sphere0+duct1",
"duct0+sphere1"):
41 slab = b.add_leaf(
"box", [L * 0.7, NY * 2.0, L * 0.7])
42 cav = b.add_leaf(
"box", [HW, NY * 2.0, HW])
43 node = b.add_difference(slab, cav)
44 sph = b.add_leaf(
"sphere", [4.0])
45 ni, nr, _, _ = b.encode()
46 ii = np.zeros((2, KI_I), dtype=np.int32); ir = np.zeros((2, KI_R))
47 d, p = (1, 0)
if kind ==
"sphere0+duct1" else (0, 1)
48 ii[d] = (node, -1); ir[d, 0:3] = (x0, 0.5 * NY, x0)
49 ii[p] = (sph, -1); ir[p, 0:3] = (x0, 0.5 * NY + OFF, x0)
50 ir[:, 6] = 1.0; ir[:, 7] = 1.0
54 thick = (L - 2 * HW) / 2 + 2.0
55 bx = b.add_leaf(
"box", [thick / 2, NY * 2.0, L * 0.7])
56 bz = b.add_leaf(
"box", [L * 0.7, NY * 2.0, thick / 2])
57 ni, nr, _, _ = b.encode()
58 ii = np.zeros((4, KI_I), dtype=np.int32); ir = np.zeros((4, KI_R))
59 cen = [(x0 - HW - thick / 2, bx), (x0 + HW + thick / 2, bx)]
60 ii[0] = (bx, -1); ir[0, 0:3] = (x0 - HW - thick / 2, 0.5 * NY, x0)
61 ii[1] = (bx, -1); ir[1, 0:3] = (x0 + HW + thick / 2, 0.5 * NY, x0)
62 ii[2] = (bz, -1); ir[2, 0:3] = (x0, 0.5 * NY, x0 - HW - thick / 2)
63 ii[3] = (bz, -1); ir[3, 0:3] = (x0, 0.5 * NY, x0 + HW + thick / 2)
65 ir[i, 6] = 1.0; ir[i, 7] = 1.0
68 s.set_scene(np.asarray(ni, np.int32), np.asarray(nr, float), ii.ravel(), ir.ravel(),
71 for i
in (MOVE
if kind
in (
"sphere0+duct1",
"duct0+sphere1")
else range(ninst)):
72 s.set_instance_motion(i, lin_vel=[0.0, U, 0.0])
73 s.set_solid_from_scene(
True)
74 s.set_velocity(1, np.full((L, NY, L), U, dtype=np.float64, order=
"F"))
75 v0 = float(np.asarray(s.get_v()).sum())
77 for k
in range(STEPS):
79 if k
in (0, 9, 49, STEPS - 1):
80 out.append((k + 1, float(np.asarray(s.get_v()).sum()) / v0))