Run Synsat on ERA5 Data for SEVIRI

Here, we will

  • load ERA5 test data

  • run Synsat on ERA5 for SEVIRI and

  • finally store the Synsats into a netcdf file

Setup Env and Load Libraries

[1]:
import os, sys
os.environ['RTTOV_PYTHON_WRAPPER'] = '/work/bb1262/tools/rttov/rttov-v13.2/wrapper'
[2]:
import synsatipy

from synsatipy.synsat import SynSat

import synsatipy.synsat_example_data as synsat_example_data

Steps towards Synsat

Step I: Initialize Synsat class

[3]:
s = SynSat( synsat_instrument = 'SEVIRI')
... [synsat] set cloud / aerosol file to  /work/bb1262/tools/rttov/rttov-v13.2/rtcoef_rttov13/cldaer_visir/sccldcoef_msg_3_seviri.dat
... [synsat] load coefficient file /work/bb1262/tools/rttov/rttov-v13.2/rtcoef_rttov13/rttov13pred54L/rtcoef_msg_3_seviri_o3.dat
Load successful >>>>> inst_id : 1, nchannels : 6.
 2025/05/07  07:59:50  Load coefficients:
 2025/05/07  07:59:50  /work/bb1262/tools/rttov/rttov-v13.2/rtcoef_rttov13/rttov13pred54L/rtcoef_msg_3_seviri_o3.dat
 2025/05/07  07:59:50  /work/bb1262/tools/rttov/rttov-v13.2/rtcoef_rttov13/cldaer_visir/sccldcoef_msg_3_seviri.dat

Step II: Load Example Data

[4]:
eraname = synsat_example_data.get_example_data( 'era01' )
s.load( eraname, isel = {'time':[23,]} )
... [synsat] read data from file  /work/bb1262/data/era5/medi/2020/era5-3d-medi-2020-09-15.nc

The ERA5 data have been loaded into a data handler. You can inspect the data as follows:

[5]:
era5 = s.synsat.data_handler.input_data
[6]:
print( era5 )
<xarray.Dataset> Size: 94MB
Dimensions:  (time: 1, lon: 213, lat: 61, lev: 137, nhyi: 138, nhym: 137,
              lev_2: 1)
Coordinates:
  * time     (time) datetime64[ns] 8B 2020-09-15T23:00:00
  * lon      (lon) float64 2kB -8.0 -7.75 -7.5 -7.25 ... 44.25 44.5 44.75 45.0
  * lat      (lat) float64 488B 30.0 30.25 30.5 30.75 ... 44.25 44.5 44.75 45.0
  * lev      (lev) float64 1kB 1.0 2.0 3.0 4.0 5.0 ... 134.0 135.0 136.0 137.0
  * lev_2    (lev_2) float64 8B 1.0
Dimensions without coordinates: nhyi, nhym
Data variables: (12/37)
    SSTK     (time, lat, lon) float32 52kB dask.array<chunksize=(1, 61, 213), meta=np.ndarray>
    SLT      (time, lat, lon) float32 52kB dask.array<chunksize=(1, 61, 213), meta=np.ndarray>
    Z        (time, lat, lon) float32 52kB dask.array<chunksize=(1, 61, 213), meta=np.ndarray>
    SP       (time, lat, lon) float32 52kB dask.array<chunksize=(1, 61, 213), meta=np.ndarray>
    TCW      (time, lat, lon) float32 52kB dask.array<chunksize=(1, 61, 213), meta=np.ndarray>
    TCWV     (time, lat, lon) float32 52kB dask.array<chunksize=(1, 61, 213), meta=np.ndarray>
    ...       ...
    lnsp     (time, lev_2, lat, lon) float32 52kB 11.39 11.39 ... 11.52 11.53
    o3       (time, lev, lat, lon) float32 7MB 1.501e-07 1.502e-07 ... 6.895e-08
    clwc     (time, lev, lat, lon) float32 7MB 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0
    ciwc     (time, lev, lat, lon) float32 7MB 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0
    cc       (time, lev, lat, lon) float32 7MB 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0
    p        (lev, time, lat, lon) float64 14MB dask.array<chunksize=(137, 1, 61, 213), meta=np.ndarray>
Attributes:
    CDI:                       Climate Data Interface version 2.0.5 (https://...
    Conventions:               CF-1.6
    institution:               European Centre for Medium-Range Weather Forec...
    history:                   Thu Jun 23 17:15:12 2022: cdo -z zip_3 merge E...
    cdo_openmp_thread_number:  8
    CDO:                       Climate Data Operators version 2.0.5 (https://...
[7]:
era5.time
[7]:
<xarray.DataArray 'time' (time: 1)> Size: 8B
array(['2020-09-15T23:00:00.000000000'], dtype='datetime64[ns]')
Coordinates:
  * time     (time) datetime64[ns] 8B 2020-09-15T23:00:00
Attributes:
    standard_name:  time
    axis:           T

Step III: Setup Run Options and Start Execution

[8]:
s._options.Nthreads=4
s._options.NprofsPerCall = 1000
[9]:
s.run()
/home/b/b380352/proj/2022-01_RTTOV-Synsat/synsatipy-devel/synsatipy/data_handler.py:263: 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`.
  nlevels = profs.dims["lev"]
/home/b/b380352/proj/2022-01_RTTOV-Synsat/synsatipy-devel/synsatipy/data_handler.py:264: 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`.
  nprofiles = profs.dims["profile"]
/home/b/b380352/proj/2022-01_RTTOV-Synsat/synsatipy-devel/synsatipy/utils/spacetools.py:46: RuntimeWarning: invalid value encountered in arccos
  azi = np.arccos( np.sin(phi) / np.sin(delta))
IR emissivity atlas loaded successfully
Atlas deallocated.
 2025/05/07  07:59:54  Running RTTOV using nthreads =    4 and nprofs_per_call =     1000

Step IV: Extract the Output

[10]:
era_synsat = s.extract_output()
[11]:
print( era_synsat )
<xarray.Dataset> Size: 626kB
Dimensions:  (time: 1, lon: 213, lat: 61)
Coordinates:
  * time     (time) datetime64[ns] 8B 2020-09-15T23:00:00
  * lon      (lon) float64 2kB -8.0 -7.75 -7.5 -7.25 ... 44.25 44.5 44.75 45.0
  * lat      (lat) float64 488B 30.0 30.25 30.5 30.75 ... 44.25 44.5 44.75 45.0
Data variables:
    bt062    (time, lon, lat) float64 104kB 229.8 229.4 230.6 ... 233.9 233.6
    bt073    (time, lon, lat) float64 104kB 242.0 239.3 246.3 ... 252.5 251.9
    bt087    (time, lon, lat) float64 104kB 260.2 251.0 268.9 ... 282.4 282.6
    bt108    (time, lon, lat) float64 104kB 257.5 249.2 268.0 ... 285.2 285.5
    bt120    (time, lon, lat) float64 104kB 255.1 247.6 265.6 ... 284.4 284.6
    bt134    (time, lon, lat) float64 104kB 244.6 240.1 252.0 ... 259.3 259.1
Attributes:
    author:                Fabian Senf
    contact:               senf@tropos.de
    institution:           Leibniz Institute for Tropospheric Research
    creation_time:         2025-05-07 07:59:59.231863
    synsat_version:        0.1
    synsat_githash:        4f8b856c0aceda7924506f3c05b728f26ad0190a
    license:               CC-BY SA 3.0
    _local_software_path:  /home/b/b380352/proj/2022-01_RTTOV-Synsat/synsatip...
    input_filename:        /work/bb1262/data/era5/medi/2020/era5-3d-medi-2020...

Step V: Store Data

[12]:
outdir = './Data'

if not os.path.isdir( outdir ):
    os.makedirs( outdir )
outfile = f'{outdir}/seviri_synsat_era5_example_data.nc'

print(f'... store synsat at {outfile}')
era_synsat.to_netcdf(outfile)

... store synsat at ./Data/seviri_synsat_era5_example_data.nc