Skip to content

Commit

Permalink
Merge pull request #1609 from billsacks/lnd2glc_bilinear
Browse files Browse the repository at this point in the history
Currently, the remapping from the low-resolution land grid (with
elevation classes) to the high-resolution glc grid is done using
conservative remapping. However, this leads to extreme grid imprinting /
blockiness. The new scheme implemented here uses bilinear remapping with
an optional conservation correction.

The conservation correction is optional because in the vast majority of
cases, we are only running a one-way-coupled (diagnostic) ice sheet, so
conservation is not important. However, there is logic in place so that
the conservation correction is turned on by default in all cases that
need it.

Main changes are from @whlipscomb, following an initial design by
@JeremyFyke. I then did a careful review, some cleanup and refactoring,
and introduced namelist control over smb_renormalize.

@stephenprice @matthewhoffman and @jonbob : Note that this will affect
downscaling of SMB in ACME, too. One particular item to note: By
default, this uses the post-mapping conservation correction. At least in
CESM, we've decided to turn off the conservation correction if we're
doing a one-way-coupled run. We achieve this in CESM by setting the new
seq_infodata field, glc_coupled_fluxes. So our seq_infodata_PutData call
in glc_init_mct now looks like this:

    glc_coupled_fluxes = (.not. zero_gcm_fluxes)
    call seq_infodata_PutData(infodata, &
         glc_present= .true., &
         glclnd_present = .true., &
         glcocn_present = has_ocn_coupling(), &
         glcice_present = has_ice_coupling(), &
         glc_prognostic = .true., &
         glc_coupled_fluxes = glc_coupled_fluxes, &
         glc_nx=nx_tot, &
         glc_ny=ny_tot)
You may want to do something similar in MPAS-LI.

@apcraig : You're also welcome to review this if you're interested.

Some guidance for reviewing this PR

Primary changes are in src/drivers/mct/main: prep_glc_mod.F90 and
map_lnd2glc_mod.F90

Changes in seq_infodata support a new namelist option
('glc_renormalize_smb') and a new field that can be set by GLC in
initialization ('glc_coupled_fluxes')

There are a lot of deleted files. These are modules (and unit tests of
those modules) that are no longer needed with the new implementation.

Other than that, the remaining changes add or tweak some utility
functions that were useful in writing this new code.

Test suite: scripts_regression_tests (yellowstone): pass
Also ran CESM's aux_glc and aux_clm45 test suites. These include
tests with intel, pgi, gnu and nag compilers, in a wide number of
configurations. All tests pass, with answer changes just where
expected.
Test baseline: For the aux_glc and aux_clm45 tests, I ran them in the
context of
https://svn-ccsm-models.cgd.ucar.edu/clm2/branches/externals_update_cesm2_0_alpha06k
at 85267, and used an unmodified version of that revision for the
baselines
Test namelist changes: YES - new namelist option in drv_in,
'glc_renormalize_smb'
Test status: climate changing
For runs with an active GLC component, this is climate changing, at
least regionally. However, if GLC is coupled one-way (which is the
typical configuration in CESM), then this only impacts the
diagnostic, downscaled fields (coupler fields x2g_Flgl_qice and
x2g_Sl_tsrf, and the resulting fields in glc - e.g., acab and artm in
CISM)

Fixes #1479

User interface changes?: New drv_in namelist variable:
'glc_renormalize_smb'

Code review:
  • Loading branch information
mvertens authored May 27, 2017
2 parents 21f2a20 + 6d8cda5 commit 7a5242d
Show file tree
Hide file tree
Showing 24 changed files with 993 additions and 2,686 deletions.
33 changes: 33 additions & 0 deletions src/drivers/mct/cime_config/namelist_definition_drv.xml
Original file line number Diff line number Diff line change
Expand Up @@ -572,6 +572,39 @@
</values>
</entry>

<entry id="glc_renormalize_smb">
<type>char</type>
<category>control</category>
<group>seq_infodata_inparm</group>
<valid_values>on,off,on_if_glc_coupled_fluxes</valid_values>
<desc>
Whether to renormalize the surface mass balance (smb) sent from lnd to glc so that the
global integral on the glc grid agrees with the global integral on the lnd grid.

Unlike most fluxes, smb is remapped with bilinear rather than conservative mapping weights,
so this option is needed for conservation. However, conservation is not required in many
cases, since we often run glc as a diagnostic (one-way-coupled) component.

Allowable values are:
'on': always do this renormalization
'off': never do this renormalization (see WARNING below)
'on_if_glc_coupled_fluxes': Determine at runtime whether to do this renormalization.
Does the renormalization if we're running a two-way-coupled glc that sends fluxes
to other components (which is the case where we need conservation).
Does NOT do the renormalization if we're running a one-way-coupled glc, or if
we're running a glc-only compset (T compsets).
(In these cases, conservation is not important.)

Only used if running with a prognostic GLC component.

WARNING: Setting this to 'off' will break conservation when running with an
evolving, two-way-coupled glc.
</desc>
<values>
<value>on_if_glc_coupled_fluxes</value>
</values>
</entry>

<entry id="wall_time_limit">
<type>real</type>
<category>control</category>
Expand Down
4 changes: 0 additions & 4 deletions src/drivers/mct/main/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
list(APPEND drv_sources
component_type_mod.F90
map_glc2lnd_mod.F90
map_lnd2glc_mod.F90
map_lnd2rof_irrig_mod.F90
seq_map_mod.F90
seq_map_type_mod.F90
vertical_gradient_calculator_base.F90
vertical_gradient_calculator_2nd_order.F90
vertical_gradient_calculator_factory.F90
)

sourcelist_to_parent(drv_sources)
288 changes: 159 additions & 129 deletions src/drivers/mct/main/map_lnd2glc_mod.F90

Large diffs are not rendered by default.

Loading

0 comments on commit 7a5242d

Please sign in to comment.