Index of /L2B_UNC/v1.0

[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[   ]TUD-L2B-EWH_UNC-GRACE_DDK7_0.5x0.5.nc2025-11-17 09:53 1.7G 
[   ]TUD-L2B-EWH_UNC-GRACE_DDK2_0.5x0.5.nc2025-11-17 10:12 1.7G 
[   ]TUD-L2B-EWH_UNC-GRACE_DDK3_0.5x0.5.nc2025-11-17 10:27 1.7G 
[   ]TUD-L2B-EWH_UNC-GRACE_DDK4_0.5x0.5.nc2025-11-17 10:44 1.7G 
[   ]TUD-L2B-EWH_UNC-GRACE_DDK5_0.5x0.5.nc2025-11-17 10:58 1.7G 
[   ]TUD-L2B-EWH_UNC-GRACE_DDK6_0.5x0.5.nc2025-11-17 11:15 1.7G 
[TXT]README.html2026-01-08 10:01 22K 

TUD-L2B-EWH_UNC-GRACE v1.0 DDK{i} 0.5x0.5

TUD-L2B-EWH_UNC-GRACE_DDK{i}_0.5x0.5.nc

Product description

This dataset provides gridded Equivalent Water Height (EWH) which are equivalent on land to Terrestrial Water Storage Anomalies (TWSA) from GRACE and GRACE-FO generated at TU Delft (“TUD”), filtered using the DDK{i} (i=2,...,7) decorrelation filter (Kusche et al., 2009) on a 0.5° × 0.5° global grid. Each file contains monthly fields from 2002–2020. All weighted mean and uncertainty components include gravity signal content from degree 2 to 60. Weights are computed as the normalised square inverses of open ocean RMS using COST-G RL02.1 (Meyer, U., et al. 2025) monthly solutions as a benchmark. Coefficients C20 and C30 are already replaced using TN-14v3 (https://doi.org/10.1029/2019GL085488). The user can add separately the geocenter motion (TN-13) contribution (degree-1), as well remove prominent tidal components (S2, P1, S1, K1, and unmodelled R3).

The novelty in this product, is the consolidation of multiple official GRACE Level-2 spherical harmonic solutions and their uncertainty propagation into a single multi-component uncertainty budget which includes:

  • the GIA trend (Bagge, M., et al. 2023),
  • AOD1B (based on AOe07) (Shihora, L., et al. 2024),
  • solution disparity (includes effects of parametrisation, and ocean tide models),
  • filtering leakage (Dobslaw, H., et al. 2020), with finally
  • degree-1 uncertainty (Swenson, S., D. Chambers, and J. Wahr 2008).
  • This layered GRACE(-FO) Level-2B data product allows the user to have a complete and transparent overview of all uncertainty components, and directly apply those into their data assimilation strategies or other applications.

    Included Variables

    Additionally:

    File name format

    TUD-L2B-EWH_UNC-GRACE_DDK{i}_0.5x0.5.nc
    i = 2, 3, 4, 5, 6, or 7 (Gaussian DDK filter level applied)
    Ancillary post-processing climatological and aliasing tidal fit:
    TUD-L2B-EWH_CLIM-GRACE_DDK{i}_0.5x0.5.nc
    i = 2, 3, 4, 5, 6, or 7 (Gaussian DDK filter level applied)
    

    Period

    04/2002 - 12/2020

    Dimensions

    (time, lat, lon)

    Units

    Variable Definitions

    1. ewh_mean – weighted mean of all processed GRACE solutions. Method: inverse-variance weighting using open-ocean RMS → gives higher weight to cleaner (less noisy) solutions.
    2. ewh_degree1 – ewh degree 1 component (C10, C11, S11). Important for oceanic studies.
    3. ewh_unc_degree1 – ewh degree 1 uncertainty component (C10_std, C11_std, S11_std).
    4. ewh_unc_sols – solution disparity uncertainty. Standard deviation of the solutions after filtering & gridding. Represents effects of processing differences:
    5. ewh_unc_aod1b – AOD1B background model uncertainty. Computed as monthly RMS of 6-hourly AOD1B residuals (AOe07) (Shihora et al., 2024).
    6. ewh_unc_leakage – filtering leakage uncertainty. Leakage scale factor applied based on Dobslaw et al. (2020) methodology. Leakage error = c_ddk{i} × fractional leakage.
      i             DDK7   DDK6   DDK5   DDK4   DDK3   DDK2
      Scale factor  4.4    4.5    4.0    4.5    3.9    2.9
                  
    7. ewh_gia_mean – ensemble mean of GIA trend [cm/year]. Mean of 56 GIA models (Bagge et al., 2023)
    8. ewh_unc_gia – uncertainty on the GIA trend [cm/year]. Standard deviation across the 56 GIA model ensemble.

    Total uncertainty

    ewh_unc_GRACE2(t) =
        ewh_unc_sols2(t) +
        ewh_unc_aod1b2(t) +
        ewh_unc_leakage2(t)
        

    If the user wishes to correct for GIA, the effect on the monthly uncertainty can be computed as:

    ewh_unc_corrGIA(t) [cm] = ewh_unc_gia * abs(t-t0)
    t0 = reference epoch (e.g., 01/01/2008, GGM05C)

    Post-processing of GRACE(-FO)

    ewh_corr(t) = ewh_mean(t) - ewh_gia_mean*(t-t0) - ewh_AliasingTides(t),

    where t is in years and one can compute ewh_AliasingTides(t) using the ancillary data product

    TUD-L2B-EWH_CLIM-GRACE_DDK{i}_0.5x0.5.nc,

    which contains the cosine and sine coefficients C_k and S_k of the kth tide. For further details see Sect. "Additional Post-processing Features".

    Additional Post-processing Features

    To further facilitate the user, we provide a full climatological fit which most importantly includes aliasing tidal coefficients C_k and S_k is provided in

    TUD-L2B-EWH_CLIM-GRACE_DDK{i}_0.5x0.5.nc,

    as:
    ewh_clim(t) = A + B*(t-t0) + 0.5*C*(t-t0)^2 + 
    	D*cos(2pi*(t-t0)) + E*sin(2pi*(t-t0)) + 
    	F*cos(4pi*(t-t0)) + G*sin(4pi*(t-t0)) + 
    	ewh_AliasingTides(t).

    where as usual t0=2008.0, and

    ewh_AliasingTides(t) = Σk C_k*cos(omega_k*(t-t0)) + S_k*sin(omega_k*(t-t0)),

    with omega_k being the angular aliasing frequency (2pi*f_k) of the kth tide.

    All coefficients are provided in units of equivalent water height (EWH) (variable name: ewh_mean_beta), with dimensions (coeff: 17, lat: 360, lon: 720). The coeff dimension corresponds to the following parameters:

    1. bias – constant offset (A) [cm]
    2. trend – linear trend (B) [cm/yr]
    3. acc – quadratic acceleration term (C) [cm/yr2]
    4. annual_cos – annual cosine term (D) [cm]
    5. annual_sin – annual sine term (E) [cm]
    6. semiannual_cos – semi-annual cosine term (F) [cm]
    7. semiannual_sin – semi-annual sine term (G) [cm]
    8. {tide_k}_cos – cosine tidal term (Ck) [cm]
    9. {tide_k}_sin – sine tidal term (Sk) [cm]

    Here, tide_k ∈ {S2, S1, P1, K1, R3}.

    Example: Accessing the coefficients using xarray (Python)

    
    import numpy as np
    import xarray as xr
    import pandas as pd
    
    # function 
    def fractional_year(time):
        """Convert datetime array to absolute fractional years."""
        t = pd.DatetimeIndex(time)
        year = t.year
        doy = t.dayofyear
        days_y = np.where(t.is_leap_year, 366, 365)
        return year + (doy - 1) / days_y
    
    # path to files
    path_ = "Path/to/your/files" # <== change your path here!
    # Open coefficient dataset (no time dimension)
    i_level = 4  # <== choose here your desired filtering strength
    ds_beta = xr.open_dataset(path_ + f"TUD-L2B-EWH_CLIM-GRACE_DDK{i_level}_0.5x0.5.nc")
    varname = "ewh_mean_beta"
    
    # Open main EWH dataset to obtain time axis (and or correct later results)
    ds_ewh = xr.open_dataset(path_ + f"TUD-L2B-EWH_UNC-GRACE_DDK{i_level}_0.5x0.5.nc")
    ewh_tot = ds_ewh["ewh_mean"]
    
    # Construct time array in decimal years
    time = ds_ewh.time
    t_years = fractional_year(time)
    print(t_years)
    
    # Time relative to reference epoch
    # Reference epoch (decimal years)
    tref = 2008.0
    dt = t_years - tref
    
    # Extract coefficients (lat, lon)
    beta = ds_beta[varname]
    
    A = ds_beta[varname].sel(coeff="bias")
    B = ds_beta[varname].sel(coeff="trend")
    C = ds_beta[varname].sel(coeff="acc")
    D = ds_beta[varname].sel(coeff="annual_cos")
    E = ds_beta[varname].sel(coeff="annual_sin")
    F = ds_beta[varname].sel(coeff="semiannual_cos")
    G = ds_beta[varname].sel(coeff="semiannual_sin")
    
    # Reconstruct climatological EWH (time, lat, lon)
    ones_ = xr.DataArray(
            np.ones_like(dt),
            dims=("time",),
            coords={"time": ds_ewh.time},
        )
    
    t_year_centered = xr.DataArray(
            dt,
            dims=("time",),
            coords={"time": ds_ewh.time},
        )
    
    # Expand bias explicitly to time dimension
    signal = beta.sel(coeff="bias").expand_dims(time=t_year_centered.time)
    
     # Polynomial terms
    # if "bias" in beta.coeff:
    #     signal = signal + beta.sel(coeff="bias")*ones_
    
    if "trend" in beta.coeff:
        signal = signal + beta.sel(coeff="trend") * t_year_centered
    
    if "acc" in beta.coeff:
        signal = signal + 0.5 * beta.sel(coeff="acc") * (t_year_centered ** 2)
    
    # Annual & semiannual
    omega_ann = 2 * np.pi
    omega_semi = 2 * np.pi * 2
    
    if "annual_cos" in beta.coeff:
        signal = signal + beta.sel(coeff="annual_cos") * np.cos(omega_ann * t_year_centered)
        signal = signal + beta.sel(coeff="annual_sin") * np.sin(omega_ann * t_year_centered)
    if "semiannual_cos" in beta.coeff:
        signal = signal + beta.sel(coeff="semiannual_cos") * np.cos(omega_semi * t_year_centered)
        signal = signal + beta.sel(coeff="semiannual_sin") * np.sin(omega_semi * t_year_centered)
    
    # Optional: remove selected tidal aliasing terms
    remove_tides = ["S2", "S1", "P1", "R3",  "K1"]
    tides_aliasing_periods = [160.6, 319.1, 170.8, 150.6, 2630]
    
    remove_tides = ["S2", "P1"]
    tides_aliasing_periods = [160.6, 170.8]
    
    
    # initialise
    ewh_aliasing = 0.0
    
    for tide, tide_period in zip(remove_tides, tides_aliasing_periods):
    
        # Retrieve coefficients [cm]
        Ck_cos = beta.sel(coeff=f"{tide}_cos")
        Sk_sin = beta.sel(coeff=f"{tide}_sin")
    
        # Convert period to years
        T_k = tide_period / 365.25
        omega_k = 2 * np.pi / T_k
    
        # Reconstruct tidal aliasing contribution
        ewh_tide_k = (
            Ck_cos * np.cos(omega_k * t_year_centered)
            + Sk_sin * np.sin(omega_k * t_year_centered)
        )
    
        ewh_aliasing += ewh_tide_k
    
    # corrected signal from tidal components
    ewh_corr = ewh_tot - ewh_aliasing
    
    
    

    Contact

    Lead developer: Michal Cuadrat-Grzybowski
    Email: M.Cuadrat-Grzybowski-1@tudelft.nl

    Citation Instructions

    If you use this dataset, please cite:

    Cuadrat-Grzybowski, M., and De Teixeira da Encarnacao, J. (2025).
    TUD-L2B-EWH_UNC_GRACE: Global 0.5°x0.5° monthly equivalent water height user-friendly dataset with comprehensive uncertainty decomposition (Solution disparity, AOD1B uncertainty, DDK leakage error, and GIA ensemble error).
    DOI: http://doi.org/10.4121/4fc748e8-01c7-4f06-87da-653937b078f7

    References