In-cloud vertical motion retrieval#
Florian Poydenot (florian.poydenot@mpimet.mpg.de), August 2026
This folder contains a retrieval of vertical wind inside precipitating shallow clouds, obtained from a radar-based estimate combined with lidar observations. The vertical motion is retrieved from the slowest-moving edge of the radar spectrum, then corrected for SNR and turbulence broadening, following Zhu et al. (2021). For a detailed description of the processing, see Poydenot et al. (2026). The resulting data has 30 m/2 s resolution, with uncertainty of 0.2 m/s above cloud base.
The processing code is available at https://zenodo.org/records/19221500.
Instruments used#
Ka-band radars#
MBR2: August 2019-January 2023
MBRS: January 2023-December 2025
Lidars#
WindLidar1: vertically-pointing mode between March 2016 and October 2019, then between July 2021 and September 2024, and again since September 2025
WindLidar2: VAD scans between March 2019 and July 2021, vertically-pointing mode between September 2024 and September 2025
How to use#
The vertical coordinate is the radar range. Do not use the retrieved winds in deep convective clouds as the retrieval is not suited for this regime (use the provided cloud masks to filter it out).
Data Availability#
The processing is not integrated (yet) into our automated workflows, and as a result, the dataset does not grow by the day but has an end date determined by when the last round of manual processing was run.
import intake
cat = intake.open_catalog("https://tcodata.mpimet.mpg.de/catalog.yaml")
ds = cat.BCO.verticalwind.to_dask()
mbrs = cat.BCO.mbrs.to_dask().sel(range=slice(None, ds.range.values[-1]))
ds
/builds/tco/bco/docs/.venv/lib/python3.14/site-packages/intake_xarray/base.py:21: FutureWarning: The return type of `Dataset.dims` will be changed to return a set of dimension names in future, in order to be more consistent with `DataArray.dims`. To access a mapping from dimension names to lengths, please use `Dataset.sizes`.
'dims': dict(self._ds.dims),
/builds/tco/bco/docs/.venv/lib/python3.14/site-packages/intake_xarray/base.py:21: FutureWarning: The return type of `Dataset.dims` will be changed to return a set of dimension names in future, in order to be more consistent with `DataArray.dims`. To access a mapping from dimension names to lengths, please use `Dataset.sizes`.
'dims': dict(self._ds.dims),
<xarray.Dataset> Size: 239GB
Dimensions: (time: 55424828, range: 187)
Coordinates:
* time (time) datetime64[ns] 443MB 2019-08-01T00:00:14 ......
* range (range) float32 748B 155.9 187.1 ... 5.955e+03
alt float32 4B ...
lat float32 4B ...
lon float32 4B ...
Data variables:
allprecip_mask (time, range) bool 10GB dask.array<chunksize=(131072, 32), meta=np.ndarray>
drizzle_mask (time, range) bool 10GB dask.array<chunksize=(131072, 32), meta=np.ndarray>
id_mask (time, range) int64 83GB dask.array<chunksize=(131072, 32), meta=np.ndarray>
longlived_rain_mask (time, range) bool 10GB dask.array<chunksize=(131072, 32), meta=np.ndarray>
nonprecip_mask (time, range) bool 10GB dask.array<chunksize=(131072, 32), meta=np.ndarray>
rain_mask (time, range) bool 10GB dask.array<chunksize=(131072, 32), meta=np.ndarray>
shortlived_rain_mask (time, range) bool 10GB dask.array<chunksize=(131072, 32), meta=np.ndarray>
unclassified_mask (time, range) bool 10GB dask.array<chunksize=(131072, 32), meta=np.ndarray>
w (time, range) float32 41GB dask.array<chunksize=(131072, 32), meta=np.ndarray>
w_radar (time, range) float32 41GB dask.array<chunksize=(131072, 32), meta=np.ndarray>
Attributes: (12/18)
Conventions: CF-1.12
_logical_cutoff_date: 2024-09-29T00:00:00Z
author: Florian Poydenot (florian.poydenot@uni-hamburg.de)
bcoproc_version: 0.0.0.post2156.dev0+d4f3d45
converted_by: Florian Poydenot (florian.poydenot@uni-hamburg.de)
created_with: make_final_data_netcdf.py
... ...
sensor_alt: 18.5m
source: Ka-Band radar and Doppler wind lidar observations
source_file: /work/um1487/OBS/SCORE/Level_1/B_Reflectivity/Ka-B...
title: Composite lidar-radar retrieval of the cloud-scale...
tool_versions: {"Python": "3.11.2 (main, Apr 28 2025, 14:11:48) [...
version: git-v1.3-132-gfbcc69dSample Plot#
rainy_orcestra = slice("2024-09-23T11:45", "2024-09-23T12:35")
ds.sel(time=rainy_orcestra).w.plot(x="time")
<matplotlib.collections.QuadMesh at 0x7f8d6d543380>
mbrs.sel(time=rainy_orcestra).Ze.plot(x="time")
<matplotlib.collections.QuadMesh at 0x7f8d6d4fe5d0>
References:#
Zhu, Z., Kollias, P., Yang, F. & Luke, E. On the Estimation of In-Cloud Vertical Air Motion Using Radar Doppler Spectra. Geophysical Research Letters 48, e2020GL090682 (2021).
Poydenot, F., Robbins-Blanch, N., Zhu, Z. & Vogel, R. How rain shapes cloud-scale dynamics and mass flux in the trades. EGUsphere 1–25 (2026) doi:10.5194/egusphere-2026-1974.