Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Sea surface temperature and sea-ice cover (see Table 2 above) are available at the usual times, eg hourly for the HRES, but their content is only updated once daily.
  • Mean rates and accumulations at step=0 have values of zero because the length of the processing period is zero.

  • Expand
    titleERA5: mixing CDS and MARS data

    In the ECMWF data archive (MARS), ERA5 data is archived on various native grids. For the CDS disks, ERA5 data have been interpolated and are stored on regular latitude/longitude grids. For more information, see 82870405.

    Storing the data on these different grids can cause incompatibilities, particularly when comparing native spherical harmonic, pressure level, MARS data with CDS disk data on a third, coarse grid.

    Native spherical harmonic, pressure level parameters are comprised of: Geopotential, Temperature, U component of wind, V component of wind, Vertical velocity, Vorticity, Divergence and Relative humidity. When these parameters are retrieved from MARS and a coarse output grid is specified, the default behaviour is that the spherical harmonics are truncated to prevent aliasing on the output grid. The coarser the output grid, the more severe the truncation. This truncation removes the higher wavenumbers, making the data smoother. However, the CDS disk data has been simply interpolated to the third grid, without smoothing.

    This incompatibility is particularly relevant when comparing ERA5.1 data (which are only available from MARS - see 82870405 - and only for 2000-2006) with ERA5 data on the CDS disks.

    The simplest means of minimising such incompatibilities is to retrieve the MARS data on the same grid as that used to store the ERA5 CDS disk data.



  • Expand
    titleERA5: Land-sea mask for wave variables

    The land-sea mask in ERA5 is an invariant field.

    This parameter is the proportion of land, as opposed to ocean or inland waters (lakes, reservoirs, rivers and coastal waters), in a grid box.

    This parameter has values ranging between zero and one and is dimensionless.

    In cycles of the ECMWF Integrated Forecasting System (IFS) from CY41R1 (introduced in May 2015) onwards, grid boxes where this parameter has a value above 0.5 can be comprised of a mixture of land and inland water but not ocean. Grid boxes with a value of 0.5 and below can only be comprised of a water surface. In the latter case, the lake cover is used to determine how much of the water surface is ocean or inland water. 

    The ERA5 land-sea mask provided is not suitable for direct use with wave parameters, as the time variability of the sea ice cover needs to be take into account and wave parameters are undefined for non-sea points.

    In order to produce a land-sea mask for use with wave parameters, users need to download the following ERA5 data (for the required period):

    1. the model bathymetry (Model bathymetry. Fig 1)
    2. the sea ice cover (Sea ice area fraction, Fig 2)

    and combine these data to produce the land-sea mask (Fig 3). See attached pictures:

    Model bathymetry fieldImage AddedSea ice cover fieldImage AddedCombined maskImage Added

    Fig 1: Model bathymetry field                                         Fig 2: Sea ice cover field                                                   Fig 3: Combined mask


    Note

    Please note that sea-ice cover is only updated once daily.

    Please see the Toolbox workflow below to see a possible way to proceed. The results is a carousel of land-sea mask for each time step requested:

    Code Block
    titleToolbox workflow
    collapsetrue
    import cdstoolbox as ct
    
    @ct.application(title='Download data')
    @ct.output.download()
    @ct.output.carousel()
    
    def download_application():
        count = 0
        years=['1980']
        months = [
                '01', #'02', '03',
            #    '04', '05', '06',
            #    '07', '08', '09',
            #    '10', '11', '12'
        ]
    # For hourly data hourly=True
    # For monthly data monthly=True
        hourly = True
        monthly = False
        for yr in years:
            for mn in months:
                if hourly == True:
                    mb,si = get_hourly_data(yr, mn)
                elif monthly == True:
                    mb,si = get_monthly_data(yr, mn)                
                print(mb)
    # Check values are >= 0.0 in the model bathymetry mask
                compare_ge_mb = ct.operator.ge(mb, 0.0)
                print(si)
    # Check values are > 0.5 in the sea ice mask
                compare_ge_si = ct.operator.gt(si, 0.500)
    
    # Invert model bathymetry mask
                new =  ct.operator.add(compare_ge_mb, -1.0)
                new1 =  ct.operator.mul(new, -1.0)
    # Add the Bathymetry Mask to the Sea Ice Mask
                new_all = ct.operator.add(compare_ge_si,new1)
    # Reset scale to land=1, ocean=0
                new_all_final = ct.operator.ge(new_all, 1.0)
                print(new_all_final)
    
                if count == 0:
                   combined_mask = new_all_final
                else:
                   combined_mask = ct.cube.concat([combined_mask, new_all_final], dim = 'time')
                count =  count + 1
    
        renamed_data = ct.cdm.rename(combined_mask, "wavemask")  
        new_data = ct.cdm.update_attributes(renamed_data, attrs={'long_name': 'Wave Land Sea Mask'})
        combined_mask = new_data
        print("combined_mask")  
        print(combined_mask)    
    
    # Plot mask for first timestep
    
        fig_list = ct.cdsplot.geoseries(combined_mask)
        return combined_mask, fig_list
    
    def get_monthly_data(y,m):
        m,s = ct.catalogue.retrieve(
            'reanalysis-era5-single-levels-monthly-means',
            {
                'product_type': 'monthly_averaged_reanalysis',
                'variable': [
                    'model_bathymetry', 'sea_ice_cover',
                ],
                'year': y,
                'month': m,
                'time': '00:00',
            }
        )
        return m, s
        
    def get_hourly_data(y,m):
        m,s = ct.catalogue.retrieve(
            'reanalysis-era5-single-levels',
            {
                'product_type': 'reanalysis',
                'variable': [
                    'model_bathymetry', 'sea_ice_cover',
                ],
                'year': y,
                'month': m,
                'day': [
                '01', '02', '03',
                '04', '05', '06',
                '07', '08', '09',
                '10', '11', '12',
                '13', '14', '15',
                '16', '17', '18',
                '19', '20', '21',
                '22', '23', '24',
                '25', '26', '27',
                '28', '29', '30',
                '31',
                ],
                'time': [
                '00:00', '01:00', '02:00',
                '03:00', '04:00', '05:00',
                '06:00', '07:00', '08:00',
                '09:00', '10:00', '11:00',
                '12:00', '13:00', '14:00',
                '15:00', '16:00', '17:00',
                '18:00', '19:00', '20:00',
                '21:00', '22:00', '23:00',
                ],
    
                }
                )
        return m, s
    
    



Known issues

Currently, we are aware of these issues with ERA5:

...