Calculated data

This page tells how we calculate gross primary production (GPP), ecosystem respiration (Reco), gap-filled NEE for Maktau, annual carbon sums and the net ecosystem carbon balance (NECB). It also shows the results and the checks. The data page shows the half-hourly values.

1. Purpose and source article

The method follows the Methods section of Hu, T., Malone, S. L., Rumpel, C. and Chabbi, A. (2024): Maximizing soil organic carbon stocks through optimal ploughing and renewal strategies in (Ley) grassland. Communications Earth & Environment 5, 38, doi:10.1038/s43247-024-01202-3.

The article is a model study of one grassland site in France. It gives a carbon balance (Eq. 1 to 7) and the flux methods: a u∗u_* threshold of 0.1 m s−1, a plausibility limit of ±50 µmol m−2 s−1 and gap filling after Reichstein et al. 2005.

We calculate these products from our eddy-covariance data:

We cannot calculate NPP, heterotrophic respiration (Rh), Cinput, SCB and RCB (Eq. 3 to 7). These need a soil model or repeated soil carbon samples. No site measures leached carbon, fire, volatile losses or erosion.

2. Sign conventions

QuantityIn the source filesIn the calculated data
NEEPositive = emission (all sites)Positive = emission
GPPAnttila, Särkisuo: GPP ≥ 0. Qvidja: GPP ≤ 0 (uptake is negative)GPP ≥ 0 = uptake. We change the sign of the Qvidja source GPP.
RecoPositivePositive
NEE, GPP, RecoAnttila, Särkisuo: NEE = Reco − GPP. Qvidja: the relation does not hold (daytime method).NEEf=Reco−GPP\mathrm{NEE}_f = R_{\mathrm{eco}} - \mathrm{GPP} in every row
NECB, Hu et al. 2024NEE positive = uptake. NECB positive = carbon gain.NECB positive = the field gains carbon
NECB, Heimsch et al. 2024 (Qvidja)NEE positive = emission. NECB positive = carbon loss.The validation table changes the sign of the paper values

3. Equations

Hu et al. 2024 give these equations. The numbers are the numbers of the article.

  1. Eq. 1NECB=NEE+Cexo−Charvest−CD−Cfire−Cvolatile−CCH4−Cerosion\mathrm{NECB} = \mathrm{NEE} + C_{\mathrm{exo}} - C_{\mathrm{harvest}} - C_{\mathrm{D}} - C_{\mathrm{fire}} - C_{\mathrm{volatile}} - C_{\mathrm{CH_4}} - C_{\mathrm{erosion}}
  2. Eq. 2NECB=NEE−Charvest\mathrm{NECB} = \mathrm{NEE} - C_{\mathrm{harvest}}
  3. Eq. 3NEE=NPP−Rh\mathrm{NEE} = \mathrm{NPP} - R_{\mathrm{h}}
  4. Eq. 4NECB=NPP−Rh−Charvest\mathrm{NECB} = \mathrm{NPP} - R_{\mathrm{h}} - C_{\mathrm{harvest}}
  5. Eq. 5Cinput=NPP−CharvestC_{\mathrm{input}} = \mathrm{NPP} - C_{\mathrm{harvest}}
  6. Eq. 6NECB=Cinput−Rh\mathrm{NECB} = C_{\mathrm{input}} - R_{\mathrm{h}}
  7. Eq. 7RCB=NECB−SCB\mathrm{RCB} = \mathrm{NECB} - \mathrm{SCB}

Cexo is the carbon in manure and organic fertiliser. Charvest is the carbon that leaves the field in grain, straw or cut grass. CCH4 is the carbon lost as methane. The article keeps only Eq. 2.

Our NEE is positive for an emission. Thus Eq. 1, without the terms that no site measures, becomes (g C m−2 yr−1, positive = gain):

NECB=−NEE−Charvest+Cexo−CCH4\mathrm{NECB} = -\mathrm{NEE} - C_{\mathrm{harvest}} + C_{\mathrm{exo}} - C_{\mathrm{CH_4}}

4. Inputs and variables

The calculation reads the harmonised database. Days and years are local calendar days and years (Finnish sites UTC+2, Maktau UTC+3). The temperature for the respiration model is the air temperature at all sites.

VPD=6.1078 exp⁡ ⁣(17.27 TT+237.3)(1−RH100) hPa\mathrm{VPD} = 6.1078\,\exp\!\left(\frac{17.27\,T}{T + 237.3}\right)\left(1 - \frac{\mathrm{RH}}{100}\right)\ \mathrm{hPa}
Inputs per site. “Provider” = the gap-filled NEE of the data provider.
SiteNight flagTemperatureVPDMagnus rowsu∗u_*Gap-filled NEESource GPP and Reco
Anttilasw_inair temperatureMagnus34 881noprovideryes (night-time method)
Särkisuoppfd (most rows of 2022), sw_inair temperatureMagnus30 539noprovideryes (night-time method)
Haltialappfdair temperaturefile0noprovider (10 XGBoost models)no
Qvidjasw_inair temperaturefile0yesprovideryes (daytime method)
Viikkisw_inair temperatureMagnus68 320noprovider, MDS in 576 rowsno
Maktausw_inair temperaturefile, else Magnus81 939yesMDS (this calculation)no

5. Night-time partitioning

At night, there is no photosynthesis. Thus the measured night NEE is the respiration. The respiration follows Lloyd and Taylor (1994):

Reco(T)=Rref exp⁡ ⁣(E0(1Tref−T0−1T−T0))R_{\mathrm{eco}}(T) = R_{\mathrm{ref}}\,\exp\!\left(E_0\left(\frac{1}{T_{\mathrm{ref}}-T_0}-\frac{1}{T-T_0}\right)\right)Tref=15 ∘C,T0=−46.02 ∘CT_{\mathrm{ref}} = 15\ {}^{\circ}\mathrm{C},\qquad T_0 = -46.02\ {}^{\circ}\mathrm{C}

E0E_0 (K) is the temperature sensitivity. RrefR_{\mathrm{ref}} (µmol m−2 s−1) is the respiration at 15 °C. We write the exponent with:

g(T)=1Tref−T0−1T−T0g(T) = \frac{1}{T_{\mathrm{ref}}-T_0}-\frac{1}{T-T_0}

The steps per site and local calendar year:

  1. Night sample. Rows with the night flag, a measured NEE and a temperature. At Qvidja and Maktau, rows with u∗u_* < 0.1 m s−1 are not used. Negative night fluxes stay in the sample.
  2. E0E_0 from short windows. Windows of 15 days (±7 days), one every 5 days. A window needs more than 6 values and a temperature range of at least 5 K. A least-squares fit gives RrefR_{\mathrm{ref}} and E0E_0. Then the fit removes the residuals outside the 5 to 95 % band and fits again. A window is valid when:E0−SE>30 KandE0+SE<350 KE_0 - \mathrm{SE} > 30\ \mathrm{K} \quad\text{and}\quad E_0 + \mathrm{SE} < 350\ \mathrm{K}(with the soil temperature, the upper limit is 550 K). The annual E0E_0 is the mean of the 3 valid windows with the smallest standard error (SE). Fallbacks, in this order: fewer than 3 valid windows → mean of the valid windows; no valid window → one fit on all nights of the year; no fit → the value of the nearest year of the same site; else no Reco and GPP for the year.
  3. RrefR_{\mathrm{ref}} from short windows. Windows of 7 days, one every 4 days, with E0E_0 fixed. A window needs more than 2 values. The closed-form least-squares value is:Rref=∑iNEEi fi∑ifi2,fi=exp⁡(E0 g(Ti))R_{\mathrm{ref}} = \frac{\sum_i \mathrm{NEE}_i\, f_i}{\sum_i f_i^2},\quad f_i = \exp\big(E_0\, g(T_i)\big)A negative value is not used. Between the window centres, the value is linear. Rows more than 14 days from a usable window get a low quality flag.
  4. Temperature for every row. Linear interpolation fills gaps up to 3 hours. The mean diurnal course (same time ±1 h, over ±7, ±14, ±30 days) fills longer gaps.
  5. Reco and GPP for every row.Reco(t)=Rref(t) exp⁡(E0 g(T(t)))R_{\mathrm{eco}}(t) = R_{\mathrm{ref}}(t)\,\exp\big(E_0\, g(T(t))\big)GPP=Reco−NEEf\mathrm{GPP} = R_{\mathrm{eco}} - \mathrm{NEE}_fWe do not set GPP to zero at night. Thus NEEf=Reco−GPP\mathrm{NEE}_f = R_{\mathrm{eco}} - \mathrm{GPP} holds in every row.

6. Maktau: filter, u∗u_* and gap filling

Maktau has a measured CO2 flux (FC), a quality flag and u∗u_*, but no gap-filled NEE. The calculation:

  1. Keeps rows with a quality flag of 1 or less. Rows without a flag are not used.
  2. Keeps ∣FC∣<50 μmol m−2 s−1|\mathrm{FC}| < 50\ \mu\mathrm{mol\,m^{-2}\,s^{-1}}.
  3. Keeps u∗≥0.1 m s−1u_* \ge 0.1\ \mathrm{m\,s^{-1}} (the threshold of the article). The moving point test of Papale et al. 2006 also runs, but its results change too much between years (6 temperature classes, 20 u∗u_* classes). We do not apply it.
  4. Fills the gaps with marginal distribution sampling (MDS, Reichstein et al. 2005). Similar conditions: sw_in ±50 W m−2, air temperature ±2.5 °C, VPD ±5 hPa, at least 2 values.

Result: 38 235 of 52 648 flux rows stay. 10 480 rows have no flag, 2 704 rows have a bad flag and 1 229 rows have a low u∗u_*.

MDS steps, in this order. Quality flag 1 = good, 3 = model only.
StepWindowQuality flag
Look-up table, 3 drivers±7 days, then ±14 days1
Look-up table, sw_in only±7 days1
Mean diurnal course (same time ±1 h)same day, ±1 day1
Mean diurnal course±2 days2
Look-up table, 3 drivers±21, ±28 days2
Look-up table, 3 drivers±35 … ±70 days3
Look-up table, sw_in only±14, ±21, ±28 days2
Look-up table, sw_in only±35 … ±70 days3
Mean diurnal course±7 … ±210 days3

A row without VPD skips the 3-driver steps. The MDS value of a long gap is a model, not a measurement. The annual table marks those years as not reliable.

7. Sums and units

One 30-minute value of 1 µmol CO2 m−2 s−1 is this mass of carbon:

1 μmol m−2 s−1×1800 s×12.011×10−6 g μmol−1=0.02162 g C m−21\ \mu\mathrm{mol\,m^{-2}\,s^{-1}} \times 1800\ \mathrm{s} \times 12.011\times10^{-6}\ \mathrm{g\,\mu mol^{-1}} = 0.02162\ \mathrm{g\,C\,m^{-2}}NEEyear=0.02162∑i∈yearNEEf,i\mathrm{NEE}_{\mathrm{year}} = 0.02162 \sum_{i \in \mathrm{year}} \mathrm{NEE}_{f,i}

The sums use the local day, month and calendar year. When one row of a period has no value, the sum of the period is empty. An annual sum is reliable when the measured fraction is at least 20 % and the longest gap is 30 days or less.

Haltiala uncertainty

Haltiala has ten gap-filling models (NEE_F1 to NEE_F10). We sum each model per year (Sk). Then we calculate the standard deviation of the ten sums:

σ10=19∑k=110(Sk−Sˉ)2,Sk=∑i∈yearNEE_Fki\sigma_{10} = \sqrt{\frac{1}{9}\sum_{k=1}^{10}\left(S_k - \bar{S}\right)^2},\quad S_k = \sum_{i \in \mathrm{year}} \mathrm{NEE\_F}k_iCI95=1.96 σ10\mathrm{CI}_{95} = 1.96\,\sigma_{10}
Haltiala annual NEE and its uncertainty (g C m−2)
YearNEEMean of 10 modelsσ10CI95
202160601.3±2.6
2022−271−2711.1±2.1
20231311313.0±5.8
2024−47−472.9±5.7
2025−4−42.7±5.2

8. Results

Temperature sensitivity per site and year

E0E_0 (K) ± SE. “Neighbour” = value of the nearest year.
SiteYearNight valuesE0E_0 (K)MethodValid / tried windows
Anttila20225 508111.1 ± 4.5windows29 / 72
Anttila20235 32697.7 ± 5.0windows30 / 72
Särkisuo20224 532107.9 ± 3.0windows35 / 72
Särkisuo20233 96259.2 ± 3.5windows20 / 72
Haltiala20213 49675.2 ± 4.2windows33 / 47
Haltiala20224 419155.7 ± 3.9windows31 / 72
Haltiala20234 614111.0 ± 4.8windows50 / 72
Haltiala20243 894166.9 ± 5.6windows36 / 72
Haltiala20256 051142.6 ± 4.7windows59 / 72
Qvidja20181 222286.4 ± 23.1windows8 / 46
Qvidja20191 55598.7 ± 11.7windows10 / 72
Qvidja20202 671218.4 ± 15.8windows21 / 72
Qvidja20211 05583.4 ± 20.0windows7 / 72
Qvidja20221 406168.1 ± 28.0windows7 / 72
Qvidja20231 539159.0 ± 19.6windows17 / 72
Qvidja20241 89684.7 ± 7.4windows15 / 72
Qvidja20252 220161.7 ± 12.1windows27 / 72
Viikki20221 393233.9 ± 16.4windows16 / 72
Viikki20231 386171.2 ± 13.6windows12 / 72
Viikki20242 111140.0 ± 13.0windows11 / 72
Viikki20252 15394.6 ± 16.5windows15 / 72
Maktau20140–none0 / 25
Maktau20150–none0 / 72
Maktau20160–none0 / 72
Maktau20170–none0 / 72
Maktau201828589.1 ± 2.9neighbour0 / 72
Maktau20197 33689.1 ± 2.9windows41 / 72
Maktau20203 42464.1 ± 2.5windows16 / 72
Maktau20211 138215.6 ± 11.3windows5 / 72
Maktau20223 188257.1 ± 5.5windows12 / 72
Maktau2023153257.1 ± 5.5neighbour0 / 72
Maktau20241 056320.0 ± 7.0windows7 / 72
Maktau20250–none0 / 1

Annual sums

Annual sums in g C m−2. Negative NEE = uptake. “–” = no complete sum.
SiteYearNEEGPPRecoMeasuredReliable
Anttila2022−2491 2701 02163 %yes
Anttila2023−2831 3741 09165 %yes
Särkisuo2022−5393087758 %yes
Särkisuo2023−159––55 %yes
Haltiala20216051957965 %yes
Haltiala2022−2711 01874757 %yes
Haltiala202313166079160 %yes
Haltiala2024−4798093355 %yes
Haltiala2025−41 0871 08471 %yes
Qvidja2018−13076363329 %yes
Qvidja2019−2471 10686022 %no
Qvidja2020−1181 2181 10032 %yes
Qvidja2021−11294783520 %no
Qvidja20223573777225 %yes
Qvidja2023899211 01025 %yes
Qvidja2024341 0531 08729 %yes
Qvidja2025−141 4791 46528 %yes
Viikki2022−741 1071 03320 %no
Viikki20231709491 11919 %no
Viikki20242077779824 %yes
Viikki20252089191123 %yes
Maktau2014–––0 %no
Maktau2015–––0 %no
Maktau2016–––0 %no
Maktau2017–––0 %no
Maktau2018––6853 %no
Maktau2019−3921 00561286 %yes
Maktau2020−25088963941 %no
Maktau2021−25549423814 %no
Maktau2022−16641424839 %no
Maktau2023−475––12 %no
Maktau2024–––23 %no
Maktau2025–––0 %no

Net ecosystem carbon balance

NECB in g C m−2. Positive NECB = the field gains carbon.
SiteYearNEECharvestCexoCCH4NECBCompleteNote
Anttila2022−249––0249noNo harvest data. NECB = -NEE - C_CH4 only.
Anttila2023−283––0283noNo harvest data. NECB = -NEE - C_CH4 only.
Särkisuo2022−53–––53noNo harvest data. NECB = -NEE - C_CH4 only.
Särkisuo2023−159––10149noNo harvest data. NECB = -NEE - C_CH4 only.
Haltiala2021603590–−419noPartial year.
Haltiala2022−2713450–−74yes
Haltiala202313100–−131noOrganic input without carbon content: NECB is a lower bound. No harvest row.
Haltiala2024−4700–47yes
Haltiala2025−41800–−177yes
Qvidja2018−1309893–125noPartial year.
Qvidja2019−24717443–116yes
Qvidja2020−1181470–−29noOrganic input without carbon content: NECB is a lower bound.
Qvidja2021−1121160–−4noOrganic input without carbon content: NECB is a lower bound. Grazing not quantified.
Qvidja202235360–−72noOrganic input without carbon content: NECB is a lower bound. Grazing not quantified.
Qvidja202389310–−120noOrganic input without carbon content: NECB is a lower bound.
Qvidja202434700–−104noGrazing not quantified.
Qvidja2025−1400–14noGrazing not quantified. No harvest row.
Viikki2022−741540–−80noAssumed carbon fraction or unit.
Viikki20231702840–−455noOrganic input without carbon content: NECB is a lower bound. Assumed carbon fraction or unit.
Viikki202420980–−118noOrganic input without carbon content: NECB is a lower bound. Assumed carbon fraction or unit.
Viikki202520830–−103noAssumed carbon fraction or unit.
Maktau2014–––––noNo harvest data. NECB not computed.
Maktau2015–––––noNo harvest data. NECB not computed.
Maktau2016–––––noNo harvest data. NECB not computed.
Maktau2017–––––noNo harvest data. NECB not computed.
Maktau2018–––––noNo harvest data. NECB not computed.
Maktau2019−392––––noNo harvest data. NECB not computed.
Maktau2020−250––––noNo harvest data. NECB not computed.
Maktau2021−255––––noNo harvest data. NECB not computed.
Maktau2022−166––––noNo harvest data. NECB not computed.
Maktau2023−475––––noNo harvest data. NECB not computed.
Maktau2024–––––noNo harvest data. NECB not computed.
Maktau2025–––––noNo harvest data. NECB not computed.

9. Management carbon

The carbon table lists harvests and organic inputs from the management files of the sites and from the two Qvidja papers (Heimsch et al. 2021 and 2024). Rules:

mdry=mfresh×fDMm_{\mathrm{dry}} = m_{\mathrm{fresh}} \times f_{\mathrm{DM}}C=mdry [kg ha−1]×fC10 g C m−2C = \frac{m_{\mathrm{dry}}\,[\mathrm{kg\,ha^{-1}}] \times f_{C}}{10}\ \mathrm{g\,C\,m^{-2}}
Management events. Dry mass in kg ha−1, carbon in g C m−2. “–” = unknown.
SiteDateActionProductDry massC fractionSourceg C m−2
Haltiala2021-09-10harvestgrain7 1870.50site359
Haltiala2022-08-15harvestgrain6 9030.50site345
Haltiala2023-06-20fertilisationmanure, 10 m3/ha (north sector 19-21 June, south sector 1-2 August)––none–
Haltiala2024-10-10harvestsunflower, crop crushed and left (tillage)00.50site0
Haltiala2025-10-03harvestgrain3 6080.50site180
Qvidja2018-06-12harvestsilage feed, whole crop1 9850.42site83
Qvidja2018-07-16fertilisationNK molasses fertiliser––site57
Qvidja2018-08-24fertilisationNK molasses fertiliser––site36
Qvidja2018-09-25harvestsilage feed, whole crop3470.42site15
Qvidja2019-05-08fertilisationNK molasses fertiliser––site43
Qvidja2019-06-10harvestsilage feed, whole crop3 1070.42site130
Qvidja2019-08-21harvestsilage feed, whole crop1 0290.42site43
Qvidja2020-05-25fertilisationown NPK mix 2020 (oma NPK seos)1 219–none–
Qvidja2020-06-11harvestsilage feed, whole crop2 2070.42site93
Qvidja2020-07-27fertilisationtube compost chips / silage (tuubikompostihake)2 830–none–
Qvidja2020-08-27harvestsilage feed, whole crop1 3020.42site55
Qvidja2021-05-12fertilisationbroiler litter manure (kuivikelanta)2 640–none–
Qvidja2021-06-01grazing4 horses, 7 days––none–
Qvidja2021-06-21harvestsilage feed, whole crop2 7710.42site116
Qvidja2022-06-01grazing9 cows, 15 days––none–
Qvidja2022-06-21harvestsilage feed, whole crop8680.42site36
Qvidja2022-07-04fertilisationQvidja compost5 427–none–
Qvidja2023-06-20harvestsilage feed, whole crop3040.42site13
Qvidja2023-08-22harvestsilage feed, whole crop4400.42site18
Qvidja2023-08-30fertilisationSoilfood compost fibre (Rav.kuitu II L)16 560–none–
Qvidja2024-06-15harvestsilage feed, whole crop1 6650.42site70
Qvidja2024-10-04grazing14 highland cows, 8 days––none–
Qvidja2025-06-14grazing4 horses, 5 days––none–
Qvidja2025-07-30grazing20 highland cows, 12 days––none–
Viikki2022-08-27harvesttimothy, two cuts (1 July, 27 August)3 6730.42assumed154
Viikki2023-04-27fertilisationdry manure (18.4 kg N/ha) + mineral N––none–
Viikki2023-08-24harvestbarley, clover and grasses, two cuts (17 and 24 August)6 7730.42assumed284
Viikki2024-05-22fertilisationliquid manure (57.5 kg N/ha) + dry manure (22.5 kg N/ha, 9 Oct) + mineral N––none–
Viikki2024-07-31harvestsilage, one cut2 3360.42assumed98
Viikki2025-09-10harvestfaba beans1 9740.42assumed83

10. Validation

At Anttila, our annual GPP and Reco are within 1.2 % of the night-time partitioning of the data provider. The half-hourly RrefR_{\mathrm{ref}} agrees well (r = 0.97 to 0.98), but E0E_0 is different. E0E_0 and RrefR_{\mathrm{ref}} compensate each other in the annual sums. Särkisuo 2022 is 5 % below the provider.

At Qvidja, our GPP and Reco are 15 to 31 % below the provider. The provider used a daytime method. Its night Reco is about 55 % above the measured night NEE. Our method follows the measured night flux. We report this difference and do not correct it.

Our Qvidja NEE sums are more negative than Heimsch et al. 2024, because the current file has a later processing version. The paper includes the carbon of grazing, thus the NECB values are not directly comparable.

Our partitioning against the data provider. Sums in g C m−2, RMSE and bias in µmol m−2 s−1.
SiteYearGPP oursGPP providerDiff.Reco oursReco providerDiff.RMSE RecoBias RecoE0E_0 oursE0E_0 providerr(RrefR_{\mathrm{ref}})
Anttila20221 2701 2590.9 %1 0211 0101.1 %1.150.03111.136.70.97
Anttila20231 3741 378−0.3 %1 0911 095−0.3 %0.74−0.0197.785.40.98
Särkisuo2022930982−5.4 %877929−5.7 %0.74−0.14107.956.10.97
Särkisuo2023–1 187––1 028–1.17−0.4159.297.80.88
Qvidja20187631 031−26.0 %633884−28.4 %1.88−1.02286.4––
Qvidja20191 1061 463−24.4 %8601 211−29.0 %1.53−0.9398.7––
Qvidja20201 2181 446−15.7 %1 1001 331−17.4 %1.54−0.61218.4––
Qvidja20219471 309−27.6 %8351 179−29.2 %1.75−0.9183.4––
Qvidja20227371 013−27.3 %7721 034−25.3 %1.27−0.69168.1––
Qvidja20239211 329−30.7 %1 0101 397−27.7 %2.11−1.02159.0––
Qvidja20241 0531 501−29.8 %1 0871 513−28.1 %2.01−1.1284.7––
Qvidja20251 4791 774−16.6 %1 4651 730−15.3 %1.31−0.70161.7––
Qvidja against Heimsch et al. 2024, Table 1 (years from 4 May). g C m−2. The sign of the paper NECB is changed (positive = gain).
PeriodNEE oursNEE paperGPP oursGPP fileGPP paperReco oursReco fileReco paperCharvest oursCharvest paperCexo oursCexo paperNECB oursNECB paperClass
2018–2019−99108351 1421 1547351 0331 1479898939395−15check
2019–2020−232−1901 1211 4691 4418901 2231 233174173434310160consistent
2020–2021−105−801 1721 3951 3051 0661 2911 2071471480110−4242consistent
2021–2022−108−699051 2591 1807961 1361 09511620302−8−131consistent
2022–2023−10458311 0961 0268211 0691 05736550154−2654consistent

Haltiala: the annual NEE is equal to the mean of the ten model sums within 0.15 g C m−2 (table in section 7).

11. Limits and open questions

12. How to reproduce

Run these commands in the repository. The full method description is in docs/calculated.md.

npm run build:db     # db/*.parquet from the source files
npm run calc         # data/calculated/* (GPP, Reco, sums, NECB, validation)
npm run site:build   # copies the tables to the site and builds this page

The parameters are in scripts/lib/calc/constants.ts. This run used the options --ustar fixed, --temp ta and--gpp-night keep.

Numbers from the calculation of 2026-10-21 08:55 UTC.