Regulatory Capital

Model Climate Transition & Physical Risk as Market Shocks

TeaVM Java full-revalues the same long-call / short-put book over the three illustrative long-horizon pathways and six checkpoints. The maturity stays at one year at each checkpoint, matching the rolled-position assumption in the original calculation.

Book
2025 market data
SimulationOptional

18 pathway/checkpoint cells, each with two full Monte-Carlo repricings, plus the 2025 base mark. These curves are illustrative and do not reproduce published NGFS macro paths.

Java source
ClimateScenarioRiskStudio.java

This exact source runs in TeaVM. Form changes update its Java literals and reset manual edits.

import com.nablatensor.engine.Nabla;
import com.nablatensor.quant.EquityMarket;
import com.nablatensor.quant.MonteCarlo;
import com.nablatensor.quant.Products;

public final class ClimateScenarioRiskStudio {
  static final String[] PATH = {
    "orderly", "disorderly", "hot-house-world"
  };
  static final double[] ST = {
    -.15, -.30, -.35
  }, VT = {
    .03, .15, .10
  }, RT = {
    .01, .02, -.015
  }, POWER = {
    1, 2, 1.5
  };
  static final int[] YEARS = {
    0, 5, 10, 15, 20, 25
  };
  public static void main(String[] a) {
    double s = 100, k = 100, v = 20 / 100.0, r = 3 / 100.0, cu = 5000000 / s, pu = 3000000 / s;
    long n = 80000L, seed = 42L;
    EquityMarket base = market(s, k, v, r);
    try (MonteCarlo<EquityMarket> call = MonteCarlo.of(Products.europeanCall())
        .market(base)
        .steps(1)
        .fp64()
        .priceOnly()
        .on("cpu")
        .build(); MonteCarlo<EquityMarket> put = MonteCarlo.of(Products.europeanPut())
        .market(base)
        .steps(1)
        .fp64()
        .priceOnly()
        .on("cpu")
        .build(); MonteCarlo<EquityMarket> greek = MonteCarlo.of(Products.europeanCall())
        .market(base)
        .steps(1)
        .fp64()
        .greeks()
        .on("cpu")
        .build()) {
      double pv0 = cu * call.run(base, n, seed)
          .price() - pu * put.run(base, n, seed)
          .price(), worst = Double.POSITIVE_INFINITY, wd = 0;
      int wp = 0, wy = 0;
      for (int p = 0; p < 3; p++) for (int y : YEARS) {
        EquityMarket m = shock(s, k, v, r, p, y);
        double loss = cu * call.run(m, n, seed)
            .price() - pu * put.run(m, n, seed)
            .price() - pv0;
        System.out.println("GRID|" + PATH[p] + "|" + (2025 + y) + "|" + loss);
        if (loss < worst) {
          worst = loss;
          wp = p;
          wy = y;
          wd = greek.run(m, n, seed)
              .greek(EquityMarket::spot);
        }
      }
      System.out.println("WORST|" + PATH[wp] + "|" + (2025 + wy) + "|" + worst + "|" + wd);
    }
  }
  static EquityMarket market(double s, double k, double v, double r) {
    return EquityMarket.of()
        .spot(s)
        .strike(k)
        .vol(v)
        .rate(r)
        .maturity(1)
        .build();
  }
  static EquityMarket shock(double s, double k, double v, double r, int p, int years) {
    double f = Math.pow(years / 25.0, POWER[p]);
    return market(s * (1 + ST[p] * f), k, Math.max(.001, v + VT[p] * f), r + RT[p] * f);
  }
}
TeaVM compiles and runs the Java source above in this browser.
Implementation guide

Climate pathways as financial scenarios

Climate analysis extends ordinary scenario design with long horizons, path dependence and uncertainty about both economic transmission and policy.

Core mechanism

Transition and physical pathways are translated into time-indexed market shocks, then replayed through exposures at selected horizons. The calculation is transparent about the assumed transmission from climate variables to financial factors.

Practical workflow

Select a recognised pathway, document translation assumptions, use multiple horizons and sectors, and distinguish exploratory scenario analysis from a short-horizon market-risk forecast.

Key details

Analysis note — where the heaviest computation in climate scenario analysis sits and whether NablaTensor helps. Not committed scope. Date: 2026-09-02. Verdict: Partial fit — mechanically the same replay-across-a-grid problem as stress testing, but a softening, EU/UK-only driver with still-maturing methodology; a supporting example that rides on the stress-testing capability. Calculators, not sign-off. This note describes where the computation sits and what NablaTensor could compute. Model validation, parameter attestation and regulatory submission stay with the user.

Forward-looking analysis of how transition and physical climate risk flow through credit, market and operational losses over long horizons.

The scenario grid is larger than a conventional stress test — decades of annual steps across several correlated macro pathways — but each revaluation is the same kind of operation, and the methodology (sector transition paths, counterparty-level carbon sensitivity) is still evolving.

Not on the roadmap as a distinct item. Treat as a supporting example layered on the stress-testing scenario harness (stress-testing.md §4): swap the macro scenario set for NGFS pathways, extend the horizon, reuse com.nablatensor.scenario.* and the adjoint engine.

Scope and review point

The page illustrates a transmission model, not a climate-risk standard. Results depend materially on pathways, data and the mapping from climate drivers to markets.