22def cavity(N, Ra, Pr=0.71, mu=0.05, dt=8.0, steps=3000, tol=1e-5, verbose=False):
24 s = F.Solver(N, N, nz)
25 s.set_rho(1.0); s.set_mu(mu); s.set_dt(dt)
26 s.set_implicit_advection(
True); s.set_outer_iterations(2)
27 for f
in (0, 1, 2, 3):
28 s.set_domain_bc(f, 1, 0.0, 0.0, 0.0)
29 s.set_pressure_geometry(np.asfortranarray(np.full((N, N, nz), 10.0)))
31 s.add_scalar(
"T", diffusivity=alpha, scheme=1, iters=50)
32 s.set_scalar_bc(
"T", 0, 2, 1.0); s.set_scalar_bc(
"T", 1, 2, 0.0)
33 s.set_scalar_bc(
"T", 2, 1, 0.0); s.set_scalar_bc(
"T", 3, 1, 0.0)
34 coeff = Ra * mu * mu / (Pr * N**3)
35 s.set_property_model(
"force_y",
"boussinesq",
"T", [1.0, coeff, 1.0, 0.5])
37 T0 = np.repeat((1.0 - (x + 0.5) / N)[:,
None,
None], N, 1).repeat(nz, 2)
38 s.set_field(
"T", np.asfortranarray(T0.astype(np.float64)))
39 t0 = time.time(); prev =
None
40 for it
in range(steps):
43 u = s.get_u(); um = np.abs(u).max()
44 if prev
is not None and np.abs(u - prev).max() / (um + 1e-30) < tol:
48 Nu = 2.0 * N * (1.0 - T[0, :, :].mean())
49 u, v = s.get_u(), s.get_v()
50 return dict(Nu=Nu, umax=np.abs(u).max() * N / alpha, vmax=np.abs(v).max() * N / alpha,
51 it=it + 1, t=time.time() - t0)
cavity(N, Ra, Pr=0.71, mu=0.05, dt=8.0, steps=3000, tol=1e-5, verbose=False)