@@ -347,29 +347,31 @@ function test_mqg_energies(dev::Device=CPU();
347347
348348 x, y = gridpoints (gr)
349349 k₀, l₀ = 2 π/ gr. Lx, 2 π/ gr. Ly # fundamental wavenumbers
350-
351- nlayers = 2 # these choice of parameters give the
352- f₀, g = 1 , 1 # desired PV-streamfunction relations
353- H = [0.2 , 0.8 ] # q1 = Δψ1 + 25*(ψ2-ψ1), and
354- ρ = [4.0 , 5.0 ] # q2 = Δψ2 + 25/4*(ψ1-ψ2).
355-
356- prob = MultiLayerQG. Problem (nlayers, dev; nx, ny, Lx, Ly, f₀, g, H, ρ)
350+ nlayers = 2
357351
352+ f₀, g = 1 , 1
353+ H = [2.5 , 7.5 ] # sum(params.H) = 10
354+ ρ = [1.0 , 2.0 ] # Make g′ = 1/2
355+
356+ prob = MultiLayerQG. Problem (nlayers, dev; nx, ny, Lx, Ly, f₀, g, H, ρ)
358357 sol, cl, pr, vs, gr = prob. sol, prob. clock, prob. params, prob. vars, prob. grid
359358
360- ψ1, ψ2, q1, q2, ψ1x, ψ2x, q1x, q2x, Δψ2, Δq1, Δq2 = constructtestfields_2layer (gr)
359+ ψ = zeros (dev, eltype (gr), (gr. nx, gr. ny, nlayers))
360+
361+ CUDA. @allowscalar @views @. ψ[:, :, 1 ] = cos (2 k₀ * x) * cos (2 l₀ * y)
362+ CUDA. @allowscalar @views @. ψ[:, :, 2 ] = 1 / 2 * cos (2 k₀ * x) * cos (2 l₀ * y)
361363
362- qf = zeros (dev, eltype (gr), (gr. nx, gr. ny, nlayers))
363- CUDA. @allowscalar @views qf[:, :, 1 ] .= q1
364- CUDA. @allowscalar @views qf[:, :, 2 ] .= q2
364+ MultiLayerQG. set_ψ! (prob, ψ)
365365
366- MultiLayerQG. set_q! (prob, qf)
366+ KE1_calc = 1 / 4 # = H1/H
367+ KE2_calc = 3 / 4 / 4 # = H2/H/4
368+ PE_calc = 1 / 16 / 10 # = 1/16/H
367369
368370 KE, PE = MultiLayerQG. energies (prob)
369371
370- return isapprox (KE[1 ], 61 / 640 * 1e-6 , rtol= rtol_multilayerqg) &&
371- isapprox (KE[2 ], 3 * 1e-6 , rtol= rtol_multilayerqg) &&
372- isapprox (PE[1 ], 1025 / 1152 * 1e-6 , rtol= rtol_multilayerqg) &&
372+ return isapprox (KE[1 ], KE1_calc , rtol= rtol_multilayerqg) &&
373+ isapprox (KE[2 ], KE2_calc , rtol= rtol_multilayerqg) &&
374+ isapprox (PE[1 ], PE_calc , rtol= rtol_multilayerqg) &&
373375 MultiLayerQG. addforcing! (prob. timestepper. RHS₁, sol, cl. t, cl, vs, pr, gr)== nothing
374376end
375377
0 commit comments