Ice Sheet Evolution Experiments
Now that we've (1) convinced ourselves that the higher-order model is "working" (at least as well as other higher-order models out there) and (2) added some code so that we can evolve the ice sheet geometry, we can do some simple experiments looking at the combination of the two. By "simple", I mean coarse resolution, idealized domains with idealized boundary conditions. These may actually be somewhat "non-sensicle" with respect to real ice sheets (and in that sense, the title of this page is somewhat misleading), but they are still useful exercises for testing and comparing algorithms and pointing out some other important issues.
The two experiments we will attempt are:
- Allow a parabolic-shaped mound of ice to spread out under it's own weight. The non-sensicle part is that we will assume (i) zero surface mass balance (no accumulation or ablation) and (ii) a fixed lateral boundary. That is, the ice sheet margin won't be allowed to move past it's original position (think of an ice sheet surrounded by a very tall (and very strong) fence - the ice sheet will eventually take on the shape of a disk with uniform thickness).
- Evolve a confined ice shelf of uniform thickness and temperature. The non-sensicle part here is that again, we assume no accumulation or ablation. Thus, the only thing that can happen is that ice flows out of the shelf front. Eventually, the shelf should thin to zero thickness (but how and when that happens will vary depending on a number of things).
Experiment 1: evolve the blob
Change your current directory to tests/ho-other/ (i.e. higher-order other). There will be a model configuration file there called blob.config and a related python script blob.py (both courtesy of Tim Bocek). As in previous experiments, we first need to build the netCDF input files
python blob.py blob.config
Then, we can run the model with the input files with
echo blog.config | ./simple_glide
if simple_glide is in your directory (if simple_glide is in your path then the "./" out front is not needed). With the default values in blob.config, the code will evolve a simple parabolic shaped ice sheet for 5000 yrs at a time step of 50 yrs using the first-order upwinding scheme we just built. This option is set in the configuration file
[options] flow_law = 2 evolution = 4 temperature = 1 ... etc ...
As the code works, you'll see ~100 packets of iterations fly by on the screen, but at the low resolution here this should not take too long. The netCDF file blob.out.nc will record the output and you can use NCVIEW and the "movie" controls at the top to view the time series of any variable while the model is running or at the end of the run. Once you've the run has finished, rename your output file
mv blob.out.nc blob.out.fo.nc
where the "fo" stands for "first-order advection scheme". Now edit the [options] section of blob.config and change evolution = 4 to evolution =3 . This will tell the code to use a more sophisticated advection scheme - incremental remapping - to evolve the thickness. Repeat the steps above executing the python scripts and simple_glide. When you've got another netCDF output file at the end of the run rename it
mv blob.out.nc blob.out.remap.nc
Because NCVIEW is not necessarily ideal for comparing the output from two similar files w/ slightly different input parameters, we'll use a simple matlab script to compare the output at the same time slices but using the two different evolution schemes. Make sure to change your matlab directory to your tests/blob/ directory before running the script (or copy the relevant netCDF files into your matlab directory).
- How does the output for the two evolution schemes compare? Are the elevation profiles produced from the different schemes at the same time slices significantly different? (the answer actually surprised me)
- If we go back and do the same evolution run, but halve the horizontal grid spacing and double the grid resolution, do you notice anything different about the evolved ice sheet profile, especially near the divide? (NOTE: to do this successfully you will probably need to half to total run time and time step as well).
NOTE: IT WOULD BE GREAT TO THE VISCOSITY FIELD HERE TO LOOK AT ... AS WE COULD SHOW WHY/HOW ONE GETS RAYMOND BUMPS AT A DIVIDE.
Experiment 2: evolve the shelf
Change your current directory to tests/shelf/. There will be a model configuration file there called confined-shelf-ss.config and a related python script confined-shelf-ss.py (again, both courtesy of Tim Bocek). The default setup for this configuration file will give you a diagnostic (i.e. instantaneous) solution for a setup that is very close to that for the unpublished ESIMINT ice shelf experiments 3 and 4 , which you explored a bit earlier in one of the COMSOL exercises. To get that solution build the necessary netCDF input files,
python confined-shelf-ss.py confined-shelf-ss.config
and then run the model
echo confined-shelf-ss.config | ./simple_glide
(again, if simple_glide is in your current directory, use the above or, if it is in your path already, omit the "./"). Examine the converged solution using NCVIEW. It should look very similar to the first set of figures shown here. Note that, for now, this is a very coarse resolution solution both in the vertical and horizontal.
Now we'll march this initial condition forward in time by 250 yrs using our 1st-order advection scheme. Edit confined-shelf-ss.config so that the items in bold below match those in your file
[time] niso = 1. tend = 200250. ntem = 1. tstart = 200000. dt = 10. nvel = 1.
[options] flow_law = 2 evolution = 4 temperature = 1 ... diagnostic_run = 0 basal_water = 0 ...
Rebuild the input netCDF files and run the model as before. You can watch the shelf evolution in "real time" (as the fields get saved to the netCDF file) by plotting the thickness field with NCVIEW and using the movie controls at the top. Once the model has stopped running and you have a netCDF file for the whole run, use NCVIEW to make a map of the thickness field, then click somewhere near the shelf front (bottom of the figure). You should get a figure that looks something like that in Figure 1 below, which is the history of the thickness over time at that point. You can see what looks something like an exponential decay, suggesting that, even though there is no accumulation, and even though the shelf thinned very rapidly at first, it will take some time for the shelf to thin to ~0 under these conditions.
Figure 1: History of thickness over time near the ice shelf front.
Let's do the same exercise but change some of the input parameters. Specifically, let's make the entire shelf warmer and softer. Edit the confined-shelf-ss.py script and change the lines
#Set the flow law for this experiment in the configuration file and write the file back out parser.set("parameters", "default_flwa", "5.7e-18")
#Set the flow law for this experiment in the configuration file and write the file back out parser.set("parameters", "default_flwa", "5.7e-17")
We've just made the ice an order of magnitude softer, so it should flow faster, and our shelf thickness should decay much faster. Since we've changed some input parameters, don't forget to rebuild the netCDF input files before re-running the model. Ok, so now we've re-run the 250 years of evolution with softer, warmer ice. What happened? Some funny warnings flashed by that might worry us a bit. When we plot the thickness history over time again, we see something like Figure 2 below.
Figure 2: History of thickness over time near the ice shelf front (softer shelf case).
Can that possibly be right? We lost the whole front of the shelf in just 10 years? Is it Larsen B all over again, or did we forget something? Usually when your model gives you very exciting results, you should suspect the latter. In this case, we made the ice an order of magnitude softer and the ice went about an order of magnitude faster (it won't always be one to one like that), but we didn't change our grid spacing or our time step, and so blew the CFL condition in a big way. Interestingly, the model still ran too completion, telling us something else useful (or scary) - the model won't always crash if we do something dumb, so hopefully we are more careful and/or have other ways of checking out our solutions.
If we reduce the time step in confined-shelf-ss.config by an order of magnitude as well
[time] ... dt = 1. ...
and run the experiment again, we get the results shown in Figure 3 - more drastic than in Figure 1 but much more sensible than Figure 2.
Figure 3: History of thickness over time near the ice shelf front (softer shelf case w/o CFL violation).
Shelf: what happens if you change the rate factor by an order of mag in the python script? Decrease it ... increase it (w/o altering time step, should lead to crash due to CFL violation - use this as an excuse to alter subroutine and add CFL warning) Change thickness by factor of 2? Look at rate of decay of thickness and estimate how long until shelf-front thins to zero Discuss problem w/ domain edges - thickness stays at 500m forever, which is non-physical and due to BCs (only "inside" of domain acts in a way we'd expect)