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: TStep 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