Skip to content

WENO reconstruction of energy density produces diabatic numerical fluxes #215

@glwagner

Description

@glwagner

We have formulated an anelastic equation set that prognoses moist static energy density, which we call $\rho e$. To compute the advection of $\rho e$, we reconstruct it with WENO and advect with model.velocities:

return ( - div_Uc(i, j, k, grid, advection, velocities, energy_density)

As pointed out on #214 this leads to discrete dynamics that dissipate the variance of energy density --- leading to the homogenization of energy density. This behavior, I believe, is the reason why the bomex case develops a spurious cold layer at the bottom. To illustrate this I doubled the resolution, turned off the forcing and boundary fluxes, and ran for one hour. Below I am plotting the horizontal averages of energy density, specific energy $e$, and potential temperature:

Image

The energy density has a strong gradient from the initial condition, decrease from its maximum value at the bottom of the domain. After one hour, due to noise in the initial condition, the energy density has become slightly homogenized (left plot). This is the correct response to WENO advection / dissipation. However, this homogenization in turn produces a spurious cold layer as seen in potential temperature (rightmost panel).

This situation should be nearly adiabatic, which means that it is potential temperature (or equivalently, entropy) which should remain constant --- not energy. That's why the cold layer is spurious.

The best fix for this as far as I can tell is to prognose entropy or potential temperature instead of energy. Evolving entropy for sure is an equivalent application of the first law of thermodynamics (which our moist static energy equation is also designed to respect a la Pauluis). Potential temperature probably can do the same if formulated correctly.

Advecting specific energy rather than energy density could be a hot fix because specific energy has weaker gradients than energy density. I will explore this and post results here. But ultimately I think we probably want to have at least the possibility of evolving potential temperature.

Metadata

Metadata

Assignees

No one assigned

    Labels

    dycore 🌀It's only solving Navier-Stokes, what could possibly go wrong?

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions