Radiation#

Instrumentation#

The BCO is equipped with a solar and terrestrial radiation measurement station, comprised of 4 radiation sensors attached to a SOLYS2 sun tracker. The instruments were installed on 2015-03-30.

Radiation sensor

More specifically, the apparatus sits on the top of the BCO container, \(4.5\,\mathrm{m}\) above the ground, or \(21.5\,\mathrm{m}\) above mean sea level

The 4 sensors are as follows:

  • shaded pyranometer mounted on table of sun tracker for diffuse radiation (CMP21 by Kipp and Zonen),

  • non-shaded pyranometer mounted on table of sun tracker for diffuse radiation (CMP21 by Kipp and Zonen),

    pyranometers measure solar irradiance from a hemispherical field of view diffuse radiation is the portion of incoming shortwave (SW) radiation due to atmospheric scattering

  • shaded pyrgeometer mounted on table of sun tracker for longwave (LW) radiation (CGR4 by Kipp and Zonen)

  • pyrheliometer mounted on the side of the sun tracker (CPH1 by Kipp and Zonen) points directly into the sun.

Two sets of 4 sensors are used and exchanged simultaneously approximately every two years.

  • Set 1: CMP21 #140337, CMP21 #140356, CGR4 #140034 (replaced by 220446), CHP1 #140059 (replaced by 160388)

  • Set 2: CMP21 #160654, CMP21 #160653, CGR4 #150139, CHP1 #160388

The calibration is done by the DWD in Lindenberg, and the solar irradiance (\(\mathrm{W} \mathrm{m}^{-2}\)), the raw voltages, the sensitivities, and the housing temperatures of each of the 4 sensors are available.

Data Availability#

Housekeeping data is available as .zarr files in the catalog as:

  • BCO.radiation_c1 (2015-03-30 to 2015-10-14)

  • BCO.radiation_c2 (2015-10-15 to present)

And a level 2 product is being tested and can be found under the catalog entry BCO.radiation_l2 (2015-03-30 to present).

import intake

cat = intake.open_catalog("https://tcodata.mpimet.mpg.de/catalog.yaml")
ds_rad = cat.BCO.radiation_l2.to_dask()
ds_rad
/builds/tco/bco/docs/.venv/lib/python3.12/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: 88MB
Dimensions:     (time: 3665382)
Coordinates:
    alt         float64 8B ...
    lat         float64 8B ...
    lon         float64 8B ...
  * time        (time) datetime64[ns] 29MB 2015-03-30T15:17:40 ... 2015-10-13...
Data variables:
    LWD_diff    (time) float32 15MB dask.array<chunksize=(262144,), meta=np.ndarray>
    SWD_diff    (time) float32 15MB dask.array<chunksize=(262144,), meta=np.ndarray>
    SWD_dir     (time) float32 15MB dask.array<chunksize=(262144,), meta=np.ndarray>
    SWD_global  (time) float32 15MB dask.array<chunksize=(262144,), meta=np.ndarray>
Attributes:
    Conventions:           CF-1.12
    _logical_cutoff_date:  2015-10-14T00:00:00Z
    bcoproc_version:       0.0.0.post1564.dev0+f62cdee
    featureType:           timeSeries
    institution:           Max Planck Institute for Meteorology, Hamburg
    license:               CC0-1.0
    location:              The Barbados Cloud Observatory (BCO), Deebles Poin...
    platform:              BCO
    source:                Kipp & Zonen CMP21 (shaded and un-shaded) pyranome...
    summary:               This dataset contains measurements of downwelling ...
    title:                 Radiation data from BCO (Level 2)
    tool_versions:         {"Python": "3.11.2 (main, Apr 28 2025, 14:11:48) [...

Sample Plot#

import matplotlib.pylab as plt
import pandas as pd
import xarray as xr
from pvlib.location import Location

cat = intake.open_catalog("https://tcodata.mpimet.mpg.de/catalog.yaml")
ds_rad = cat.BCO.radiation_l2.to_dask()

# select a few days of interest
subset = ds_rad.sel(time=slice("2015-07-03", "2015-07-05"))

# get clear sky calculated radiation for reference
lat, lon, alt = float(subset.lat), float(subset.lon), float(subset.alt)
bco = Location(lat, lon, 'UTC', alt, name = 'bco')
times = pd.to_datetime(subset.coords['time'].values)
cs = bco.get_clearsky(times).to_xarray().rename({'index': 'time'})
ds_cs = xr.merge([subset, cs])

# plot observed SW vs calculated clear-sky
ds_cs.SWD_global.plot(label='SW from non-shaded pyranometer')
ds_cs.ghi.plot(label='Clear-sky')
plt.legend(loc='upper left')
plt.ylabel('Solar Irradiance [W/m²]')
plt.title('BCO SW radiation vs. clear-sky calculated')
/builds/tco/bco/docs/.venv/lib/python3.12/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),
Text(0.5, 1.0, 'BCO SW radiation vs. clear-sky calculated')
../../_images/71a3d75e78fb5e5e6df59cabf7d82cd28aa51c187afe19606b8d038d92720f7a.png