SEMIAFA is a simple parameterised empirical model of Arctic sea-ice extent (SIE) over the annual cycle, best used on the geographically bound area of Arctic Sea, and specifically the marginal seas.
It was designed to be used to for testing the order-of-magnitude impact of shading interventions, which could take advantage of the amplifying effect of the ice-albedo feedback.
The pseudo-physical parameters used for modelling the physical processes affecting Arctic SIE, including the ice-albedo feedback, are set-out in the table below.
Training data on SIE:
- MASIE-NH data on SIE from the NSIDC
- MASIE NSIDC/NIC Sea Ice Product G02186 - Daily Ice Extent by Region in Square Kilometers
- In theory any similar data on sea-ice extent could be used.
Far from an exhaustive list, but here goes:
- It's not a dynamic physical model
- No physics occurs in the model, it's all parameterised at a very high level
- The pseudo physical parameters relate only to their effect on SIE, nothing else
- It does not consider ice thickness, volume or age
- SIE is the only output of the model
- It is optimised against SIE data only
- It doesn't model the physical geography at all
- It doesn't include the weather or any effects of clouds etc
- There are no inter-annual effects in the model
- It does not consider inter-annual trends in sea-ice extent
- Any benefit of an intervention that preserves sea-ice is just in-year only
- So although interventions which preserve SIE during the summer, will increase ice thickness over winter, the amount of multi-year ice, and tend to slow the loss of SIE in the following year, these effects will not be reflected in the model results
| Script | Action | Notes |
|---|---|---|
| test-shade-effect.py | Run the model twice, with and without shade, and compare the results | This fulfils the ultimate purpose of the model, to estimate the impact of a shading intervention on Arctic sea-ice extent |
| plot-masie-model-comparison.py | Compare the masie input data with the model output | To review how well the simple empirical model predicts SIE, compared to the input data it is optimised on. |
| plot-masie-data.py | View the input data on sea-ice extent | |
| optimise.py | Used with Hydra framework to optimse the parameters of the model | More info in "Optuna Sweeper Optimisation" below |
| semiafa.py | the model code itself | normally called by one of the above scripts |
The simple empirical model is configured with a limited set of parameters set-out in the table below. These parameters are optimised by minimising a cost function based on the delta between the model output and the input data from masie.
| Name | Description | Example Value* |
|---|---|---|
| sun_melt_multiplier | relative melting rate from a date-dependent rescaled insolation | 24.0 |
| ocean_heat_multiplier | relative melting rate from a constant ocean heat input | 0.2 |
| air_heat_lag | time in days between notional solar-driven air heat and direct solar heat | -49 |
| air_melt_multiplier | relative melting rate from date-dependent notional air heat | 1.7 |
| ice_freeze_multiplier | relative freezing rate of open sea | 10.0 |
| ice_power | power relation between extent of open sea and freezing rate | 0.7 |
| final_freeze_multiplier | degree of accelerated final freeze, needed to reach full SIE in winter | 0.00002 |
*Example values are after being optimised against the marginal seas only - see configuration notes.
| Name | Typical Value(s) Used | Description |
|---|---|---|
| lat_for_insolation_calc | 75 | representative latitude for approximate insolation |
| max_sie | 0.99999 | used to prevent infinities, should be close to 1 |
| min_sie | 0.00001 | used to prevent infinities, should be close to 0 |
| insolation_year | 2010 | doesn't really matter, pick a year |
| insolation_file | cache/insolation.pkl | .pkl file for caching insolation data |
| start_year | 2004 - 2026 | start year for model run, typically 2 years before start of MASIE data for parameter optimisation runs |
| num_years | 2-22 | number of years to run model over - long for parameter optimisation runs, short for shading tests |
| wind_spread_start | 136 | day we assume wind starts exposing open sea (first of month April:91, May:121) |
| wind_spread_stop | 156 | day we stop wind exposure of open sea # data indicates ~50,000 km2 by day 150, but highly variable |
| wind_spread_rate | 0.0002, 0.0003 | proportion of total area exposed by wind daily,0.0002 (marginal seas,5M km2) 0.0003 (whole of central arctic 8M km2) represent ~2,500km2 (x 20 days give 50,000) |
| Name | Typical Value(s) Used | Description |
|---|---|---|
| shade_on | No/Yes | apply a shade intervention (always "No" in parameter optimisation runs) |
| shade_start | 137 | day we start shade intervention (if any) |
| shade_stop | 201 | day we stop shade intervention (if any) |
| shade_area | 0.002 | relative area to which to apply shade |
| shade_targeting_factor | 1 or 0 | 0: shade is distributed over whole area, 1: shade is targeted at open sea 100% of the time |
To get a consist total frozen area in winter, select only the geographically bounded zones in the masie-NH data, i.e.:
regions: [' (1) Beaufort_Sea',' (2) Chukchi_Sea',' (3) East_Siberian_Sea',' (4) Laptev_Sea',' (5) Kara_Sea',' (11) Central_Arctic']
The SIE Central Arctic does not change in the early part of the melt season, so to get the best approximation of the albedo feedback, select only the marginal seas, i.e.:
regions: [' (1) Beaufort_Sea',' (2) Chukchi_Sea',' (3) East_Siberian_Sea',' (4) Laptev_Sea',' (5) Kara_Sea']
See https://nsidc.org/data/masie/explore-region
The Optuna optimiser works as a sweeper plugin for the Hydra config framework, see https://hydra.cc/docs/plugins/optuna_sweeper/.
To configure and run Optuna:
- Configure the Optuna sweeper in the Hydra config file, i.e.
config/optimiser-config.yaml- this involves setting the range and increment of each parameter
- Run
python3 optimise.py --multirun - Best config parameters are recorded in
optimization_results.yaml, in sub-foldermultirun/yyyy-mm-dd/hh-mm-ss/
- The insolation values calculated for each latitude and date are always the same.
- By default, to reduce run-time, the model caches the calculated insolation values using Pandas DataFrame_to_pickle, in the following .pkl file
- cache/insolation.pkl
- IMPORTANT: If the overall time period or latitude range is changed, the above .pkl file must be removed the next time the model is run
- It won't detect a discrepancy automatically. To fix this is on the to-do list (below)
- include an automatic check that date range of specified insolation .pkl is compatible with current run
- report insolation delta from shading for each year
- average insolation from multiple latitudes (currenty 75N only)
- add parameter to measure benefit from retaining multi-season ice?
- take account of sunlight reaching southerly latitudes first
- albedos as config parameters