Skip to content

Sea-level rise

Back to general structure

The sea-level-rise (SLR) component represents thermal expansion, glaciers, the Greenland ice sheet (GIS), the Antarctic ice sheet (AIS), and future changes in land-water storage (LWS). The formulation is deliberately small and deterministic so it can be evaluated both by the MIMOSA simulator and as part of the Pyomo optimisation model.

All component values are expressed as metres above the 1900 global mean sea-level reference. The values at the model start are linearly interpolated between zero in 1900 and the central 2025 estimates below. This makes the reference year explicit and prevents a run starting before 2025 from using 2025 sea-level values.

The component option projection selects a coherent low, central, or high deterministic response set. The sets use identical historical initial conditions, but different sensitivities, response times, and AIS fast-response assumptions. The default is central.

The projection can be selected before model construction with:

params["sealevelrise"]["projection"] = "high"
Reference years and initial values

These values are shared by all three projections. Initial sea-level contributions are relative to the reference year and specified at the historical calibration year. At other start years, the model scales the initial values as described above. The land-water-storage anomaly starts at zero.

Symbol Meaning Units Value
\(y_{\mathrm{ref}}\) Sea-level reference year year 1900
\(y_{\mathrm{init}}\) Historical calibration year year 2025
\(\text{SLR}_{\mathrm{thermal,fast,init}}\) Initial fast thermal-expansion contribution m 0.045
\(\text{SLR}_{\mathrm{thermal,slow,init}}\) Initial slow thermal-expansion contribution m 0.025
\(\text{SLR}_{\mathrm{GL,init}}\) Initial glacier contribution m 0.09
\(\text{SLR}_{\mathrm{GIS,init}}\) Initial Greenland contribution m 0.045
\(\text{SLR}_{\mathrm{AIS,init}}\) Initial Antarctic contribution m 0.025
\(T_{\mathrm{A,init}}\) Initial Antarctic ocean-temperature proxy °C above pre-industrial 0.3

In the equations below, \(t\) indexes model time steps, \(\Delta t\) is the elapsed time in years, and \(\href{./#var__temperature}{T_{t-1}}\) is global mean warming above pre-industrial at the preceding step. A starred SLR value is the long-term equilibrium contribution at a fixed temperature; the actual contribution can lag behind that equilibrium.

Thermal expansion

Thermal expansion is represented by a fast and a slow response box. Each box relaxes towards a temperature-dependent equilibrium:

\[ \begin{aligned} \href{./#var__slr_thermal_fast}{\text{SLR}_{\mathrm{thermal,fast},t}} &=\href{./#slrcoef__slr_thermal_fast_sensitivity}{\beta_{\mathrm{fast}}} \href{./#var__temperature}{T_{t-1}} \\ &\quad+\left(\href{./#var__slr_thermal_fast}{\text{SLR}_{\mathrm{thermal,fast},t-1}}- \href{./#slrcoef__slr_thermal_fast_sensitivity}{\beta_{\mathrm{fast}}} \href{./#var__temperature}{T_{t-1}}\right) e^{-\Delta t/\href{./#slrcoef__slr_thermal_fast_timescale}{\tau_{\mathrm{fast}}}}. \end{aligned} \]
\[ \begin{aligned} \href{./#var__slr_thermal_slow}{\text{SLR}_{\mathrm{thermal,slow},t}} &=\href{./#slrcoef__slr_thermal_slow_sensitivity}{\beta_{\mathrm{slow}}} \href{./#var__temperature}{T_{t-1}} \\ &\quad+\left(\href{./#var__slr_thermal_slow}{\text{SLR}_{\mathrm{thermal,slow},t-1}}- \href{./#slrcoef__slr_thermal_slow_sensitivity}{\beta_{\mathrm{slow}}} \href{./#var__temperature}{T_{t-1}}\right) e^{-\Delta t/\href{./#slrcoef__slr_thermal_slow_timescale}{\tau_{\mathrm{slow}}}}. \end{aligned} \]

The total thermal-expansion contribution is the sum of the fast and slow contributions:

\[ \href{./#var__slr_thermal}{\text{SLR}_{\mathrm{thermal},t}}= \href{./#var__slr_thermal_fast}{\text{SLR}_{\mathrm{thermal,fast},t}}+ \href{./#var__slr_thermal_slow}{\text{SLR}_{\mathrm{thermal,slow},t}}. \]

The exact exponential update makes the response independent of the chosen numerical time step for a constant temperature forcing.

This two-timescale formulation is a reduced-form approximation chosen for MIMOSA, rather than a direct reproduction of an ocean model. The first-order relaxation form follows BRICK v0.2 (Wong et al., 2017, Sect. 3.2.4, Eqs. 9--10). Splitting it into fast and slow boxes represents the upper- and deep-ocean distinction in SURFER v2.0 (Martínez Montero et al., 2022, Sects. 2.3.1 and 2.4.3). MIMOSA's equilibrium sensitivities and response times are calibrated jointly against the AR6 thermal-expansion contributions in Table 9.9 of Fox-Kemper et al. (2021); they are not the coefficients from either BRICK or SURFER.

Coefficients
Symbol Meaning Units Low Central (default) High
\(\beta_{\mathrm{fast}}\) Fast equilibrium sensitivity m/°C 0.075 0.08 0.1
\(\beta_{\mathrm{slow}}\) Slow equilibrium sensitivity m/°C 0.255 0.27 0.34
\(\tau_{\mathrm{fast}}\) Fast response time years 42.5 40 30
\(\tau_{\mathrm{slow}}\) Slow response time years 425 400 300

Glaciers

The glacier contribution relaxes towards the capped equilibrium proposed by Martínez Montero et al. (2022):

\[ \text{SLR}^*_{\mathrm{GL}}(\href{./#var__temperature}{T_{t-1}})=\href{./#slrcoef__slr_gsic_total_ice}{P_{\mathrm{GL}}} \tanh\left(\frac{\href{./#var__temperature}{T_{t-1}}}{\href{./#slrcoef__slr_gsic_temp_sensitivity}{\zeta_{\mathrm{GL}}}}\right), \]
\[ \href{./#var__slr_cumgsic}{\text{SLR}_{\mathrm{GL},t}}=\text{SLR}^*_{\mathrm{GL}}(\href{./#var__temperature}{T_{t-1}})+ \left(\href{./#var__slr_cumgsic}{\text{SLR}_{\mathrm{GL},t-1}}-\text{SLR}^*_{\mathrm{GL}}(\href{./#var__temperature}{T_{t-1}})\right) e^{-\Delta t/\href{./#slrcoef__slr_gsic_timescale}{\tau_{\mathrm{GL}}}}. \]

This replaces the previous formulation, in which all glaciers eventually melted under any sustained temperature above -1 degree C.

Coefficients
Symbol Meaning Units Low Central (default) High
\(\zeta_{\mathrm{GL}}\) Equilibrium temperature scale °C 2.4 2 1.6
\(\tau_{\mathrm{GL}}\) Glacier response time years 120 110 140

The following constants are shared by all three projections.

Symbol Meaning Units Value
\(P_{\mathrm{GL}}\) Glacier sea-level potential m 0.32

Greenland ice sheet

The Greenland ice sheet contributes to sea-level rise as it loses ice. MIMOSA uses a SIMPLE-style delayed equilibrium: the temperature at the preceding step sets a long-term equilibrium contribution, and the actual contribution approaches that target gradually.

The equilibrium curve uses the logistic function

\[ \sigma(x)=\frac{1}{1+e^{-x}}, \]

a smooth transition from 0 to 1. Here \(x\) is a dimensionless argument. The equilibrium SLR contribution is normalised to zero at zero warming and approaches the ice sheet's sea-level potential at high warming:

\[ \text{SLR}^*_{\mathrm{GIS}}(\href{./#var__temperature}{T_{t-1}})=\href{./#slrcoef__slr_gis_total_ice}{P_{\mathrm{GIS}}} \frac{\sigma((\href{./#var__temperature}{T_{t-1}}-\href{./#slrcoef__slr_gis_threshold}{T_c})/\href{./#slrcoef__slr_gis_transition_width}{w})-\sigma(-\href{./#slrcoef__slr_gis_threshold}{T_c}/\href{./#slrcoef__slr_gis_transition_width}{w})} {1-\sigma(-\href{./#slrcoef__slr_gis_threshold}{T_c}/\href{./#slrcoef__slr_gis_transition_width}{w})}, \]

The response time \(\tau_{\mathrm{GIS}}\), measured in years, determines how quickly Greenland approaches this equilibrium. It decreases with warming, so higher temperatures lead to a faster response:

\[ \tau_{\mathrm{GIS}}(\href{./#var__temperature}{T_{t-1}})=\href{./#slrcoef__slr_gis_base_timescale}{\tau_0}e^{-\href{./#slrcoef__slr_gis_timescale_sensitivity}{\gamma} \href{./#var__temperature}{T_{t-1}}}. \]

The actual Greenland SLR contribution is updated each time step as

\[ \begin{aligned} \href{./#var__slr_cumgis}{\text{SLR}_{\mathrm{GIS},t}} &= \text{SLR}^*_{\mathrm{GIS}}(\href{./#var__temperature}{T_{t-1}}) \\ &\quad + \left(\href{./#var__slr_cumgis}{\text{SLR}_{\mathrm{GIS},t-1}} - \text{SLR}^*_{\mathrm{GIS}}(\href{./#var__temperature}{T_{t-1}})\right) e^{-\Delta t/\tau_{\mathrm{GIS}}(\href{./#var__temperature}{T_{t-1}})}. \end{aligned} \]

Thus, only part of the gap to equilibrium closes within a model time step. For example, with a constant temperature and response time, about 63% of that gap closes after one response time. The actual SLR contribution, rather than the equilibrium target, is added to total sea-level rise.

Coefficients
Symbol Meaning Units Low Central (default) High
\(T_c\) Equilibrium transition temperature °C above pre-industrial 2 1.8 1.4
\(w\) Equilibrium transition width °C 0.7 0.6 0.5
\(\tau_0\) Response time at zero warming years 6500 6000 4000
\(\gamma\) Response-time sensitivity to warming 1/°C 0.2 0.3 0.4

The following constants are shared by all three projections.

Symbol Meaning Units Value
\(P_{\mathrm{GIS}}\) Greenland sea-level potential m 7.3

Antarctic ice sheet

A single lagged Antarctic subsurface-ocean temperature proxy drives the AIS response. A smooth threshold term represents the possibility of faster ice loss at high warming while retaining differentiability for optimisation.

The function \(\sigma\) is the same logistic function defined in the Greenland section above.

\[ \href{./#var__slr_antarctic_ocean_temp}{T_{A,t}}=\href{./#slrcoef__slr_ais_ocean_temp_scaling}{\lambda_A} \href{./#var__temperature}{T_{t-1}}+ \left(\href{./#var__slr_antarctic_ocean_temp}{T_{A,t-1}}-\href{./#slrcoef__slr_ais_ocean_temp_scaling}{\lambda_A} \href{./#var__temperature}{T_{t-1}}\right)e^{-\Delta t/\href{./#slrcoef__slr_ais_ocean_temp_timescale}{\tau_A}}, \]
\[ \href{./#var__slr_cumais}{\text{SLR}_{\mathrm{AIS},t}}=\href{./#var__slr_cumais}{\text{SLR}_{\mathrm{AIS},t-1}}+\Delta t \left[\href{./#slrcoef__slr_ais_background_rate}{r_0}+\href{./#slrcoef__slr_ais_temp_sensitivity}{r_1}\href{./#var__slr_antarctic_ocean_temp}{T_{A,t}}+\href{./#slrcoef__slr_ais_fast_rate}{r_f}\sigma((\href{./#var__slr_antarctic_ocean_temp}{T_{A,t}}-\href{./#slrcoef__slr_ais_fast_threshold}{T_{crit}})/\href{./#slrcoef__slr_ais_fast_transition_width}{w_A})\right] \left(1-\frac{\href{./#var__slr_cumais}{\text{SLR}_{\mathrm{AIS},t-1}}}{\href{./#slrcoef__slr_ais_total_ice}{P_{\mathrm{AIS}}}}\right). \]

The scaling and delay between global surface warming and Antarctic subsurface-ocean warming are motivated by LARMIP-2 (Levermann et al., 2020, Sect. 2.2). The AIS rate equation itself is a deliberately simpler MIMOSA parameterisation, not a reproduction of LARMIP-2 or SURFER. Its smooth fast term is inspired by the threshold representation of uncertain rapid Antarctic disintegration in Wong et al. (2017). The ordinary background and temperature-response rates are calibrated against the AR6 AIS contributions in Table 9.9. The high parameter set is intended as a low-likelihood, high-impact sensitivity case and not as the upper endpoint of the AR6 likely range.

Coefficients
Symbol Meaning Units Low Central (default) High
\(\lambda_A\) Ocean-temperature scaling dimensionless 0.45 0.6 0.8
\(\tau_A\) Ocean-temperature response time years 50 30 20
\(r_0\) Background ice-loss rate m/year 0.0009 0.0011 0.0012
\(r_1\) Ice-loss sensitivity to ocean temperature m/(year · °C) 0.0002 0.00025 0.00035
\(r_f\) Additional fast-response rate m/year 0 0.005 0.012
\(T_{crit}\) Fast-response threshold temperature °C above pre-industrial 3 2.5 1.8
\(w_A\) Fast-response transition width °C 0.2 0.15 0.12

The following constants are shared by all three projections.

Symbol Meaning Units Value
\(P_{\mathrm{AIS}}\) Effective vulnerable Antarctic ice stock m 5

Land-water storage

AR6 projects an approximately scenario-independent land-water contribution of 0.03 m between 1995--2014 and 2100. Because the historical contribution is already implicit in MIMOSA's 2025 initial total, only its future anomaly is added explicitly:

\[ \href{./#var__slr_cumlws}{\text{SLR}_{\mathrm{LWS},t}}=\href{./#var__slr_cumlws}{\text{SLR}_{\mathrm{LWS},t-1}}+\Delta t\,\href{./#slrcoef__slr_lws_rate}{r_{\mathrm{LWS}}}, \qquad \href{./#slrcoef__slr_lws_rate}{r_{\mathrm{LWS}}}=0.0004\ \mathrm{m\,yr^{-1}}. \]
Coefficients
Symbol Meaning Units Value
\(r_{\mathrm{LWS}}\) Future land-water-storage contribution rate m/year 0.0004

Total sea-level rise

\[ \href{./#var__total_SLR}{\text{SLR}_t}=\href{./#var__slr_thermal}{\text{SLR}_{\mathrm{thermal},t}}+\href{./#var__slr_cumgsic}{\text{SLR}_{\mathrm{GL},t}} +\href{./#var__slr_cumgis}{\text{SLR}_{\mathrm{GIS},t}}+\href{./#var__slr_cumais}{\text{SLR}_{\mathrm{AIS},t}}+\href{./#var__slr_cumlws}{\text{SLR}_{\mathrm{LWS},t}}. \]

Calibration against IPCC AR6

The process papers motivate the compact equation forms; they do not imply that every coefficient is transferred unchanged. The three coherent parameter sets are outcome-calibrated against AR6 WGI Table 9.9 and the warming-level assessment in Chapter 12. Consequently, increasing the glacier or ordinary AIS response remains consistent with the cited equation structure while bringing total SLR into the assessed AR6 ranges. The following benchmark prescribes a linear warming path from 1.27 degrees C in 2025 to the stated 2100 warming level. Values are metres relative to 1900:

2100 warming AR6 median [likely range] low central high
2 degrees C 0.668 [0.558--0.848] 0.547 0.619 0.825
3 degrees C 0.778 [0.658--0.968] 0.644 0.741 1.162
4 degrees C 0.858 [0.738--1.068] 0.737 0.858 1.531

The MIMOSA columns in this table and the component table below are generated directly from the current component equations. After changing the SLR formulation or parameters, regenerate both tables from the repository root:

python diagnostics/slr_ar6.py

A model test compares the committed CSV files with a fresh calculation so that outdated documentation is detected automatically.

AR6 Chapter 12 reports the warming-level values relative to 1995--2014. The table adds the assessed 0.158 m rise from 1900 to 1995--2014, following the AR6 Summary for Policymakers. The comparison is a calibration diagnostic, not a claim that a warming level uniquely determines SLR: the preceding temperature pathway and rate of warming also affect the lagged components.

Under this diagnostic, the low set tracks the lower edge of the AR6 likely range and central remains within it. High exceeds the likely range at 3 and 4 degrees C by design, representing rapid Antarctic loss. For transparency, the central 2100 component values at 2, 3, and 4 degrees C respectively are:

Component 2 degrees C 3 degrees C 4 degrees C
Thermal expansion 0.217 0.277 0.338
Glaciers 0.151 0.167 0.177
Greenland 0.102 0.143 0.187
Antarctica 0.12 0.122 0.125
Land-water storage 0.03 0.03 0.03

References:

Source code in mimosa/components/sealevelrise.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
def get_constraints(
    m: ConcreteModel, inputs: ModelInputs
) -> Sequence[GeneralConstraint]:
    r"""
    The sea-level-rise (SLR) component represents thermal expansion, glaciers,
    the Greenland ice sheet (GIS), the Antarctic ice sheet (AIS), and future
    changes in land-water storage (LWS). The formulation is deliberately small
    and deterministic so it can be evaluated both by the MIMOSA simulator and
    as part of the Pyomo optimisation model.

    All component values are expressed as metres above the 1900 global mean
    sea-level reference. The values at the model start are linearly interpolated
    between zero in 1900 and the central 2025 estimates below. This makes the
    reference year explicit and prevents a run starting before 2025 from using
    2025 sea-level values.

    The component option `projection` selects a coherent `low`, `central`, or
    `high` deterministic response set. The sets use identical historical
    initial conditions, but different sensitivities, response times, and AIS
    fast-response assumptions. The default is `central`.

    The projection can be selected before model construction with:

    ```python
    params["sealevelrise"]["projection"] = "high"
    ```

    {{ slr_coefficients("initial") }}

    In the equations below, $t$ indexes model time steps, $\Delta t$ is the
    elapsed time in years, and $\href{./#var__temperature}{T_{t-1}}$ is global
    mean warming above pre-industrial at the preceding step. A starred SLR
    value is the long-term equilibrium contribution at a fixed temperature;
    the actual contribution can lag behind that equilibrium.

    # Thermal expansion

    Thermal expansion is represented by a fast and a slow response box. Each
    box relaxes towards a temperature-dependent equilibrium:

    $$
    \begin{aligned}
    \href{./#var__slr_thermal_fast}{\text{SLR}_{\mathrm{thermal,fast},t}}
    &=\href{./#slrcoef__slr_thermal_fast_sensitivity}{\beta_{\mathrm{fast}}} \href{./#var__temperature}{T_{t-1}} \\
    &\quad+\left(\href{./#var__slr_thermal_fast}{\text{SLR}_{\mathrm{thermal,fast},t-1}}-
    \href{./#slrcoef__slr_thermal_fast_sensitivity}{\beta_{\mathrm{fast}}} \href{./#var__temperature}{T_{t-1}}\right)
    e^{-\Delta t/\href{./#slrcoef__slr_thermal_fast_timescale}{\tau_{\mathrm{fast}}}}.
    \end{aligned}
    $$

    $$
    \begin{aligned}
    \href{./#var__slr_thermal_slow}{\text{SLR}_{\mathrm{thermal,slow},t}}
    &=\href{./#slrcoef__slr_thermal_slow_sensitivity}{\beta_{\mathrm{slow}}} \href{./#var__temperature}{T_{t-1}} \\
    &\quad+\left(\href{./#var__slr_thermal_slow}{\text{SLR}_{\mathrm{thermal,slow},t-1}}-
    \href{./#slrcoef__slr_thermal_slow_sensitivity}{\beta_{\mathrm{slow}}} \href{./#var__temperature}{T_{t-1}}\right)
    e^{-\Delta t/\href{./#slrcoef__slr_thermal_slow_timescale}{\tau_{\mathrm{slow}}}}.
    \end{aligned}
    $$

    The total thermal-expansion contribution is the sum of the fast and slow
    contributions:

    $$
    \href{./#var__slr_thermal}{\text{SLR}_{\mathrm{thermal},t}}=
    \href{./#var__slr_thermal_fast}{\text{SLR}_{\mathrm{thermal,fast},t}}+
    \href{./#var__slr_thermal_slow}{\text{SLR}_{\mathrm{thermal,slow},t}}.
    $$

    The exact exponential update makes the response independent of the chosen
    numerical time step for a constant temperature forcing.

    This two-timescale formulation is a reduced-form approximation chosen for
    MIMOSA, rather than a direct reproduction of an ocean model. The first-order
    relaxation form follows BRICK v0.2 (Wong et al., 2017, Sect. 3.2.4,
    Eqs. 9--10). Splitting it into fast and slow boxes represents the upper- and
    deep-ocean distinction in SURFER v2.0 (Martínez Montero et al., 2022,
    Sects. 2.3.1 and 2.4.3). MIMOSA's equilibrium sensitivities and response
    times are calibrated jointly against the AR6 thermal-expansion contributions
    in Table 9.9 of Fox-Kemper et al. (2021); they are not the coefficients from
    either BRICK or SURFER.

    {{ slr_coefficients("thermal") }}

    # Glaciers

    The glacier contribution relaxes towards the capped equilibrium proposed
    by Martínez Montero et al. (2022):

    $$
    \text{SLR}^*_{\mathrm{GL}}(\href{./#var__temperature}{T_{t-1}})=\href{./#slrcoef__slr_gsic_total_ice}{P_{\mathrm{GL}}}
    \tanh\left(\frac{\href{./#var__temperature}{T_{t-1}}}{\href{./#slrcoef__slr_gsic_temp_sensitivity}{\zeta_{\mathrm{GL}}}}\right),
    $$

    $$
    \href{./#var__slr_cumgsic}{\text{SLR}_{\mathrm{GL},t}}=\text{SLR}^*_{\mathrm{GL}}(\href{./#var__temperature}{T_{t-1}})+
    \left(\href{./#var__slr_cumgsic}{\text{SLR}_{\mathrm{GL},t-1}}-\text{SLR}^*_{\mathrm{GL}}(\href{./#var__temperature}{T_{t-1}})\right)
    e^{-\Delta t/\href{./#slrcoef__slr_gsic_timescale}{\tau_{\mathrm{GL}}}}.
    $$

    This replaces the previous formulation, in which all glaciers eventually
    melted under any sustained temperature above -1 degree C.

    {{ slr_coefficients("glaciers") }}

    # Greenland ice sheet

    The Greenland ice sheet contributes to sea-level rise as it loses ice.
    MIMOSA uses a SIMPLE-style delayed equilibrium: the temperature at the
    preceding step sets a long-term equilibrium contribution, and the actual
    contribution approaches that target gradually.

    The equilibrium curve uses the logistic function

    $$
    \sigma(x)=\frac{1}{1+e^{-x}},
    $$

    a smooth transition from 0 to 1. Here $x$ is a dimensionless argument.
    The equilibrium SLR contribution is normalised to zero at zero warming
    and approaches the ice sheet's sea-level potential at high warming:

    $$
    \text{SLR}^*_{\mathrm{GIS}}(\href{./#var__temperature}{T_{t-1}})=\href{./#slrcoef__slr_gis_total_ice}{P_{\mathrm{GIS}}}
    \frac{\sigma((\href{./#var__temperature}{T_{t-1}}-\href{./#slrcoef__slr_gis_threshold}{T_c})/\href{./#slrcoef__slr_gis_transition_width}{w})-\sigma(-\href{./#slrcoef__slr_gis_threshold}{T_c}/\href{./#slrcoef__slr_gis_transition_width}{w})}
         {1-\sigma(-\href{./#slrcoef__slr_gis_threshold}{T_c}/\href{./#slrcoef__slr_gis_transition_width}{w})},
    $$

    The response time $\tau_{\mathrm{GIS}}$, measured in years, determines
    how quickly Greenland approaches this equilibrium. It decreases with
    warming, so higher temperatures lead to a faster response:

    $$
    \tau_{\mathrm{GIS}}(\href{./#var__temperature}{T_{t-1}})=\href{./#slrcoef__slr_gis_base_timescale}{\tau_0}e^{-\href{./#slrcoef__slr_gis_timescale_sensitivity}{\gamma} \href{./#var__temperature}{T_{t-1}}}.
    $$

    The actual Greenland SLR contribution is updated each time step as

    $$
    \begin{aligned}
    \href{./#var__slr_cumgis}{\text{SLR}_{\mathrm{GIS},t}}
    &= \text{SLR}^*_{\mathrm{GIS}}(\href{./#var__temperature}{T_{t-1}}) \\
    &\quad + \left(\href{./#var__slr_cumgis}{\text{SLR}_{\mathrm{GIS},t-1}}
    - \text{SLR}^*_{\mathrm{GIS}}(\href{./#var__temperature}{T_{t-1}})\right)
    e^{-\Delta t/\tau_{\mathrm{GIS}}(\href{./#var__temperature}{T_{t-1}})}.
    \end{aligned}
    $$

    Thus, only part of the gap to equilibrium closes within a model time step.
    For example, with a constant temperature and response time, about 63% of
    that gap closes after one response time. The actual SLR contribution,
    rather than the equilibrium target, is added to total sea-level rise.

    {{ slr_coefficients("greenland") }}

    # Antarctic ice sheet

    A single lagged Antarctic subsurface-ocean temperature proxy drives the AIS
    response. A smooth threshold term represents the possibility of faster ice
    loss at high warming while retaining differentiability for optimisation.

    The function $\sigma$ is the same logistic function defined in the
    Greenland section above.

    $$
    \href{./#var__slr_antarctic_ocean_temp}{T_{A,t}}=\href{./#slrcoef__slr_ais_ocean_temp_scaling}{\lambda_A} \href{./#var__temperature}{T_{t-1}}+
    \left(\href{./#var__slr_antarctic_ocean_temp}{T_{A,t-1}}-\href{./#slrcoef__slr_ais_ocean_temp_scaling}{\lambda_A} \href{./#var__temperature}{T_{t-1}}\right)e^{-\Delta t/\href{./#slrcoef__slr_ais_ocean_temp_timescale}{\tau_A}},
    $$

    $$
    \href{./#var__slr_cumais}{\text{SLR}_{\mathrm{AIS},t}}=\href{./#var__slr_cumais}{\text{SLR}_{\mathrm{AIS},t-1}}+\Delta t
    \left[\href{./#slrcoef__slr_ais_background_rate}{r_0}+\href{./#slrcoef__slr_ais_temp_sensitivity}{r_1}\href{./#var__slr_antarctic_ocean_temp}{T_{A,t}}+\href{./#slrcoef__slr_ais_fast_rate}{r_f}\sigma((\href{./#var__slr_antarctic_ocean_temp}{T_{A,t}}-\href{./#slrcoef__slr_ais_fast_threshold}{T_{crit}})/\href{./#slrcoef__slr_ais_fast_transition_width}{w_A})\right]
    \left(1-\frac{\href{./#var__slr_cumais}{\text{SLR}_{\mathrm{AIS},t-1}}}{\href{./#slrcoef__slr_ais_total_ice}{P_{\mathrm{AIS}}}}\right).
    $$

    The scaling and delay between global surface warming and Antarctic
    subsurface-ocean warming are motivated by LARMIP-2 (Levermann et al., 2020,
    Sect. 2.2). The AIS rate equation itself is a deliberately simpler MIMOSA
    parameterisation, not a reproduction of LARMIP-2 or SURFER. Its smooth fast
    term is inspired by the threshold representation of uncertain rapid
    Antarctic disintegration in Wong et al. (2017). The ordinary background and
    temperature-response rates are calibrated against the AR6 AIS contributions
    in Table 9.9. The high parameter set is intended as a low-likelihood,
    high-impact sensitivity case and not as the upper endpoint of the AR6 likely
    range.

    {{ slr_coefficients("antarctica") }}

    # Land-water storage

    AR6 projects an approximately scenario-independent land-water contribution
    of 0.03 m between 1995--2014 and 2100. Because the historical contribution
    is already implicit in MIMOSA's 2025 initial total, only its future anomaly
    is added explicitly:

    $$
    \href{./#var__slr_cumlws}{\text{SLR}_{\mathrm{LWS},t}}=\href{./#var__slr_cumlws}{\text{SLR}_{\mathrm{LWS},t-1}}+\Delta t\,\href{./#slrcoef__slr_lws_rate}{r_{\mathrm{LWS}}},
    \qquad \href{./#slrcoef__slr_lws_rate}{r_{\mathrm{LWS}}}=0.0004\ \mathrm{m\,yr^{-1}}.
    $$

    {{ slr_coefficients("land_water") }}

    # Total sea-level rise

    $$
    \href{./#var__total_SLR}{\text{SLR}_t}=\href{./#var__slr_thermal}{\text{SLR}_{\mathrm{thermal},t}}+\href{./#var__slr_cumgsic}{\text{SLR}_{\mathrm{GL},t}}
        +\href{./#var__slr_cumgis}{\text{SLR}_{\mathrm{GIS},t}}+\href{./#var__slr_cumais}{\text{SLR}_{\mathrm{AIS},t}}+\href{./#var__slr_cumlws}{\text{SLR}_{\mathrm{LWS},t}}.
    $$

    ## Calibration against IPCC AR6

    The process papers motivate the compact equation forms; they do not imply
    that every coefficient is transferred unchanged. The three coherent
    parameter sets are outcome-calibrated against AR6 WGI Table 9.9 and the
    warming-level assessment in Chapter 12. Consequently, increasing the
    glacier or ordinary AIS response remains consistent with the cited equation
    structure while bringing total SLR into the assessed AR6 ranges. The
    following benchmark prescribes a linear warming path from 1.27 degrees C in
    2025 to the stated 2100 warming level. Values are metres relative to 1900:

    <div class="tiny_table table_first_col_header" markdown>
    {{ read_csv("docs/assets/data/slr_ar6_benchmark.csv") }}
    </div>

    The MIMOSA columns in this table and the component table below are generated
    directly from the current component equations. After changing the SLR
    formulation or parameters, regenerate both tables from the repository root:

    ```shell
    python diagnostics/slr_ar6.py
    ```

    A model test compares the committed CSV files with a fresh calculation so
    that outdated documentation is detected automatically.

    AR6 Chapter 12 reports the warming-level values relative to 1995--2014.
    The table adds the assessed 0.158 m rise from 1900 to 1995--2014, following
    the AR6 Summary for Policymakers. The comparison is a calibration diagnostic,
    not a claim that a warming level uniquely determines SLR: the preceding
    temperature pathway and rate of warming also affect the lagged components.

    Under this diagnostic, the low set tracks the lower edge of the AR6 likely
    range and central remains within it. High exceeds the likely range at 3 and
    4 degrees C by design, representing rapid Antarctic loss. For transparency,
    the central 2100 component values at 2, 3, and 4 degrees C respectively are:

    <div class="tiny_table table_first_col_header" markdown>
    {{ read_csv("docs/assets/data/slr_ar6_components.csv") }}
    </div>

    References:

    - [Fox-Kemper et al. (2021), IPCC AR6 WGI Chapter 9](https://www.ipcc.ch/report/ar6/wg1/chapter/chapter-9/).
    - [IPCC AR6 WGI Chapter 12, climate impact-driver projections](https://www.ipcc.ch/report/ar6/wg1/chapter/chapter-12/).
    - [IPCC AR6 WGI Summary for Policymakers](https://www.ipcc.ch/report/ar6/wg1/chapter/summary-for-policymakers/).
    - [Bakker, Applegate and Keller (2016), SIMPLE](https://doi.org/10.1016/j.envsoft.2016.05.003).
    - [Martínez Montero et al. (2022), SURFER v2.0](https://doi.org/10.5194/gmd-15-8059-2022).
    - [Wong et al. (2017), BRICK v0.2](https://doi.org/10.5194/gmd-10-2741-2017).
    - [Levermann et al. (2020), LARMIP-2](https://doi.org/10.5194/esd-11-35-2020).
    - [Wong, Bakker and Keller (2017), Antarctic fast dynamics](https://doi.org/10.1007/s10584-017-2039-4).
    """

    projection = inputs.config_value("sealevelrise.projection")
    try:
        slr_params = SLR_PROJECTION_PARAMETER_SETS[projection]
    except KeyError as exc:
        valid = ", ".join(SLR_PROJECTION_PARAMETER_SETS)
        raise ValueError(
            f"Unknown SLR projection parameter set '{projection}'. "
            f"Expected one of: {valid}."
        ) from exc

    # A common reference year and rounded central component values at the
    # default model start. Their 0.23 m sum is consistent with the assessed
    # historical rise and recent component trends. Values are metres of global
    # mean SLR above the 1900 reference.
    m.slr_reference_year = Param(initialize=1900)
    m.slr_initial_year = Param(initialize=2025)

    # Thermal expansion: fast upper-ocean and slow deep-ocean response boxes.
    m.slr_thermal_fast = Var(
        m.t,
        within=NonNegativeReals,
        units=quant.unit("m"),
        doc="Global mean sea-level rise from the fast thermal-expansion response of the upper ocean, relative to 1900.",
    )
    m.slr_thermal_slow = Var(
        m.t,
        within=NonNegativeReals,
        units=quant.unit("m"),
        doc="Global mean sea-level rise from the slow thermal-expansion response of the deep ocean, relative to 1900.",
    )
    m.slr_thermal = Var(
        m.t,
        within=NonNegativeReals,
        units=quant.unit("m"),
        doc="Total global mean sea-level rise from ocean thermal expansion, relative to 1900. Sum of the fast and slow contributions.",
    )
    m.slr_thermal_fast_init = Param(initialize=0.045)
    m.slr_thermal_slow_init = Param(initialize=0.025)
    m.slr_thermal_fast_sensitivity = Param(
        initialize=slr_params["thermal_fast_sensitivity"]
    )
    m.slr_thermal_slow_sensitivity = Param(
        initialize=slr_params["thermal_slow_sensitivity"]
    )
    m.slr_thermal_fast_timescale = Param(
        initialize=slr_params["thermal_fast_timescale"]
    )
    m.slr_thermal_slow_timescale = Param(
        initialize=slr_params["thermal_slow_timescale"]
    )

    # Glaciers. The 0.32 m potential follows the AR6 parametric extrapolation.
    m.slr_cumgsic = Var(
        m.t,
        within=NonNegativeReals,
        units=quant.unit("m"),
        doc="Global mean sea-level rise from the loss of glaciers and ice caps outside the Greenland and Antarctic ice sheets, relative to 1900.",
    )
    m.slr_gsic_init = Param(initialize=0.090)
    m.slr_gsic_total_ice = Param(initialize=0.32)
    m.slr_gsic_temp_sensitivity = Param(
        initialize=slr_params["gsic_temp_sensitivity"]
    )
    m.slr_gsic_timescale = Param(initialize=slr_params["gsic_timescale"])

    # Greenland. The potential is the sea-level equivalent of the full ice
    # sheet; the remaining parameters govern equilibrium and response speed.
    m.slr_cumgis = Var(
        m.t,
        within=NonNegativeReals,
        units=quant.unit("m"),
        doc="Global mean sea-level rise from Greenland ice-sheet loss, relative to 1900. Gradually approaches a temperature-dependent equilibrium contribution.",
    )
    m.slr_gis_init = Param(initialize=0.045)
    m.slr_gis_total_ice = Param(initialize=7.3)
    m.slr_gis_threshold = Param(initialize=slr_params["gis_threshold"])
    m.slr_gis_transition_width = Param(
        initialize=slr_params["gis_transition_width"]
    )
    m.slr_gis_base_timescale = Param(
        initialize=slr_params["gis_base_timescale"]
    )
    m.slr_gis_timescale_sensitivity = Param(
        initialize=slr_params["gis_timescale_sensitivity"]
    )

    # Antarctica. The proxy temperature is in degrees C above pre-industrial;
    # rates are metres of sea-level equivalent per year.
    m.slr_antarctic_ocean_temp = Var(
        m.t,
        units=quant.unit("degC_above_PI"),
        doc="Antarctic subsurface-ocean temperature proxy above pre-industrial levels. Responds with a delay to global warming and drives Antarctic ice-sheet loss.",
    )
    m.slr_ais_ocean_temp_init = Param(initialize=0.30)
    m.slr_ais_ocean_temp_scaling = Param(
        initialize=slr_params["ais_ocean_temp_scaling"]
    )
    m.slr_ais_ocean_temp_timescale = Param(
        initialize=slr_params["ais_ocean_temp_timescale"]
    )
    m.slr_cumais = Var(
        m.t,
        within=NonNegativeReals,
        units=quant.unit("m"),
        doc="Global mean sea-level rise from Antarctic ice-sheet loss, relative to 1900. Includes background loss, an ocean-temperature response, and a possible faster response at high warming.",
    )
    m.slr_ais_init = Param(initialize=0.025)
    # Effective vulnerable Antarctic stock, rather than the full AIS potential.
    m.slr_ais_total_ice = Param(initialize=5.0)
    m.slr_ais_background_rate = Param(
        initialize=slr_params["ais_background_rate"]
    )
    m.slr_ais_temp_sensitivity = Param(
        initialize=slr_params["ais_temp_sensitivity"]
    )
    m.slr_ais_fast_rate = Param(initialize=slr_params["ais_fast_rate"])
    m.slr_ais_fast_threshold = Param(
        initialize=slr_params["ais_fast_threshold"]
    )
    m.slr_ais_fast_transition_width = Param(
        initialize=slr_params["ais_fast_transition_width"]
    )

    # Future land-water-storage anomaly. Its historical contribution is
    # implicit in the common 2025 initial total, avoiding double counting.
    m.slr_cumlws = Var(
        m.t,
        within=NonNegativeReals,
        units=quant.unit("m"),
        doc="Additional global mean sea-level rise from changes in land-water storage after the model start. Starts at zero and increases at a constant annual rate; historical land-water contributions are already included in the initial total sea level.",
    )
    m.slr_lws_rate = Param(initialize=0.0004)

    m.total_SLR = Var(
        m.t,
        within=NonNegativeReals,
        units=quant.unit("m"),
        doc="Total global mean sea-level rise relative to 1900. Sum of thermal expansion, glacier and ice-sheet loss, and future changes in land-water storage.",
    )

    constraints = [
        GlobalEquation(
            m.slr_thermal_fast,
            lambda m, t: (
                slr_thermal_expansion(
                    m.slr_thermal_fast[t - 1],
                    m.temperature[t - 1],
                    m.slr_thermal_fast_sensitivity,
                    m.slr_thermal_fast_timescale,
                    m,
                    m.period_length[t],
                )
                if t > 0
                else slr_initial_value(m.slr_thermal_fast_init, m)
            ),
        ),
        GlobalEquation(
            m.slr_thermal_slow,
            lambda m, t: (
                slr_thermal_expansion(
                    m.slr_thermal_slow[t - 1],
                    m.temperature[t - 1],
                    m.slr_thermal_slow_sensitivity,
                    m.slr_thermal_slow_timescale,
                    m,
                    m.period_length[t],
                )
                if t > 0
                else slr_initial_value(m.slr_thermal_slow_init, m)
            ),
        ),
        GlobalEquation(
            m.slr_thermal,
            lambda m, t: m.slr_thermal_fast[t] + m.slr_thermal_slow[t],
        ),
        GlobalEquation(
            m.slr_cumgsic,
            lambda m, t: (
                slr_gsic(
                    m.slr_cumgsic[t - 1],
                    m.temperature[t - 1],
                    m,
                    m.period_length[t],
                )
                if t > 0
                else slr_initial_value(m.slr_gsic_init, m)
            ),
        ),
        GlobalEquation(
            m.slr_cumgis,
            lambda m, t: (
                slr_gis(
                    m.slr_cumgis[t - 1],
                    m.temperature[t - 1],
                    m,
                    m.period_length[t],
                )
                if t > 0
                else slr_initial_value(m.slr_gis_init, m)
            ),
        ),
        GlobalEquation(
            m.slr_antarctic_ocean_temp,
            lambda m, t: (
                slr_antarctic_ocean_temperature(
                    m.slr_antarctic_ocean_temp[t - 1],
                    m.temperature[t - 1],
                    m,
                    m.period_length[t],
                )
                if t > 0
                else slr_initial_value(m.slr_ais_ocean_temp_init, m)
            ),
        ),
        GlobalEquation(
            m.slr_cumais,
            lambda m, t: (
                slr_ais(
                    m.slr_cumais[t - 1],
                    m.slr_antarctic_ocean_temp[t],
                    m,
                    m.period_length[t],
                )
                if t > 0
                else slr_initial_value(m.slr_ais_init, m)
            ),
        ),
        GlobalEquation(
            m.slr_cumlws,
            lambda m, t: (
                m.slr_cumlws[t - 1]
                + m.period_length[t] * m.slr_lws_rate
                if t > 0
                else 0.0
            ),
        ),
        GlobalEquation(
            m.total_SLR,
            lambda m, t: (
                m.slr_thermal[t]
                + m.slr_cumgsic[t]
                + m.slr_cumgis[t]
                + m.slr_cumais[t]
                + m.slr_cumlws[t]
            ),
        ),
    ]

    return constraints