Skip to content

Commit 96a7272

Browse files
committed
fix bugs, clamp 02, [skip ci]
1 parent c5663f8 commit 96a7272

File tree

3 files changed

+14
-19
lines changed

3 files changed

+14
-19
lines changed

src/standalone/Soil/Biogeochemistry/Biogeochemistry.jl

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -644,35 +644,30 @@ function ClimaLand.make_update_aux(model::SoilCO2Model)
644644
@. Y.soilco2.CO2 = max(Y.soilco2.CO2, FT(0))
645645
@. p.soilco2.CO2_air_eq = Y.soilco2.CO2 / max(p.soilco2.θ_eff, eps(FT))
646646

647-
# Safety guard: cap CO2_air_eq at 10 million ppm equivalent.
647+
# Safety guard: cap CO2_air_eq at 100 million ppm equivalent.
648648
# Values above this indicate numerical blow-up, not physical conditions.
649-
# 10M ppm = 10 (mol/mol) → CO2_air_eq_max = 10 * M_C * P / (R * T)
650-
CO2_air_eq_max = @. FT(10) * M_C * P_sfc / (R * T_soil)
649+
# 100M ppm = 100 (mol/mol) → CO2_air_eq_max = 100 * M_C * P / (R * T)
650+
CO2_air_eq_max = @. FT(100) * M_C * P_sfc / (R * T_soil)
651651
@. p.soilco2.CO2_air_eq = ifelse(
652652
p.soilco2.CO2_air_eq > CO2_air_eq_max,
653653
FT(NaN),
654654
p.soilco2.CO2_air_eq,
655655
)
656656

657+
# Clamp O2_f to physical range [0, 1]; explicit diffusion can
658+
# overshoot in hot/dry columns where effective diffusivity D_o2/θ_eff_o2
659+
# exceeds the CFL limit. Clamping keeps the simulation alive with
660+
# physically meaningful values — the overshoot is a numerical artifact,
661+
# not a real state.
662+
@. Y.soilco2.O2_f = clamp(Y.soilco2.O2_f, FT(0), FT(1))
663+
657664
@. p.soilco2.O2 =
658665
o2_concentration(Y.soilco2.O2_f, T_soil, P_sfc, params)
659666

660667
(; D_oa) = params
661668
@. p.soilco2.O2_avail =
662669
o2_availability(Y.soilco2.O2_f, p.soilco2.θ_a, D_oa)
663670

664-
# Safety guard: O2_f must be in [0, 1]
665-
@. p.soilco2.O2 = ifelse(
666-
Y.soilco2.O2_f < FT(0) || Y.soilco2.O2_f > FT(1),
667-
FT(NaN),
668-
p.soilco2.O2,
669-
)
670-
@. p.soilco2.O2_avail = ifelse(
671-
Y.soilco2.O2_f < FT(0) || Y.soilco2.O2_f > FT(1),
672-
FT(NaN),
673-
p.soilco2.O2_avail,
674-
)
675-
676671
@. p.soilco2.Sm =
677672
microbe_source.(T_soil, θ_l, Csom, p.soilco2.O2_avail, params)
678673
end

toml/default_parameters.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -589,13 +589,13 @@ description = "Diffusivity of soil C substrate in liquid (unitless)"
589589
tag = "SoilCO2Parameters"
590590

591591
["soilCO2_pre_exponential_factor"]
592-
value = 23835.0
592+
value = 0.087
593593
type = "float"
594594
description = "Pre-exponential factor for DAMM model (kg C m⁻³ s⁻¹)"
595595
tag = "SoilCO2Parameters"
596596

597597
["soilCO2_activation_energy"]
598-
value = 61000.0
598+
value = 30000.0
599599
type = "float"
600600
description = "Activation energy for DAMM model (J mol⁻¹)"
601601
tag = "SoilCO2Parameters"

toml/uncalibrated_parameters.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -563,13 +563,13 @@ description = "Diffusivity of soil C substrate in liquid (unitless)"
563563
tag = "SoilCO2Parameters"
564564

565565
["soilCO2_pre_exponential_factor"]
566-
value = 23835.0
566+
value = 0.087
567567
type = "float"
568568
description = "Pre-exponential factor for DAMM model (kg C m⁻³ s⁻¹)"
569569
tag = "SoilCO2Parameters"
570570

571571
["soilCO2_activation_energy"]
572-
value = 61000.0
572+
value = 30000.0
573573
type = "float"
574574
description = "Activation energy for DAMM model (J mol⁻¹)"
575575
tag = "SoilCO2Parameters"

0 commit comments

Comments
 (0)