Coupling the Cryosphere to other Earth systems, part I
Back to Summer Modeling School
Coupling module included in Glimmer-CISM (GLINT)
One of the distinguishing features of Glimmer-CISM, compared with other ice sheet models, is that it was designed from the outset to be coupled to climate forcing. In part II, we'll look at how Glimmer-CISM is coupled to CCSM, but in this session we're going to use the module built into Glimmer, which is called GLINT. The problem GLINT is designed to solve is coupling the ice sheet model, which is a regional model on a Cartesian grid, to climate forcing of some kind (climatology, reanalysis or a model), which is on a global latitude-longitude grid. GLINT includes code to manage the translation of quantities between the two grids, and handling the different timescales involved. The second part is important because the atmosphere and the ice sheet evolve on very different timescales.
In a moment, we'll look at how the coupling works, but first we'll start an example going, as it will take some time to run. To run the example, you'll need the standard Glimmer v.1.0.18 install (from Wednesday), and some input files, which you can get here.
The example we're going to look at uses the NCEP-DOE reanalysis climatology. We're going to force a model of the Greenland ice sheet model using this climatology for 400 years. Since the model will take about 40 minutes to run, let's get started immediately.
So, you should have the tarball (see above), and a glimmer-1.0.18 installation. If you don't, go back to this page for installation instructions. First, unpack the tarball, and descend into the directory:
tar xzvf Glint-example.tar.gz cd glint-example
In this directory are some configuration and data files:
|glint_example.config||Configures the climate driver code: specifies the climate forcing files and parameters|
|gland20.config||Configures the ice sheet model (GLIDE) and interface (GLINT). In addition to ice parameters, the mass-balance model is specified here.|
|gland20.input.nc||Input data for GLIDE (on the local grid)|
|ncep-doe_6h_climate.64x32.nc||Climate forcing data (on the global grid), 6-hourly|
|orog.igcmgrid.64x32.nc||Global topography data|
You can use ncview to take a look at these files as the model runs. The climate forcing file is large, and contains temperature and precipitation data at 6-hourly intervals. Assuming the bin directory of the Glimmer installation is in your PATH, you can run the example as follows:
You'll be prompted to enter the names of the relevant configuration files. Do this as follows:
Enter name of climate configuration file glint_example.config Enter name of GLIDE configuration file to be read gland20.config
At this point, the model will start, and lots of information will be written to the terminal, as well as to the file glide.log. At this point, have a look at the configuration files: by looking also at the Glimmer documentation, you can see what options are enabled, as well as what kind of output files you can expect.
Coding with GLINT
The forcing code for this example is contained in your glimmer-1.0.18 source folder, in src/fortran/glint_example.F90. If we look at that file, we can see how the coupling works. Because we expect to be initialising GLINT from within another, potentially complex code, such as a climate model, we want to initialise the interface based on the parameters which that code knows about. Consequently, the initialisation call to GLINT is more complex than that for GLIDE:
call initialise_glint(ice_sheet, & climate%clim_grid%lats, & climate%clim_grid%lons, & climate%climate_tstep, & (/commandline_configname/), & orog=orog_out, & ice_frac=ice_frac, & albedo=albedo, & orog_longs=lons_orog, & orog_lats=lats_orog, & daysinyear=climate%days_in_year)
We can compare this call with the list of arguments to the subroutine, which we can see by looking at the appropriate source file (glint.F90):
call initialise_glint(params, lats, longs, time_step, paramfile)
Note that only compulsory arguments are given here. Fortran 90/95 permits optional subroutine arguments, indicated in our original call by the use of argument labels (for example orog=orog_out). The meaning of the compulsory arguments is as follows:
|params||The instance of GLINT being initialised (this is of type glint_params).|
|lats||List of latitudes of the global grid points (degrees)|
|longs||List of longitudes of the global grid points (degrees)|
|time_step||Size of forcing time-step (hours)|
|paramfile||Name of parameter file|
The other, optional, arguments can be used to tell GLINT other parameters pertaining to the climate forcing.
Having initialised GLINT, all we need to do is pass it climate forcing data every timestep (I've reformated the code for clarity):
call glint(ice_sheet, & time, & temp, & precip, & orog, & orog_out=orog_out, & albedo=albedo, & output_flag=out, & ice_frac=ice_frac, & water_out=fw, & water_in=fw_in, & total_water_in=twin, & total_water_out=twout, & ice_volume=ice_vol)
Again, we have some optional arguments, which in this case mostly give the names of arrays in which to return various output fields. The compulsory fields are as follows:
|ice_sheet||The glint_params type we're using|
|time||The current time (hours)|
|temp||The global instantaneous temperature field (degC)|
|precip||The global precipitation field (mm/s)|
|orog||The global topography (m)|
That's the essence of how you use GLINT. Of course, at the end of the simulation, we call
Looking at some output
When the model run completes, have a look at the output. There are actually three output files:
|gland20.10a.nc||Decadal snapshot of GLIDE variables|
|gland20.10a.glint.nc||Decadal snapshot of GLINT variables|
|gland20.monthly.glint.nc||Monthly snapshot of GLINT variables, for years 10-20|
You'll see that GLIDE and GLINT variables reside in different files. This is because the two modules have information on different time-scales: GLIDE only knows mass-balance information for its own time-step (a year, for example), whereas GLINT calculates the mass-balance more frequently than that (every day, in this case). By having two files, we can have the opportunity to examine both sets of data.
If you look at the data, you'll see that Greenland expands considerably during the course of the run, and substantial ice builds up in areas which are presently unglaciated. You might like to think why this is, and how we could construct a reasonable experiment where this didn't happen. We're using a relatively simple mass-balance model (a daily positive-degree-day model, as described in the Glimmer paper), and we've not tuned the PDD factors in this model. We're also starting with an isothermal ice sheet: even though we have thermomechanical coupling enabled, the model has not been 'spun up', so the ice sheet we're starting with is not anything like a reasonable estimate of the present state of Greenland.
Then there's the climate forcing: reanalysis is an estimation of the past state of the atmosphere, made using a model, based on observations. Different reanalysis products have different strengths and weaknesses: see Griggs and Bamber (2008) for an example comparison between datasets. One difficulty with reanalysis is that in the regions we're interested in, there is a sparsity of observational data. We can use models to fill in the gaps, but with fewer constraining observations, the results may be less realistic. As you can see, coupling to 'real' climate data has many challenges.
Footnotes and references
- GLINT stands for GLimmer INTerface.
- Kanamitsu M, W Ebisuzaki, J Woollen, S-K Yang, JJ Hnilo, M Fiorino, and GL Potter (2002) NCEP–DOE AMIP-II Reanalysis (R-2). Bulletin of the American Meteorological Society, 83(11), 1631-1643
- Griggs JA, and JL Bamber (2008) Assessment of Cloud Cover Characteristics in Satellite Datasets and Reanalysis Products for Greenland. Journal of Climate, 21(9), 1837-1849.