Version: dev

CloudAlbedo

Cloud albedo from two-stream approximation — Seinfeld & Pandis (2006) Ch. 24 §24.8.1, Eqs. 24.37–24.38.

Domain
aerosol
Subdomain
radiative_forcing
Type
model
.esm schema
1.0.0
Source
components/aerosol/radiative_forcing/cloud_albedo.esm
Tags
#aerosol #radiative_forcing #model

Description

Cloud albedo from two-stream approximation — Seinfeld & Pandis (2006) Ch. 24 §24.8.1, Eqs. 24.37–24.38.

Reference

Seinfeld, J. H., and Pandis, S. N. (2006). Atmospheric Chemistry and Physics: From Air Pollution to Climate Change, 2nd Edition, Chapter 24, Section 24.8.1, Equations 24.37–24.38.

_source_ref: Aerosol.jl@c8c640bb:src/aerosol_radiative_forcing.jl:205 Cloud albedo from two-stream approximation. Scaffolded via EarthSciAST.mtk2esm after mtkcompile, so the two algebraic equations land as observed bindings and the compiled system has zero states — the inline-test runner exercises R_c and γ at their algebraic values.

Tolerance rationale (model-level rel=1e-8 / abs=1e-12): closed-form algebraic R_c = τ_c/(τ_c+γ) reduces to zero ODE states after MTK structural_simplify, so 1e-8 captures only float64 roundoff in the (γ → R_c) two-step closed form. abs=1e-12 floors the optically-thin limit (τ_c=0.01) where R_c → ~0.001._

Parameters

NameUnitsDefaultDescription
τ_c110.0Cloud optical depth (dimensionless)
g10.85Asymmetry factor (dimensionless)

Observed

NameUnitsDefaultDescription
γ1Two-stream approximation denominator coefficient, γ = 2 / (√3·(1−g)). For g=0.85, γ ≈ 7.7.
R_c1Cloud albedo from two-stream approximation, R_c = τ_c / (τ_c + γ).

Observed expressions

$$ γ = \frac{2}{1.7320508075688772 \cdot \left(1 + \left(-1\right) \cdot g\right)} $$

Two-stream approximation denominator coefficient, γ = 2 / (√3·(1−g)). For g=0.85, γ ≈ 7.7.

$$ R_{c} = \frac{τ_{c}}{τ_{c} + γ} $$

Cloud albedo from two-stream approximation, R_c = τ_c / (τ_c + γ).

Analyses

figure_24_16_r_c_vs_tau_c

Reproduces Figure 24.16 from Seinfeld & Pandis (2006), p. 1082 — cloud albedo R_c as a function of cloud optical depth τ_c at the canonical asymmetry factor g = 0.85. The curve rises from ~0 at τ_c → 0, crosses R_c = 0.5 at the diagnostic point τ_c = γ ≈ 7.7, and saturates toward 1 at large τ_c.

Time span: 0.0 → 1.0

Swept over: τ_c

Cloud albedo R_c plotted against cloud optical depth τ_c (log axis) at g = 0.85.

asymmetry_factor_sensitivity

Supplements Figure 24.16 with a second sweep over the scattering asymmetry factor g (not shown in the published figure but covered by Seinfeld & Pandis §24.8.1 discussion of Eq. 24.37). At fixed τ_c = 10, increasing g from isotropic (0.0) toward strongly forward-peaked (0.95) inflates γ and suppresses R_c — the canonical justification for treating cloud droplets (g ≈ 0.85) differently from aerosols (g ≈ 0.5).

Time span: 0.0 → 1.0

Swept over: g

Cloud albedo R_c as a function of asymmetry factor g at τ_c = 10.

Two-stream denominator coefficient γ as a function of asymmetry factor g.

tau_g_joint_sweep

Joint sensitivity of cloud albedo to both cloud optical depth and asymmetry factor. Visualizes the Figure 24.16 curve family as a single heatmap: R_c(τ_c, g). Confirms monotonicity in both directions — R_c increases with τ_c and decreases with g.

Time span: 0.0 → 1.0

Swept over: τ_c, g

R_c(τ_c, g) heatmap.

Raw .esm

Raw .esm JSON (this component)
{
  "reference": {
    "citation": "Seinfeld, J. H., and Pandis, S. N. (2006). Atmospheric Chemistry and Physics: From Air Pollution to Climate Change, 2nd Edition, Chapter 24, Section 24.8.1, Equations 24.37–24.38.",
    "notes": "source_ref: Aerosol.jl@c8c640bb:src/aerosol_radiative_forcing.jl:205\nCloud albedo from two-stream approximation. Scaffolded via EarthSciAST.mtk2esm after mtkcompile, so the two algebraic equations land as observed bindings and the compiled system has zero states — the inline-test runner exercises R_c and γ at their algebraic values.\n\nTolerance rationale (model-level rel=1e-8 / abs=1e-12): closed-form algebraic R_c = τ_c/(τ_c+γ) reduces to zero ODE states after MTK structural_simplify, so 1e-8 captures only float64 roundoff in the (γ → R_c) two-step closed form. abs=1e-12 floors the optically-thin limit (τ_c=0.01) where R_c → ~0.001."
  },
  "variables": {
    "τ_c": {
      "type": "parameter",
      "units": "1",
      "default": 10.0,
      "description": "Cloud optical depth (dimensionless)"
    },
    "g": {
      "type": "parameter",
      "units": "1",
      "default": 0.85,
      "description": "Asymmetry factor (dimensionless)"
    },
    "γ": {
      "type": "unknown",
      "units": "1",
      "description": "Two-stream approximation denominator coefficient, γ = 2 / (√3·(1−g)). For g=0.85, γ ≈ 7.7."
    },
    "R_c": {
      "type": "unknown",
      "units": "1",
      "description": "Cloud albedo from two-stream approximation, R_c = τ_c / (τ_c + γ)."
    }
  },
  "equations": [
    {
      "lhs": "γ",
      "rhs": {
        "op": "/",
        "args": [
          2,
          {
            "op": "*",
            "args": [
              1.7320508075688772,
              {
                "op": "+",
                "args": [
                  1,
                  {
                    "op": "*",
                    "args": [
                      -1,
                      "g"
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    },
    {
      "lhs": "R_c",
      "rhs": {
        "op": "/",
        "args": [
          "τ_c",
          {
            "op": "+",
            "args": [
              "τ_c",
              "γ"
            ]
          }
        ]
      }
    }
  ],
  "tolerance": {
    "rel": 1e-08,
    "abs": 1e-12
  },
  "tests": [
    {
      "id": "figure_24_16_default_g085",
      "description": "Reproduces the γ computation and default-parameter cloud albedo from the upstream Aerosol.jl `CloudAlbedo - Figure 24.16 Validation` testitem. At g = 0.85, γ ≈ 7.698 and R_c(τ_c=10) ≈ 0.565.",
      "parameter_overrides": {
        "τ_c": 10.0,
        "g": 0.85
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "γ",
          "time": 0.0,
          "expected": 7.698003589195009
        },
        {
          "variable": "R_c",
          "time": 0.0,
          "expected": 0.5650354826521339
        },
        {
          "variable": "γ",
          "time": 1.0,
          "expected": 7.698003589195009
        },
        {
          "variable": "R_c",
          "time": 1.0,
          "expected": 0.5650354826521339
        }
      ]
    },
    {
      "id": "figure_24_16_limit_tau_near_zero",
      "description": "Optically-thin limit: τ_c ≪ γ implies R_c → 0. Upstream asserts `R_c(τ_c=0.01, g=0.85) < 0.01`; we pin the exact analytic value.",
      "parameter_overrides": {
        "τ_c": 0.01,
        "g": 0.85
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "R_c",
          "time": 0.0,
          "expected": 0.001297352794959499
        }
      ]
    },
    {
      "id": "figure_24_16_half_albedo_point",
      "description": "Half-albedo point: τ_c = γ implies R_c = 0.5 exactly. This is the canonical diagnostic marker in Figure 24.16.",
      "parameter_overrides": {
        "τ_c": 7.698003589195009,
        "g": 0.85
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "R_c",
          "time": 0.0,
          "expected": 0.5
        }
      ]
    },
    {
      "id": "figure_24_16_saturating_tau",
      "description": "Optically-thick limit: τ_c ≫ γ implies R_c → 1. Upstream asserts `R_c(τ_c=100, g=0.85) > 0.9`; we pin the analytic value.",
      "parameter_overrides": {
        "τ_c": 100.0,
        "g": 0.85
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "R_c",
          "time": 0.0,
          "expected": 0.9285223185885748
        }
      ]
    },
    {
      "id": "figure_24_16_monotonic_tau1",
      "description": "Monotonic sweep point (upstream uses τ_c ∈ {1,5,10,20,50} and asserts `issorted(R_c_vals)`). τ_c = 1.",
      "parameter_overrides": {
        "τ_c": 1.0,
        "g": 0.85
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "R_c",
          "time": 0.0,
          "expected": 0.1149689109397745
        }
      ]
    },
    {
      "id": "figure_24_16_monotonic_tau5",
      "description": "Monotonic sweep point. τ_c = 5.",
      "parameter_overrides": {
        "τ_c": 5.0,
        "g": 0.85
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "R_c",
          "time": 0.0,
          "expected": 0.3937626859906231
        }
      ]
    },
    {
      "id": "figure_24_16_monotonic_tau20",
      "description": "Monotonic sweep point. τ_c = 20.",
      "parameter_overrides": {
        "τ_c": 20.0,
        "g": 0.85
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "R_c",
          "time": 0.0,
          "expected": 0.7220737023733363
        }
      ]
    },
    {
      "id": "figure_24_16_monotonic_tau50",
      "description": "Monotonic sweep point. τ_c = 50.",
      "parameter_overrides": {
        "τ_c": 50.0,
        "g": 0.85
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "R_c",
          "time": 0.0,
          "expected": 0.866581110084776
        }
      ]
    },
    {
      "id": "asymmetry_sensitivity_low_g",
      "description": "Sensitivity to the asymmetry factor at fixed τ_c=10. g=0.5 (more isotropic scattering) yields a smaller γ and therefore a higher R_c than the g=0.85 default.",
      "parameter_overrides": {
        "τ_c": 10.0,
        "g": 0.5
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "γ",
          "time": 0.0,
          "expected": 2.309401076758503
        },
        {
          "variable": "R_c",
          "time": 0.0,
          "expected": 0.8123872102015666
        }
      ]
    },
    {
      "id": "asymmetry_sensitivity_high_g",
      "description": "Sensitivity to the asymmetry factor at fixed τ_c=10. g=0.9 (strongly forward-peaked) yields a larger γ and therefore a lower R_c than the g=0.85 default.",
      "parameter_overrides": {
        "τ_c": 10.0,
        "g": 0.9
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "assertions": [
        {
          "variable": "γ",
          "time": 0.0,
          "expected": 11.54700538379251
        },
        {
          "variable": "R_c",
          "time": 0.0,
          "expected": 0.4641016151377546
        }
      ]
    }
  ],
  "analyses": [
    {
      "id": "figure_24_16_r_c_vs_tau_c",
      "description": "Reproduces Figure 24.16 from Seinfeld & Pandis (2006), p. 1082 — cloud albedo R_c as a function of cloud optical depth τ_c at the canonical asymmetry factor g = 0.85. The curve rises from ~0 at τ_c → 0, crosses R_c = 0.5 at the diagnostic point τ_c = γ ≈ 7.7, and saturates toward 1 at large τ_c.",
      "parameters": {
        "g": 0.85
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_sweep": {
        "type": "cartesian",
        "dimensions": [
          {
            "parameter": "τ_c",
            "range": {
              "start": 0.01,
              "stop": 100.0,
              "count": 60,
              "scale": "log"
            }
          }
        ]
      },
      "plots": [
        {
          "id": "r_c_vs_tau_c",
          "type": "line",
          "description": "Cloud albedo R_c plotted against cloud optical depth τ_c (log axis) at g = 0.85.",
          "x": {
            "variable": "τ_c",
            "label": "Cloud optical depth τ_c"
          },
          "y": {
            "variable": "R_c",
            "label": "Cloud albedo R_c"
          }
        }
      ]
    },
    {
      "id": "asymmetry_factor_sensitivity",
      "description": "Supplements Figure 24.16 with a second sweep over the scattering asymmetry factor g (not shown in the published figure but covered by Seinfeld & Pandis §24.8.1 discussion of Eq. 24.37). At fixed τ_c = 10, increasing g from isotropic (0.0) toward strongly forward-peaked (0.95) inflates γ and suppresses R_c — the canonical justification for treating cloud droplets (g ≈ 0.85) differently from aerosols (g ≈ 0.5).",
      "parameters": {
        "τ_c": 10.0
      },
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_sweep": {
        "type": "cartesian",
        "dimensions": [
          {
            "parameter": "g",
            "range": {
              "start": 0.0,
              "stop": 0.95,
              "count": 40,
              "scale": "linear"
            }
          }
        ]
      },
      "plots": [
        {
          "id": "r_c_vs_g",
          "type": "line",
          "description": "Cloud albedo R_c as a function of asymmetry factor g at τ_c = 10.",
          "x": {
            "variable": "g",
            "label": "Asymmetry factor g"
          },
          "y": {
            "variable": "R_c",
            "label": "Cloud albedo R_c"
          }
        },
        {
          "id": "gamma_vs_g",
          "type": "line",
          "description": "Two-stream denominator coefficient γ as a function of asymmetry factor g.",
          "x": {
            "variable": "g",
            "label": "Asymmetry factor g"
          },
          "y": {
            "variable": "γ",
            "label": "γ = 2 / (√3·(1−g))"
          }
        }
      ]
    },
    {
      "id": "tau_g_joint_sweep",
      "description": "Joint sensitivity of cloud albedo to both cloud optical depth and asymmetry factor. Visualizes the Figure 24.16 curve family as a single heatmap: R_c(τ_c, g). Confirms monotonicity in both directions — R_c increases with τ_c and decreases with g.",
      "time_span": {
        "start": 0.0,
        "end": 1.0
      },
      "parameter_sweep": {
        "type": "cartesian",
        "dimensions": [
          {
            "parameter": "τ_c",
            "range": {
              "start": 0.1,
              "stop": 100.0,
              "count": 30,
              "scale": "log"
            }
          },
          {
            "parameter": "g",
            "range": {
              "start": 0.0,
              "stop": 0.95,
              "count": 20,
              "scale": "linear"
            }
          }
        ]
      },
      "plots": [
        {
          "id": "r_c_heatmap",
          "type": "heatmap",
          "description": "R_c(τ_c, g) heatmap.",
          "x": {
            "variable": "τ_c",
            "label": "Cloud optical depth τ_c"
          },
          "y": {
            "variable": "g",
            "label": "Asymmetry factor g"
          },
          "value": {
            "variable": "R_c",
            "reduce": "final"
          }
        }
      ]
    }
  ]
}