Skip to content

Large-scale condensation

Large-scale condensation in an atmospheric general circulation represents the micro-physics that kick in when an air parcel reaches saturation. Subsequently, the water vapor inside it condenses, forms droplets around condensation nuclei, which grow, become heavy and eventually fall out as precipitation. This process is never actually representable at the resolution of global (or even regional) atmospheric models as typical cloud droplets have a size of micrometers. Atmospheric models therefore rely on large-scale quantities such as specific humidity, pressure and temperature within a given grid cell, even though there might be considerable variability of these quantities within the area covered by that grid cell. Higher resolution would use more grid cells within the same area, resolving more variability that averaged out at lower resolution.

Condensation implementations

Currently implemented are

julia
using SpeedyWeather
subtypes(SpeedyWeather.AbstractCondensation)
1-element Vector{Any}:
 ImplicitCondensation

which are described in the following.

Explicit large-scale condensation

We parameterize this process of large-scale condensation when relative humidity in a grid cell reaches saturation and remove the excess humidity quickly (given time integration constraints, see below) and with an implicit (in the time integration sense) latent heat release. Vertically integrating the tendency of specific humidity due to this process is then the large-scale precipitation.

Immediate condensation of humidity   at time step given its saturation humidity calculated from temperature is

This condensation is explicit in the time integration sense, meaning that we only use quantities at time step to calculate the tendency. The latent heat release of that condensation is in the second equation. However, treating this explicitly poses the problem that because the saturation humidity is calculated from the current temperature , which is increased due to the latent heat release, the humidity after this time step will be undersaturated.

Implicit large-scale condensation

Ideally, one would want to condense towards the new saturation humidity at   so that condensation draws the relative humidity back down to 100% not below it. Taylor expansion at of the equation above with and    (and similarly) to first order yields

Now we make a linear approximation to the derivative and drop the term. Inserting the (explicit) latent heat release yields

And solving for yields

meaning that the implicit immediate condensation can be formulated as (see also [^Frierson2006])

With Euler forward time stepping this is great, but with our leapfrog timestepping + RAW filter this is very dispersive (see #445) although the implicit formulation is already much better. We therefore introduce a time step which makes the implicit condensation not immediate anymore but over several time steps of the leapfrogging.

For   we have an immediate condensation, for   condensation takes place over time steps. One could tie this time scale for condensation to a physical unit, like 6 hours, but because the time step here is ideally short, but cannot be too short for numerical stability, we tie it here to the time step of the numerical integration. This also means that at higher resolution condensation is more immediate than at low resolution, but the dispersive time integration of this term is in all cases similar (and not much higher at lower resolution).

The above implied that condensation takes place at 100% relative humidity as we are directly comparing the specific humidity to the saturation specific humidity in  . However, in coarse-resolution models there is a good argument that condensation may already take place below a grid-cell average of 100% relative humidity. Given some subgrid-scale variability parts of the grid cells may condense even though the average humidity is below 100%. To change this threshold one can introduce a parameter , e.g.   for condensation to take place at 95% relative humidity, as follows

is a linear scale and therefore can be taken out of the gradient in the denominator.

Re-evaporation

Reevaporation is a process that requires to compute the downward rain water flux iteratively from the top layer to the bottom layer, we therefore start with   at the top of the atmosphere. We will use it in units of , that is the rainfall rate. But you also may use the mass flux of rain water per second. Which would need to be divided by the water density to convert into a rain rate in , or then multiply with the time step and to get a rainfall amount in meters.

When rainfall is created in one layer but falls through a drier (and often warmer) layer below then the rain water can re-evaporate, effectively causing a humidity flux into lower layers, and reducing the amount of rain that reaches the ground. We parameterize this effect proportional to the difference of humidity to saturation .

So is the evaporated rain in layer as a fraction of the rain water flux into layer from above ( increases top to bottom). is a proportionality constant that effectively parameterizes the effectiveness of reevaporation. For   reevaporation is disabled, for   (though is a global constant) and   evaporation would be immediate, i.e. when the humidity in the layer is zero but is chosen to be on the order of one over the saturation humidity then all rain water would evaporate. We add a to avoid evaporating more rain water than is available. We then convert into a humidity tendency by division with , layer pressure thickness , gravity , but this depends on the units you use for the rain water flux. Since reevaporation takes the same latent heat (though opposite sign) as condensation, this tendency has to be substracted from the large-scale condensation tendency but the implicit time stepping can be used as before if reevaporation is calculated before the latent heat release.

The reevaportation in ImplicitCondensation is controlled by reevaporation (dimensionless), the proportionality constant   here.

julia
spectral_grid = SpectralGrid()
large_scale_condensation = ImplicitCondensation(spectral_grid, reevaporation=0)
ImplicitCondensation{Float32} <: SpeedyWeather.AbstractCondensation
├ relative_humidity_threshold::Float32 = 0.95
├ reevaporation::Float32 = 0.0
├ snow::Bool = true
├ freezing_threshold::Float32 = 263.0
├ melting_threshold::Float32 = 278.0
└ time_scale::Float32 = 3.0

would disable reevaporation reevaporation = 30 instead would be roughly equivalent to immediate evaporation at 30˚C and zero ambient humidity near surface.

Snow fall

We parameterize snow fall if large-scale condensation occurs below a freezing temperature , we currently use    but this may change in future versions, check model.large_scale_condensation for that. Freezing of rain water to snow occurs immediately, so we move the rain water flux to the snow flux   and set the   afterwards, if temperature in that layer is below freezing  . The latent heat release from freezing is then

with latent heat of fusion . As is an order of magnitude smaller than the latent heat of vaporization we add this temperature tendency explicitly in time. The minus sign is to denote that a negative humidity tendency due to freezing condensation (=snow) should release latent heat and therefore warm the air. is if the freezing condition is met (negative because condensation is a negative humidity tendency and to exclude a tendency that is dominated by reevaporation),   otherwise.

Like rain water can reevaporate in the layer so can snow melt in the layer below and turn into rain again. Precipitation often occurs in layers high up in the atmosphere where water may be subject to freezing but if the atmopshere below is warm then there is enough energy available to melt the snow before it reaches the ground. We want to parameterize this effect (otherwise it can easily snow in the tropics).

The available energy in (of air) for melting snow is proportional to the temperature of the air above a melt threshold

We can convert this to a maximum melt rate, i.e. the amount of snow that this energy is able to melt in one time step. Note that for rate we use units of rain water height (or depth) in meters per second what we also use for the snow and rain water fluxes . So this is not the actual snow height as it would have on the ground but if melted to water.

We cap this to so that one cannot melt more snow than there is. This snow melt flux is then subtracted from but added to to move snow water to rain water. The according latent heat required for melting is

But note that we do not add to the humidity tendency as this is a phase transition from snow to rain water and so does not increase water vapor . We solely use this to calculate the rain water concentration in from melting, and translate it to latent heat.

We calculate the melting of a downward snow flux before Re-evaporation. This is such that melting snow becomes rain water and is subject to reevaporation within one layer. This is effectively equivalent to allowing sublimation of snow to water vapor.

Snow can be enabled/disabled with the snow keyword argument, and and (both in Kelvin) can be passed on too, e.g.

julia
spectral_grid = SpectralGrid()
large_scale_condensation = ImplicitCondensation(spectral_grid, snow=true, freezing_threshold=263)
ImplicitCondensation{Float32} <: SpeedyWeather.AbstractCondensation
├ relative_humidity_threshold::Float32 = 0.95
├ reevaporation::Float32 = 30.0
├ snow::Bool = true
├ freezing_threshold::Float32 = 263.0
├ melting_threshold::Float32 = 278.0
└ time_scale::Float32 = 3.0

Large-scale precipitation

The tendencies in units of kg/kg/s are vertically integrated (top to bottom, the direction of pressure ) to diagnose the large-scale precipitation in units of meters

with gravity , water density and time step . is therefore interpreted as the amount of precipitation that falls down during the time step of the time integration. Note that is always negative due to the   condition for saturation, hence is positive only. It is then accumulated over several time steps, e.g. over the course of an hour to yield a typical rain rate of mm/h. The water density is taken as reference density of .

While the above equation to diagnose large-scale precipitation holds, this would include the total precipitation from both rain water and snow water (make sure not to add the snow to rain melt rate). Given that we already compute the rain water and snow water fluxes throughout the column we can also use the fluxes out of the last layer and have   .

A schematic of the large-scale precipitation parameterization is illustrated below:

image

References

[^Frierson2006]: Frierson, D. M. W., I. M. Held, and P. Zurita-Gotor, 2006: A Gray-Radiation Aquaplanet Moist GCM. Part I: Static Stability and Eddy Scale. J. Atmos. Sci., 63, 2548-2566, DOI:10.1175/JAS3753.1.