@@ -368,15 +368,14 @@ function edmfx_sgs_vertical_advection_tendency!(
368
368
FT = eltype (params)
369
369
(; ᶜwₗʲs, ᶜwᵢʲs, ᶜwᵣʲs, ᶜwₛʲs, ᶜtsʲs) = p. precomputed
370
370
371
- ᶜinv_ρ̂_∂ρ̂∂z = (@. lazy (divide_by_ρa (FT (1 ), Y. c. sgsʲs.:($$ j). ρa, FT (0 ), Y. c. ρ, turbconv_model) * ᶜgradᵥ (ᶠinterp (Y. c. sgsʲs.:($$ j). ρa))))
372
371
ᶠwₗ³ʲs = (@. lazy ( CT3 (ᶠinterp (Geometry. WVector (- 1 * ᶜwₗʲs.:($$ j))))))
373
372
ᶠwᵢ³ʲs = (@. lazy ( CT3 (ᶠinterp (Geometry. WVector (- 1 * ᶜwᵢʲs.:($$ j))))))
374
373
ᶠwᵣ³ʲs = (@. lazy ( CT3 (ᶠinterp (Geometry. WVector (- 1 * ᶜwᵣʲs.:($$ j))))))
375
374
ᶠwₛ³ʲs = (@. lazy ( CT3 (ᶠinterp (Geometry. WVector (- 1 * ᶜwₛʲs.:($$ j))))))
376
375
377
376
ᶜa = (@. lazy (draft_area (Y. c. sgsʲs.:($$ j). ρa, ᶜρʲs.:($$ j))))
378
377
379
- # Flux form vertical advection of rho * area with sedimantation contributions
378
+ # Flux form vertical advection of rho * area with sedimentation contributions
380
379
vtt = vertical_transport (ᶜρʲs.:($ j), ᶠwₗ³ʲs, (@. lazy (ᶜa * Y. c. sgsʲs.:($$ j). q_liq)), dt, edmfx_upwinding)
381
380
@. Yₜ. c. sgsʲs.:($$ j). ρa += vtt
382
381
vtt = vertical_transport (ᶜρʲs.:($ j), ᶠwᵢ³ʲs, (@. lazy (ᶜa * Y. c. sgsʲs.:($$ j). q_ice)), dt, edmfx_upwinding)
@@ -400,25 +399,79 @@ function edmfx_sgs_vertical_advection_tendency!(
400
399
@. Yₜ. c. sgsʲs.:($$ j). q_tot += (1 - Y. c. sgsʲs.:($$ j). q_tot) * va
401
400
@. Yₜ. c. sgsʲs.:($$ j). q_sno += va
402
401
403
- # q_tot and moisture tracers terms proportional to 1/ρ̂ ∂zρ̂
402
+ # mse advective form advection with sedimentation velocity
403
+ (; ᶜΦ) = p. core
404
+ thp = CAP. thermodynamics_params (params)
405
+ ᶜmseₗ = (@. lazy (Y. c. sgsʲs.:($$ j). q_liq * (TD. internal_energy_liquid (thp, ᶜtsʲs.:($$ j)) + TD. gas_constant_air (thp, ᶜtsʲs.:($$ j)) * TD. air_temperature (thp, ᶜtsʲs.:($$ j)) + ᶜΦ)))
406
+ ᶜmseᵢ = (@. lazy (Y. c. sgsʲs.:($$ j). q_ice * (TD. internal_energy_ice (thp, ᶜtsʲs.:($$ j)) + TD. gas_constant_air (thp, ᶜtsʲs.:($$ j)) * TD. air_temperature (thp, ᶜtsʲs.:($$ j)) + ᶜΦ)))
407
+ ᶜmseᵣ = (@. lazy (Y. c. sgsʲs.:($$ j). q_rai * (TD. internal_energy_liquid (thp, ᶜtsʲs.:($$ j)) + TD. gas_constant_air (thp, ᶜtsʲs.:($$ j)) * TD. air_temperature (thp, ᶜtsʲs.:($$ j)) + ᶜΦ)))
408
+ ᶜmseₛ = (@. lazy (Y. c. sgsʲs.:($$ j). q_sno * (TD. internal_energy_ice (thp, ᶜtsʲs.:($$ j)) + TD. gas_constant_air (thp, ᶜtsʲs.:($$ j)) * TD. air_temperature (thp, ᶜtsʲs.:($$ j)) + ᶜΦ)))
409
+
410
+ va = vertical_advection (ᶠwₗ³ʲs, ᶜmseₗ, edmfx_upwinding)
411
+ @. Yₜ. c. sgsʲs.:($$ j). mse += va
412
+ va = vertical_advection (ᶠwᵢ³ʲs, ᶜmseᵢ, edmfx_upwinding)
413
+ @. Yₜ. c. sgsʲs.:($$ j). mse += va
414
+ va = vertical_advection (ᶠwᵣ³ʲs, ᶜmseᵣ, edmfx_upwinding)
415
+ @. Yₜ. c. sgsʲs.:($$ j). mse += va
416
+ va = vertical_advection (ᶠwₛ³ʲs, ᶜmseₛ, edmfx_upwinding)
417
+ @. Yₜ. c. sgsʲs.:($$ j). mse += va
418
+
419
+ # mse, q_tot and moisture tracers terms proportional to 1/ρ̂ ∂zρ̂
420
+ ᶜinv_ρ̂ = (@. lazy (divide_by_ρa (FT (1 ), Y. c. sgsʲs.:($$ j). ρa, FT (0 ), Y. c. ρ, turbconv_model)))
421
+ ᶜ∂ρ̂∂zₗ = (@. lazy (upwind_biased_grad (- 1 * Geometry. WVector (ᶜwₗʲs.:($$ j)), Y. c. sgsʲs.:($$ j). ρa)))
422
+ ᶜ∂ρ̂∂zᵢ = (@. lazy (upwind_biased_grad (- 1 * Geometry. WVector (ᶜwᵢʲs.:($$ j)), Y. c. sgsʲs.:($$ j). ρa)))
423
+ ᶜ∂ρ̂∂zᵣ = (@. lazy (upwind_biased_grad (- 1 * Geometry. WVector (ᶜwᵣʲs.:($$ j)), Y. c. sgsʲs.:($$ j). ρa)))
424
+ ᶜ∂ρ̂∂zₛ = (@. lazy (upwind_biased_grad (- 1 * Geometry. WVector (ᶜwₛʲs.:($$ j)), Y. c. sgsʲs.:($$ j). ρa)))
425
+
426
+ @. Yₜ. c. sgsʲs.:($$ j). q_tot -= dot (ᶜinv_ρ̂ * ᶜ∂ρ̂∂zₗ, CT3 (Geometry. WVector (- 1 * ᶜwₗʲs.:($$ j)))) * Y. c. sgsʲs.:($$ j). q_liq * (1 - Y. c. sgsʲs.:($$ j). q_tot)
427
+ @. Yₜ. c. sgsʲs.:($$ j). q_liq -= dot (ᶜinv_ρ̂ * ᶜ∂ρ̂∂zₗ, CT3 (Geometry. WVector (- 1 * ᶜwₗʲs.:($$ j)))) * Y. c. sgsʲs.:($$ j). q_liq
428
+ @. Yₜ. c. sgsʲs.:($$ j). mse -= dot (ᶜinv_ρ̂ * ᶜ∂ρ̂∂zₗ, CT3 (Geometry. WVector (- 1 * ᶜwₗʲs.:($$ j)))) * (Y. c. sgsʲs.:($$ j). q_liq * Y. c. sgsʲs.:($$ j). mse - ᶜmseₗ)
429
+
430
+ @. Yₜ. c. sgsʲs.:($$ j). q_tot -= dot (ᶜinv_ρ̂ * ᶜ∂ρ̂∂zᵢ, CT3 (Geometry. WVector (- 1 * ᶜwᵢʲs.:($$ j)))) * Y. c. sgsʲs.:($$ j). q_ice * (1 - Y. c. sgsʲs.:($$ j). q_tot)
431
+ @. Yₜ. c. sgsʲs.:($$ j). q_ice -= dot (ᶜinv_ρ̂ * ᶜ∂ρ̂∂zᵢ, CT3 (Geometry. WVector (- 1 * ᶜwᵢʲs.:($$ j)))) * Y. c. sgsʲs.:($$ j). q_ice
432
+ @. Yₜ. c. sgsʲs.:($$ j). mse -= dot (ᶜinv_ρ̂ * ᶜ∂ρ̂∂zᵢ, CT3 (Geometry. WVector (- 1 * ᶜwᵢʲs.:($$ j)))) * (Y. c. sgsʲs.:($$ j). q_ice * Y. c. sgsʲs.:($$ j). mse - ᶜmseᵢ)
433
+
434
+ @. Yₜ. c. sgsʲs.:($$ j). q_tot -= dot (ᶜinv_ρ̂ * ᶜ∂ρ̂∂zᵣ, CT3 (Geometry. WVector (- 1 * ᶜwᵣʲs.:($$ j)))) * Y. c. sgsʲs.:($$ j). q_rai * (1 - Y. c. sgsʲs.:($$ j). q_tot)
435
+ @. Yₜ. c. sgsʲs.:($$ j). q_rai -= dot (ᶜinv_ρ̂ * ᶜ∂ρ̂∂zᵣ, CT3 (Geometry. WVector (- 1 * ᶜwᵣʲs.:($$ j)))) * Y. c. sgsʲs.:($$ j). q_rai
436
+ @. Yₜ. c. sgsʲs.:($$ j). mse -= dot (ᶜinv_ρ̂ * ᶜ∂ρ̂∂zᵣ, CT3 (Geometry. WVector (- 1 * ᶜwᵣʲs.:($$ j)))) * (Y. c. sgsʲs.:($$ j). q_rai * Y. c. sgsʲs.:($$ j). mse - ᶜmseᵣ)
437
+
438
+ @. Yₜ. c. sgsʲs.:($$ j). q_tot -= dot (ᶜinv_ρ̂ * ᶜ∂ρ̂∂zₛ, CT3 (Geometry. WVector (- 1 * ᶜwₛʲs.:($$ j)))) * Y. c. sgsʲs.:($$ j). q_sno * (1 - Y. c. sgsʲs.:($$ j). q_tot)
439
+ @. Yₜ. c. sgsʲs.:($$ j). q_sno -= dot (ᶜinv_ρ̂ * ᶜ∂ρ̂∂zₛ, CT3 (Geometry. WVector (- 1 * ᶜwₛʲs.:($$ j)))) * Y. c. sgsʲs.:($$ j). q_sno
440
+ @. Yₜ. c. sgsʲs.:($$ j). mse -= dot (ᶜinv_ρ̂ * ᶜ∂ρ̂∂zₛ, CT3 (Geometry. WVector (- 1 * ᶜwₛʲs.:($$ j)))) * (Y. c. sgsʲs.:($$ j). q_sno * Y. c. sgsʲs.:($$ j). mse - ᶜmseₛ)
441
+ #=
442
+ ᶜinv_ρ̂_∂ρ̂∂z = (@. lazy(divide_by_ρa(FT(1), Y.c.sgsʲs.:($$j).ρa, FT(0), Y.c.ρ, turbconv_model) * ᶜgradᵥ(ᶠinterp(Y.c.sgsʲs.:($$j).ρa))))
404
443
@. Yₜ.c.sgsʲs.:($$j).q_tot -= dot(ᶜinv_ρ̂_∂ρ̂∂z, CT3(Geometry.WVector(-1 * ᶜwₗʲs.:($$j)))) * Y.c.sgsʲs.:($$j).q_liq * (1 - Y.c.sgsʲs.:($$j).q_tot)
405
444
@. Yₜ.c.sgsʲs.:($$j).q_liq -= dot(ᶜinv_ρ̂_∂ρ̂∂z, CT3(Geometry.WVector(-1 * ᶜwₗʲs.:($$j)))) * Y.c.sgsʲs.:($$j).q_liq
445
+ @. Yₜ.c.sgsʲs.:($$j).mse -= dot(ᶜinv_ρ̂_∂ρ̂∂z, CT3(Geometry.WVector(-1 * ᶜwₗʲs.:($$j)))) * (Y.c.sgsʲs.:($$j).q_liq * Y.c.sgsʲs.:($$j).mse - ᶜmseₗ)
446
+
406
447
@. Yₜ.c.sgsʲs.:($$j).q_tot -= dot(ᶜinv_ρ̂_∂ρ̂∂z, CT3(Geometry.WVector(-1 * ᶜwᵢʲs.:($$j)))) * Y.c.sgsʲs.:($$j).q_ice * (1 - Y.c.sgsʲs.:($$j).q_tot)
407
448
@. Yₜ.c.sgsʲs.:($$j).q_ice -= dot(ᶜinv_ρ̂_∂ρ̂∂z, CT3(Geometry.WVector(-1 * ᶜwᵢʲs.:($$j)))) * Y.c.sgsʲs.:($$j).q_ice
449
+ @. Yₜ.c.sgsʲs.:($$j).mse -= dot(ᶜinv_ρ̂_∂ρ̂∂z, CT3(Geometry.WVector(-1 * ᶜwᵢʲs.:($$j)))) * (Y.c.sgsʲs.:($$j).q_ice * Y.c.sgsʲs.:($$j).mse - ᶜmseᵢ)
450
+
408
451
@. Yₜ.c.sgsʲs.:($$j).q_tot -= dot(ᶜinv_ρ̂_∂ρ̂∂z, CT3(Geometry.WVector(-1 * ᶜwᵣʲs.:($$j)))) * Y.c.sgsʲs.:($$j).q_rai * (1 - Y.c.sgsʲs.:($$j).q_tot)
409
452
@. Yₜ.c.sgsʲs.:($$j).q_rai -= dot(ᶜinv_ρ̂_∂ρ̂∂z, CT3(Geometry.WVector(-1 * ᶜwᵣʲs.:($$j)))) * Y.c.sgsʲs.:($$j).q_rai
453
+ @. Yₜ.c.sgsʲs.:($$j).mse -= dot(ᶜinv_ρ̂_∂ρ̂∂z, CT3(Geometry.WVector(-1 * ᶜwᵣʲs.:($$j)))) * (Y.c.sgsʲs.:($$j).q_rai * Y.c.sgsʲs.:($$j).mse - ᶜmseᵣ)
454
+
410
455
@. Yₜ.c.sgsʲs.:($$j).q_tot -= dot(ᶜinv_ρ̂_∂ρ̂∂z, CT3(Geometry.WVector(-1 * ᶜwₛʲs.:($$j)))) * Y.c.sgsʲs.:($$j).q_sno * (1 - Y.c.sgsʲs.:($$j).q_tot)
411
456
@. Yₜ.c.sgsʲs.:($$j).q_sno -= dot(ᶜinv_ρ̂_∂ρ̂∂z, CT3(Geometry.WVector(-1 * ᶜwₛʲs.:($$j)))) * Y.c.sgsʲs.:($$j).q_sno
412
-
413
- # q_tot and moisture tracer terms proportional to velocity gradients
457
+ @. Yₜ.c.sgsʲs.:($$j).mse -= dot(ᶜinv_ρ̂_∂ρ̂∂z, CT3(Geometry.WVector(-1 * ᶜwₛʲs.:($$j)))) * (Y.c.sgsʲs.:($$j).q_sno * Y.c.sgsʲs.:($$j).mse - ᶜmseₛ)
458
+ =#
459
+ # mse, q_tot and moisture tracer terms proportional to velocity gradients
414
460
@. Yₜ. c. sgsʲs.:($$ j). q_tot -= ᶜdivᵥ (ᶠwₗ³ʲs) * Y. c. sgsʲs.:($$ j). q_liq * (1 - Y. c. sgsʲs.:($$ j). q_tot)
415
461
@. Yₜ. c. sgsʲs.:($$ j). q_liq -= ᶜdivᵥ (ᶠwₗ³ʲs) * Y. c. sgsʲs.:($$ j). q_liq
462
+ @. Yₜ. c. sgsʲs.:($$ j). mse -= ᶜdivᵥ (ᶠwₗ³ʲs) * (Y. c. sgsʲs.:($$ j). q_liq * Y. c. sgsʲs.:($$ j). mse - ᶜmseₗ)
463
+
416
464
@. Yₜ. c. sgsʲs.:($$ j). q_tot -= ᶜdivᵥ (ᶠwᵢ³ʲs) * Y. c. sgsʲs.:($$ j). q_ice * (1 - Y. c. sgsʲs.:($$ j). q_tot)
417
465
@. Yₜ. c. sgsʲs.:($$ j). q_ice -= ᶜdivᵥ (ᶠwᵢ³ʲs) * Y. c. sgsʲs.:($$ j). q_ice
466
+ @. Yₜ. c. sgsʲs.:($$ j). mse -= ᶜdivᵥ (ᶠwᵢ³ʲs) * (Y. c. sgsʲs.:($$ j). q_ice * Y. c. sgsʲs.:($$ j). mse - ᶜmseᵢ)
467
+
418
468
@. Yₜ. c. sgsʲs.:($$ j). q_tot -= ᶜdivᵥ (ᶠwᵣ³ʲs) * Y. c. sgsʲs.:($$ j). q_rai * (1 - Y. c. sgsʲs.:($$ j). q_tot)
419
469
@. Yₜ. c. sgsʲs.:($$ j). q_rai -= ᶜdivᵥ (ᶠwᵣ³ʲs) * Y. c. sgsʲs.:($$ j). q_rai
470
+ @. Yₜ. c. sgsʲs.:($$ j). mse -= ᶜdivᵥ (ᶠwᵣ³ʲs) * (Y. c. sgsʲs.:($$ j). q_rai * Y. c. sgsʲs.:($$ j). mse - ᶜmseᵣ)
471
+
420
472
@. Yₜ. c. sgsʲs.:($$ j). q_tot -= ᶜdivᵥ (ᶠwₛ³ʲs) * Y. c. sgsʲs.:($$ j). q_sno * (1 - Y. c. sgsʲs.:($$ j). q_tot)
421
473
@. Yₜ. c. sgsʲs.:($$ j). q_sno -= ᶜdivᵥ (ᶠwₛ³ʲs) * Y. c. sgsʲs.:($$ j). q_sno
474
+ @. Yₜ. c. sgsʲs.:($$ j). mse -= ᶜdivᵥ (ᶠwₛ³ʲs) * (Y. c. sgsʲs.:($$ j). q_sno * Y. c. sgsʲs.:($$ j). mse - ᶜmseₛ)
422
475
end
423
476
end
424
477
end
0 commit comments