MCPcopy Create free account
hub / github.com/DedalusProject/dedalus / test_curl_implicit_FFC

Function test_curl_implicit_FFC

dedalus/tests/test_cartesian_operators.py:356–385  ·  view source on GitHub ↗

Test implicit evaluation of 3D curl operator for correctness.

(basis, N, dealias, dtype)

Source from the content-addressed store, hash-verified

354@pytest.mark.parametrize('dealias', dealias_range)
355@pytest.mark.parametrize('dtype', dtype_range)
356def test_curl_implicit_FFC(basis, N, dealias, dtype):
357 """Test implicit evaluation of 3D curl operator for correctness."""
358 c, d, b, r = basis(N, dealias, dtype)
359 # ABC vector field
360 k = 2 * np.pi * np.array([1/Lx, 1/Ly, 1/Lz])
361 f = d.VectorField(c, bases=b)
362 f.preset_scales(dealias)
363 f['g'][0] = np.sin(k[2]*r[2]) + np.cos(k[1]*r[1])
364 f['g'][1] = np.sin(k[0]*r[0]) + np.cos(k[2]*r[2])
365 f['g'][2] = np.sin(k[1]*r[1]) + np.cos(k[0]*r[0])
366 g = d.VectorField(c, bases=b)
367 g.preset_scales(dealias)
368 g['g'][0] = k[2]*np.sin(k[2]*r[2]) + k[1]*np.cos(k[1]*r[1])
369 g['g'][1] = k[0]*np.sin(k[0]*r[0]) + k[2]*np.cos(k[2]*r[2])
370 g['g'][2] = k[1]*np.sin(k[1]*r[1]) + k[0]*np.cos(k[0]*r[0])
371 # Helmholtz LBVP
372 u = d.VectorField(c, name='u', bases=b)
373 phi = d.Field(name='phi', bases=b)
374 tau1 = d.VectorField(c, name='tau1', bases=b[0:2])
375 tau2 = d.Field(name='tau2', bases=b[0:2])
376 lift_basis = b[2].derivative_basis(1)
377 lift = lambda A, n: d3.Lift(A, lift_basis, n)
378 problem = d3.LBVP([u, phi, tau1, tau2], namespace=locals())
379 problem.add_equation("curl(u) + grad(phi) + lift(tau1,-1) = g")
380 problem.add_equation("div(u) + lift(tau2,-1) = 0")
381 problem.add_equation("u(z=0) = f(z=0)")
382 problem.add_equation("phi(z=0) = 0")
383 solver = problem.build_solver()
384 solver.solve()
385 assert np.allclose(u['c'], f['c'])
386

Callers

nothing calls this directly

Calls 8

arrayMethod · 0.80
VectorFieldMethod · 0.80
preset_scalesMethod · 0.80
FieldMethod · 0.80
add_equationMethod · 0.80
build_solverMethod · 0.80
derivative_basisMethod · 0.45
solveMethod · 0.45

Tested by

no test coverage detected