Surface fluxes
The surfaces fluxes in SpeedyWeather represent the exchange of momentum, heat, and humidity/moisture between ocean and land as surface into or out of the lowermost atmospheric layer. Surface fluxes of momentum represent a drag that the boundary layer wind experiences due to friction over more or less rough ground on land or over sea. Surface fluxes of heat represent a sensible heat flux from a warmer or colder ocean or land into or out of the surface layer of the atmosphere. Surface fluxes of humidity represent evaporation of sea water or condensation of humidity onto the ocean surface. Similarly, humidity fluxes over land with a given soil moisture and vegetation's evapotranspiration.
Surface flux implementations
Currently implemented surface fluxes of momentum are
using SpeedyWeather
subtypes(SpeedyWeather.AbstractSurfaceMomentumFlux)1-element Vector{Any}:
SurfaceMomentumFluxInterdependence of surface flux computations
model.surface_condition extrapolates atmospheric variables (wind, temperature, humidity) to the surface. model.boundary_layer computes centrally a drag coefficient for surface momentum, heat and humidity fluxes. Setting model.surface_condition = nothing or model.boundar_layer = nothing will therefore disable all other surface fluxes unless those are have use_boundar_layer_drag = false which lets them use independently their own drag coefficient.
with more explanation below. The surface heat fluxes currently implemented are
subtypes(SpeedyWeather.AbstractSurfaceHeatFlux)5-element Vector{Any}:
PrescribedLandHeatFlux
PrescribedOceanHeatFlux
SurfaceHeatFlux
SurfaceLandHeatFlux
SurfaceOceanHeatFluxand the surface humidity fluxes (this does not include Convection or Large-scale condensation those are precipitation) implemented are
subtypes(SpeedyWeather.AbstractSurfaceHumidityFlux)5-element Vector{Any}:
PrescribedLandHumidityFlux
PrescribedOceanHumidityFlux
SurfaceHumidityFlux
SurfaceLandHumidityFlux
SurfaceOceanHumidityFluxThe calculation of thermodynamic quantities at the surface (air density, temperature, humidity) are handled by
subtypes(SpeedyWeather.AbstractSurfaceCondition)1-element Vector{Any}:
SurfaceConditionand the computation of drag coefficients (which is used by default for the surface fluxes above) is handled through the model.boundary_layer where currently implemented are
subtypes(SpeedyWeather.AbstractBoundaryLayer)2-element Vector{Any}:
BulkRichardsonDrag
ConstantDragFluxes to tendencies
In SpeedyWeather.jl, parameterizations can be defined either in terms of tendencies for a given layer or as fluxes between two layers including the surface flux and a top-of-the-atmosphere flux. The upward flux
A quick overview of the units
| Quantity | Variable | Unit | Flux unit |
|---|---|---|---|
| Momentum | Velocity | ||
| Heat | Temperature | ||
| Moisture | Specific humidity |
The time-stepping in SpeedyWeather.jl (see Time integration) eventually requires tendencies which are calculated from the absorbed fluxes of momentum
with gravity
The temperature tendency is calculated from the absorbed heat flux as
with heat capacity of air at constant pressure
Bulk Richardson-based drag coefficient
All surface fluxes depend on a dimensionless drag coefficient
with
with
which depends on the temperature
to simplify the drag coefficient calculation to
with
Surface momentum fluxes
The surface momentum flux is calculated from the surface wind velocities
meaning it is scaled down by
such that for low wind speeds the fluxes are somewhat higher because of unresolved winds on smaller time and length scales. The momentum flux is then
with
Surface heat fluxes
The surface heat flux is proportional to the difference of the surface air temperature
in
Surface humidity fluxes
The surface humidity flux, i.e. evaporation/condensation of soil moisture over land and evaporation of sea water over the ocean or condensation of humidity on the ocean surface is proportional to the difference of the surface specific humidity
The surface humidity flux in
with
following the Fortran SPEEDY documentation[^SPEEDY] which follows Viterbo and Beljiars 1995 [^Viterbo95]. The variables (or spatially prescribed arrays) are water content in the top soil layer model.land.geometry), soil wetness at field capacity (volume fraction)
Land-sea mask
SpeedyWeather uses a fractional land-sea mask, i.e. for every grid-point
1 indicates land
0 indicates ocean
a value in between indicates a grid-cell partially covered by ocean and land
The land-sea mask determines solely how to weight the surface fluxes coming from land or from the ocean. For the sensible heat fluxes this uses land and sea surface temperatures and weights the respective fluxes proportional to the fractional mask. Similar for humidity fluxes. You can therefore define an ocean on top of a mountain, or a land without heat fluxes when the land-surface temperature is not defined, i.e. NaN. Let
but
Setting the land-sea mask to ocean therefore will disable any fluxes that may come from land, and vice versa. However, with an ocean-everywhere land-sea mask you must also define sea surface temperatures everywhere, otherwise the fluxes in those regions will be zero.
For more details see The land-sea mask implementation section.
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.
[^SPEEDY]: Franco Molteni and Fred Kucharski, 20??. Description of the ICTP AGCM (SPEEDY) Version 41. https://users.ictp.it/~kucharsk/speedy_description/km_ver41_appendixA.pdf
[^Viterbo95]: Viterbo, P., and A. C. M. Beljaars, 1995: An Improved Land Surface Parameterization Scheme in the ECMWF Model and Its Validation. J. Climate, 8, 2716-2748, DOI:10.1175/1520-0442(1995)008<2716:AILSPS>2.0.CO;2.