Data & Scripts for: Cross-Scale Multiplicative Dynamics Decode the Resilience Paradox of Monsoon Forests Under Compound Extremes

Read full text
Authors: Pan, Wei, Dan, Li, Zheng, Hui, Peng, Jing, Wu, Jian, Yang, Qing, Yang, Fuqiang, Li, Kai, Zhou, Peng, Xing, Liwen, Chen, Jinyan
Cited by: 0

Abstract

Data & Code Archive for the EAM Mechanism Study Manuscript: Enhanced atmospheric water demand (VPD) variability modulates South Chinese Monsoon Forest (SCMF; 20°–35°N, 100°–122°E) summer gross primary productivity anomalies: a Fast-MEEMD, causal (PCMCI), and normalized Hilbert spectral analysis of the 2003 and 2013 heatwaves Version: v2.0 (NHT/DQ upgrade) Date: 2026-09-06 License: This repository is released under CC BY 4.0 (data and code), in line with the AGU Data Policy. Please cite this record and the associated manuscript if you use any part of it. 1. Overview and methodological highlights This self-contained eam/ bundle provides the reproducible scripts, input/intermediate NetCDF data, and derived figures and tables for the mechanism study on how atmospheric water demand (VPD) variability modulates summer GPP anomalies of the South Chinese Monsoon Forests (SCMFs; 20°–35°N, 100°–122°E) during the 2003 and 2013 heatwaves. Two methodological pillars underpin the analysis and must be highlighted: Spatiotemporal separation with Fast-MEEMD.Spatially gridded anomalies are separated into oscillatory modes with physical time scales using Fast Multivariate Ensemble Empirical Mode Decomposition (Fast-MEEMD) — an accelerated realization of the multivariate EEMD approach (MEEMD; Wu, Huang, & Chen, 2009) based on principal-component (PCA/EOF) compression of the spatial field followed by EEMD of the leading principal components (Wang et al., 2014). The separated IMFs (intrinsic mode functions) provide the carrier (high-frequency, sub-seasonal) and modulation (low-frequency, intraseasonal-to-seasonal) bands analyzed in the manuscript. Frequency-domain analysis fully upgraded to the Normalized Hilbert Transform (NHT) with Direct Quadrature (DQ).Instantaneous frequency and phase are extracted with the Normalized Hilbert Transform (NHT) combined with Direct Quadrature (DQ) (Huang et al., 2009), which explicitly removes the amplitude-fluctuation dependence of the analytic signal before phase differentiation. This eliminates phase singularities and spurious (negative/overshoot) instantaneous frequencies that the classical Hilbert transform produces when the Bedrosian and Nuttall conditions are violated — a known limitation of the plain Hilbert approach (Huang et al., 2009). All main-text spectral diagnostics (Figures 6, 8, and 9) and their supplementary counterparts use the NHT/DQ algorithm; a quality-control report quantifying the removed negative-frequency fractions is provided in outputs/tables/qc_nht_report.txt. Causal inference is performed with the PCMCI framework (Runge et al., 2019) on the time-separated components, and band-energy partitioning is quantified from NHT-based marginal spectra. 2. Directory tree eam/ # EAM reproducibility bundle root (EAM_ROOT) ├── README.md # quick-start entry point ├── LICENSE # CC BY 4.0 license (data and code) ├── requirements.txt # Python dependencies (Python >= 3.10) ├── run_revision.sh # one-click re-run of the JGR-BG revision outputs ├── DATA_LARGE_FILES.md # large-file inventory & Zenodo size guidance │ ├── data/ # all inputs and intermediates (see data/README.md) │ ├── README.md │ ├── DATA_COPIED_MANIFEST.md │ ├── raw_inputs/ # el_gpp4ea.nc, el_sm4ea.nc, el_t2m4ea.nc, el_vpd4ea.nc (+ README.md) │ ├── fast_meemd/ # Fast-MEEMD decomposition & IMF artifacts (K = 4/8/20 runs) │ │ ├── fast_meemd_results_{2003,2013}.nc │ │ ├── cfast_input_k{4,20}_{2003,2013}.nc │ │ ├── pc_eemd_results_k4_{2003,2013}.nc │ │ ├── carrier_modulation_k8_{2003,2013}.nc │ │ ├── imf_physics_k8_{2003,2013}.nc (+ _summary/spectral_groups txt) │ │ └── k_sensitivity_results.txt │ ├── forcing_marginal/ # NHT marginal spectra of forcings │ │ └── forcing_marginal_spectrum_{2003,2013}.nc │ ├── pcmci_results/ # PCMCI outputs (+ README.md) │ │ ├── gridded_pcmci_results_{2003,2013}.nc │ │ ├── all_lags_{2003,2013}_ANNUAL.nc │ │ └── README.md │ └── bootstrap_cache/ # bootstrap caches for step2_2 (first run: slow) │ └── *_bootstrap.nc (10 files: gpp_self / sm_to_gpp / t2m_to_gpp / vpd_to_gpp / total × 2003,2013) │ ├── scripts/ # all analysis & plotting code (English) │ ├── eam_paths.py # single source of truth for all paths │ ├── figure1_common.py # shared Figure 1 helpers │ ├── run_all.sh # full pipeline launcher (run as: bash scripts/run_all.sh) │ ├── qc_check_nht.py # NHT quality control (negative-frequency / envelope checks) │ ├── verify_data_coordinates.py # data-coordinate consistency checks │ ├── step0_0_figure1a_gpp_seasonal_maps.py # Figure 1a │ ├── step0_0_figure1b_regional_mean_timeseries.py # Figure 1b │ ├── step0_1_create_table1.py # Table 1 │ ├── step1_jphs_analysis.py # Figure 2 (joint PDF heatmaps) │ ├── step2_0_pcmci_annual_gridded.py # gridded annual PCMCI (needs annual_inputs/) │ ├── step2_1_pcmci_failure.py # Figure 3 (failure maps + metric CSVs) │ ├── step2_2_bootstrap_robustness.py # Figure 3 (bootstrap robustness) │ ├── step2_3_create_table2.py # Table 2 │ ├── step2_3_create_table_s1.py # Table S1 (PCMCI parameter documentation) │ ├── step3_0_figure4_k_sensitivity_scan.py # Figure 4 (K sensitivity / EOF selection) │ ├── step3_1_imf_physics_check.py # Figure 5 + SI Figs S2–S3 (IMF period, KDE/KL) │ ├── step3_2_create_table_s2.py # Table S2 (IMF characteristics) │ ├── step3_3_create_table3_imf_characteristics.py # Table 3 │ ├── step3_fast_meemd_pc_eemd.py # Fast-MEEMD decomposition (heavy; regenerates data/fast_meemd/) │ ├── step3_fast_meemd_reconstruction.py # field reconstruction from IMFs │ ├── step3_fast_meemd_separate.py # spatiotemporal separation helper │ ├── step4_1_figure7_energy_maps.py # Figure 7 (spatial energy-ratio maps) │ ├── step4_1_figure8_imf_spectral_diagnosis.py # Figure 8 (IMF energy–period, NHT) [AUTHORITATIVE] │ ├── step4_2_figure9_pc1_hht_spectrum.py # Figure 9 (PC1 time series + NHT spectrum) [AUTHORITATIVE] │ ├── step4_2_figure8_imf_spectral_diagnosis.py # legacy duplicate of step4_1_figure8 (kept for continuity) │ ├── step4_0_figure6_forcing_marginal_spectrum.py # legacy duplicate of step5_1_figure6 (kept for continuity) │ ├── step5_0_figure9_pc1_hht_spectrum.py # legacy duplicate of step4_2_figure9 (kept for continuity) │ ├── step5_1_figure6_forcing_marginal_spectrum.py # SI Figure S4 (marginal spectra) + Figure 6 (band energy, NHT) [AUTHORITATIVE] │ ├── step6_2_plot_figure_s1_eof_spatial_patterns.py # SI Figure S1 (EOF 1-8 spatial loadings) │ ├── step6_3_plot_figure_s5_nht_validation.py # SI Figure S5 (HT vs NHT/DQ validation) │ ├── step6_4_create_table_s4_nht_qc.py # Table S4 (NHT QC metrics) │ └── step5_1_create_table_s3_forcing_energy_gain.py # Table S3 │ ├── outputs/ │ ├── figures/ # main-text figures & tables-as-text (SI PNGs/tables live in supplementary/) │ │ ├── figure1a_gpp_seasonal_maps_2003_2013.png │ │ ├── figure1b_regional_mean_timeseries_2003_2013.png │ │ ├── figure2_joint_probability_heatmaps_2003_2013.png │ │ ├── figure3_pcmci_failure.png │ │ ├── figure3_bootstrap_robustness.png │ │ ├── figure4_k_sensitivity_eof_optimization.png │ │ ├── figure5_imf_period_kde_kld_2003_2013.png │ │ ├── figure6_forcing_carrier_modulation_partition.png (NHT; legend: IMF 1-3 vs IMF 4-7) │ │ ├── figure7_energy_ratio_maps_2003_2013.png │ │ ├── figure8_imf_energy_period_distribution_2003_2013.png (NHT) │ │ ├── figure9_pc1_timeseries_hht_spectrum_2003_2013_01.png (NHT, split panel 1) │ │ ├── figure9_pc1_timeseries_hht_spectrum_2003_2013_02.png (NHT, split panel 2) │ │ ├── table1_anomaly_comparison.txt │ │ ├── table2_diagnostic_metrics.txt │ │ ├── table3_imf_characteristics_k8.txt │ │ └── metric_failure_baseline_v2_{summary,details}.csv │ └── tables/ │ └── qc_nht_report.txt # NHT quality-control report │ ├── supplementary/ │ ├── figures/ # SI figure PNGs (Figure S1-S5; written by step3_1, step5_1, step6_2, step6_3) │ │ ├── figure_s1_eof_spatial_patterns.png (SI Figure S1) │ │ ├── figure_s2_imf_period_distribution_2003.png (SI Figure S2) │ │ ├── figure_s3_imf_period_distribution_2013.png (SI Figure S3) │ │ ├── figure_s4_forcing_marginal_spectrum.png (SI Figure S4) │ │ └── figure_s5_nht_vs_ht_instantaneous_frequency.png (SI Figure S5) │ ├── tables/ # SI tables & per-figure statistics │ │ ├── figure_s5_nht_validation_stats.txt │ │ ├── table_s1_pcmci_parameters.txt │ │ ├── table_s2_imf_characteristics.txt │ │ ├── table_s3_forcing_energy_difference.txt │ │ └── table_s4_nht_qc_metrics.txt │ └── archive_deprecated/ # soil-moisture/GPP correlation assets removed in final review │ ├── figure_s1_sm_gpp_drought_correlation.png │ ├── figure_s1_sm_gpp_corr_stats.txt │ ├── step6_1_plot_soil_sensitivity_DEPRECATED.py │ └── figure_si_s5_forcing_marginal_spectrum_2003_2013.png # legacy pre-S5 output (superseded) │ ├── docs/ │ └── ARTICLE_README.md # this file └── logs/ # runtime logs (not required for reproduction) Note on authoritative vs. legacy scripts. For the three HHT-family figures the naming sche

Publication details

Journal / source
Zenodo (CERN European Organization for Nuclear Research)
Publication date
6 September 2026
Document type
Dataset