compass.landice.tests.ismip7_calibration.ais.fit_delta_t.FitDeltaT
- class compass.landice.tests.ismip7_calibration.ais.fit_delta_t.FitDeltaT(test_case, melt_forms, state_name='climatology')[source]
A step that fits the basin thermal-forcing correction
dT_b.Protocol Sect. 4.2.1 permits the corrections to be calculated at either stage: (1) before the parameter optimisation, which “can lead to the problem that the parameter bounds are not constrained when present-day melt rates are compared to observations (namely, terms J1 and J2)”; or (2) after it, “as in ISMIP6”. This step follows (2), which is what the published quadratic worked example does, and it is why the calibration itself runs with
dT_b = 0throughout.dT_bdepends on the melt parameter, so it is fitted separately at the 5th, 50th and 95th percentiles of the selected distribution, and a complete MALI parameter file – basins, corrections and the parameter itself – is written for each. Projections at each percentile then need only point at the matching file.For each basin,
dTis searched on a grid within the configured bounds, minimising the absolute difference between the basin-integrated melt and the IMBIE observed value. The protocol recommends boundingdT_bby about 2 K, since the warmest-to-coldest spread across Antarctic ice shelves is only 3-4 K, and recommends avoiding the correction where possible since it is “only an ad-hoc correction”.The search is done on the MALI mesh with area-weighted integrals. The toolbox’s own
optimise_deltaTcannot be used, because it sums over structured-gridxandydimensions with a single scalar cell area. Melt is recomputed in Python from MALI’sTFdraft, so no further MALI runs are needed:dTenters the melt expression only through the thermal forcing.- __init__(test_case, melt_forms, state_name='climatology')[source]
Create the step
- Parameters:
test_case (compass.landice.tests.ismip7_calibration.ais.Ais) – The test case this step belongs to
state_name (str, optional) – The ocean state to fit against; the present-day climatology, to match the observed present-day melt
Methods
__init__(test_case, melt_forms[, state_name])Create the step
add_input_file([filename, target, database, ...])Add an input file to the step (but not necessarily to the MPAS model).
add_model_as_input()make a link to the model executable and add it to the inputs
add_namelist_file(package, namelist[, ...])Add a file with updates to namelist options to the step to be parsed when generating a complete namelist file if and when the step gets set up.
add_namelist_options(options[, out_name, mode])Add the namelist replacements to be parsed when generating a namelist file if and when the step gets set up.
add_output_file(filename)Add the output file that must be produced by this step and may be made available as an input to steps, perhaps in other test cases.
add_streams_file(package, streams[, ...])Add a streams file to the step to be parsed when generating a complete streams file if and when the step gets set up.
constrain_resources(available_resources)Constrain
cpus_per_taskandntasksbased on the number of cores available to this stepprocess_inputs_and_outputs()Process the inputs to and outputs from a step added with
compass.Step.add_input_file()andcompass.Step.add_output_file().run()Run this step of the test case
runtime_setup()Update attributes of the step at runtime before calling the
run()method.set_resources([cpus_per_task, ...])Update the resources for the subtask.
setup()Set up this step of the test case
update_namelist_at_runtime(options[, out_name])Update an existing namelist file with additional options.
update_namelist_pio([out_name])Modify the namelist so the number of PIO tasks and the stride between them consistent with the number of nodes and cores (one PIO task per node).
update_streams_at_runtime(package, streams, ...)Update the streams files during the run phase of this step using the given template and replacements.