LDF

LDF#

The output from the stand-alone LDF configuration is in the link below

Note that LDF is currently run by users. Temporarily, we suggest users walk through the following process:

  1. Install LDF and activate cupid-analysis

  2. Use the CUPiD/helper_scripts/generate_ldf_config_file.py script to generate a LDF config file based on a CUPiD configuration file.

    • cd CUPiD/examples/external_diag_packages

    • ../../helper_scripts/generate_ldf_config_file.py --cupid-config-loc . --ldf-template ../../externals/LDF/config_clm_unstructured_plots.yaml --out-file LDF_config.yaml

  3. Run LDF with the newly created configuration file.

    • ../../externals/LDF/run_adf_diag LDF_config.yaml

Hide code cell content

import os

from IPython.core.display import HTML, Image
from IPython.display import display
import pandas as pd

Hide code cell content

ldf_root = "."
case_name = None
base_case_name = None
start_date = ""
end_date = ""
base_start_date = None
base_end_date = None
key_plots = None
# ldf_root will be external_diag_packages/computed_notebooks/LDF/
# Parameters
case_name = "b.e30_alpha08b.B1850C_LTso.ne30_t232_wgx3.313"
base_case_name = "b.e30_alpha08b.B1850C_LTso.ne30_t232_wgx3.308"
case_nickname = "BLT1850_313"
base_case_nickname = "BLT1850_308"
CESM_output_dir = "/glade/campaign/cesm/development/cross-wg/diagnostic_framework/CESM_output_for_testing"
start_date = "0001-01-01"
end_date = "0044-01-01"
climo_start_year = 24
climo_end_year = 44
base_start_date = "0001-01-01"
base_end_date = "0105-01-01"
base_climo_start_year = 85
base_climo_end_year = 105
obs_data_dir = (
    "/glade/campaign/cesm/development/cross-wg/diagnostic_framework/CUPiD_obs_data"
)
ts_dir = None
lc_kwargs = {"threads_per_worker": 1}
serial = False
ldf_root = "../../examples/313v308/LDF_output/"
key_plots = [
    "GPP_ANN_LatLon_Mean.png",
    "ELAI_ANN_LatLon_Mean.png",
    "TOTECOSYSC_GlobalMean_ANN_TimeSeries_Mean.png",
    "RegionalClimo_Amazonia_RegionalClimo_Mean.png",
]
subset_kwargs = {}
product = "/glade/u/home/dsanders/cesm_dev/CUPiD/examples/313v308/computed_notebooks//lnd/LDF.ipynb"

Hide code cell content

# Want some base case parameter defaults to equal control case values
if base_case_name is not None:
    if base_start_date is None:
        base_start_date = start_date

    if base_end_date is None:
        base_end_date = end_date

# convert start-date and end-date to year range
case_year_range = [int(start_date.split("-")[0]), int(end_date.split("-")[0])]

if (not base_start_date) and (not base_end_date):
    base_case_year_range = None
else:
    base_case_year_range = [
        int(base_start_date.split("-")[0]),
        int(base_end_date.split("-")[0]),
    ]

Hide code cell content

if base_case_year_range:
    base_case_yr_range_str = f"_{base_case_year_range[0]}_{base_case_year_range[1]}"
    alt_base_case_yr_range_str = (
        f"_{base_case_year_range[0]}_{str(int(base_case_year_range[1])-1)}"
    )
else:
    base_case_yr_range_str = ""
    alt_base_case_yr_range_str = ""


possible_ldf_comparison_names = [
    f"{case_name}_{case_year_range[0]}_{case_year_range[1]}_vs_{base_case_name}{base_case_yr_range_str}"
]
possible_ldf_comparison_names.append(
    f"{case_name}_{case_year_range[0]}_{str(int(case_year_range[1])-1)}_vs_{base_case_name}{base_case_yr_range_str}"
)
possible_ldf_comparison_names.append(
    f"{case_name}_{case_year_range[0]}_{str(int(case_year_range[1])-1)}_vs_{base_case_name}{alt_base_case_yr_range_str}"
)
possible_ldf_comparison_names.append(
    f"{case_name}_{case_year_range[0]}_{case_year_range[1]}_vs_{base_case_name}{alt_base_case_yr_range_str}"
)

Hide code cell source

ldf_found = False
for ldf_comparison_name in possible_ldf_comparison_names:
    ldf_root_candidate = os.path.join(ldf_root, ldf_comparison_name)
    if os.path.exists(ldf_root_candidate):
        ldf_found = True
        ldf_root = ldf_root_candidate
        display(
            HTML(
                f'<a href="../LDF/{ldf_comparison_name}/website/index.html" target="_blank" style="font-size: 30px">Full LDF output</a>'
            )
        )
        break

if not ldf_found:
    print("No LDF output found for the specified case and date range.")

Key Metrics from LDF#

Some important things to look at from LDF include a comparison table and a few maps:

Hide code cell source

comparison_table = os.path.join(ldf_root, "amwg_table_comp.csv")
if os.path.isfile(comparison_table):
    table = pd.read_csv(comparison_table)
    display(HTML(table.to_html(index=False, float_format="{:6g}".format)))
variable unit test control diff
TSA K 280.539 280.5 0.039
TV K 281.162 281.136 0.026
PREC mm d$^{-1}$ 2.282 2.295 -0.013
ELAI m${-2}$ m${-2}$ 1.139 1.162 -0.023
FSDS W m$^{-2}$ 197.501 197.359 0.142
FLDS W m$^{-2}$ 295.572 295.423 0.149
QBOT kg/kg 0.0065 0.00648 2e-05
ASA % reflected 29.191 29.131 0.06
RNET W m$^{-2}$ 61.186 70.966 -9.78
FSH W m$^{-2}$ 33.476 33.227 0.249
ET W m$^{-2}$ 36.769 36.912 -0.143
FCTR W m$^{-2}$ 17.118 17.137 -0.019
FGEV W m$^{-2}$ 11.474 11.466 0.008
FCEV W m$^{-2}$ 8.177 8.309 -0.132
QRUNOFF_TO_COUPLER mm d$^{-1}$ 0.955 0.966 -0.011
SNOWDP m 2.254 2.252 0.002
GPP PgC y$^{-1}$ 92.994 93.576 -0.582
NPP PgC y$^{-1}$ 37.596 37.806 -0.21
NEE PgC y$^{-1}$ 1.741 0.55 1.191
NBP PgC y$^{-1}$ -2.346 -1.14 -1.206
NPP_NUPTAKE gC/m^2/s 2.78e-06 2.81e-06 -3e-08
BTRANMN unitless 0.594 0.586 0.008
TOTECOSYSC gC/m^2 18680.7 18530.5 150.207
TOTSOMC_1m PgC 1458.34 1445.32 13.013
ALTMAX m 31.941 32.163 -0.222
TWS mm 7550.03 7566.55 -16.516
SOILWATER_10CM kg/m2 27.799 27.852 -0.053
GRAINC_TO_FOOD PgC y$^{-1}$ 0.43 0.419 0.011
FAREA_BURNED s-1 2.5e-09 2.46e-09 4e-11

Hide code cell source

for path_to_key_plot in key_plots:
    full_path = os.path.join(ldf_root, path_to_key_plot)
    if os.path.isfile(full_path):
        display(Image(full_path))
../_images/da62b7a7fe1f709814af45c0c8f1e8e4e21c881c6520a4e4fb0ed9b7d0ae1c48.png ../_images/b5941232f7006e41382d17ab3364aa7fe3002f04c7a0cb63a256f4b1998c901e.png ../_images/43d477db511fe69d95e2f536d110389509ac4414b6cd421cfc7acd9952724b79.png