Introduction
Introduction Statistics Contact Development Disclaimer Help
tprepare.py - pism-exp-gsw - ice stream and sediment transport experiments
git clone git://src.adamsgaard.dk/pism-exp-gsw
Log
Files
Refs
README
LICENSE
---
tprepare.py (6087B)
---
1 #!/usr/bin/env python3
2
3 try:
4 from netCDF4 import Dataset as NC
5 except:
6 print("netCDF4 is not installed!")
7 sys.exit(1)
8
9 import MISMIP
10
11 import numpy as np
12
13
14 def bed_topography(experiment, x):
15 """Computes bed elevation as a function of x.
16 experiment can be '1a', '1b', '2a', '2b', '3a', '3b'.
17 """
18
19 return np.tile(-MISMIP.b(experiment, np.abs(x)), (3, 1))
20
21
22 def surface_mass_balance(x):
23 """Computes the surface mass balance."""
24 return np.tile(np.zeros_like(x) + MISMIP.a(), (3, 1)) * MISMIP.rho_i…
25
26
27 def ice_surface_temp(x):
28 """Computes the ice surface temperature (irrelevant)."""
29 return np.tile(np.zeros_like(x) + 273.15, (3, 1))
30
31
32 def x(mismip_mode, N=None):
33 if mismip_mode in (1, 2):
34 return np.linspace(-MISMIP.L(), MISMIP.L(), 2 * MISMIP.N(mismip_…
35
36 return np.linspace(-MISMIP.L(), MISMIP.L(), N)
37
38
39 def y(x):
40 """Computes y coordinates giving the 1:1 aspect ratio.
41 Takes cross-flow grid periodicity into account."""
42 dx = x[1] - x[0]
43 dy = dx
44 return np.array([-dy, 0, dy])
45
46
47 def thickness(experiment, step, x, calving_front=1750e3, semianalytical_…
48
49 # we expect x to have an odd number of grid points so that one of th…
50 # at 0
51 if x.size % 2 != 1:
52 raise ValueError("x has to have an odd number of points, got %d"…
53
54 x_nonnegative = x[x >= 0]
55 if not semianalytical_profile:
56 thk_nonnegative = np.zeros_like(x_nonnegative) + 10
57 else:
58 thk_nonnegative = MISMIP.thickness(experiment, step, x_nonnegati…
59
60 thk_nonnegative[x_nonnegative > calving_front] = 0
61
62 thk = np.zeros_like(x)
63 thk[x >= 0] = thk_nonnegative
64 thk[x < 0] = thk_nonnegative[:0:-1]
65
66 return np.tile(thk, (3, 1))
67
68
69 def pism_bootstrap_file(filename, experiment, step, mode,
70 calving_front=1750e3, N=None, semianalytical_pro…
71 import PISMNC
72
73 xx = x(mode, N)
74 yy = y(xx)
75
76 bed_elevation = bed_topography(experiment, xx)
77 ice_thickness = thickness(experiment, step, xx, calving_front, semia…
78 ice_surface_mass_balance = surface_mass_balance(xx)
79 ice_surface_temperature = ice_surface_temp(xx)
80
81 ice_extent = np.zeros_like(ice_thickness)
82 ice_extent[ice_thickness > 0] = 1
83 ice_extent[bed_elevation > 0] = 1
84
85 nc = PISMNC.PISMDataset(filename, 'w', format="NETCDF3_CLASSIC")
86
87 nc.create_dimensions(xx, yy)
88
89 nc.define_2d_field('topg',
90 attrs={'units': 'm',
91 'long_name': 'bedrock surface elevation',
92 'standard_name': 'bedrock_altitude'})
93 nc.write('topg', bed_elevation)
94
95 nc.define_2d_field('thk',
96 attrs={'units': 'm',
97 'long_name': 'ice thickness',
98 'standard_name': 'land_ice_thickness'})
99 nc.write('thk', ice_thickness)
100
101 nc.define_2d_field('climatic_mass_balance',
102 attrs={'units': 'kg m-2 / s',
103 'long_name': 'ice-equivalent surface mass …
104 'standard_name': 'land_ice_surface_specifi…
105 nc.write('climatic_mass_balance', ice_surface_mass_balance)
106
107 nc.define_2d_field('ice_surface_temp',
108 attrs={'units': 'Kelvin',
109 'long_name': 'annual average ice surface t…
110 nc.write('ice_surface_temp', ice_surface_temperature)
111
112 nc.define_2d_field('land_ice_area_fraction_retreat',
113 attrs={'units': '1',
114 'long_name': 'mask defining the maximum ic…
115 nc.write('land_ice_area_fraction_retreat', ice_extent)
116
117 nc.close()
118
119
120 if __name__ == "__main__":
121
122 from optparse import OptionParser
123
124 parser = OptionParser()
125
126 parser.usage = "%prog [options]"
127 parser.description = "Creates a MISMIP boostrapping file for use wit…
128 parser.add_option("-o", dest="output_filename",
129 help="output file")
130 parser.add_option("-e", "--experiment", dest="experiment", type="str…
131 help="MISMIP experiment (one of '1a', '1b', '2a', …
132 default="1a")
133 parser.add_option("-s", "--step", dest="step", type="int", default=1,
134 help="MISMIP step")
135 parser.add_option("-u", "--uniform_thickness",
136 action="store_false", dest="semianalytical_profile…
137 help="Use uniform 10 m ice thickness")
138 parser.add_option("-m", "--mode", dest="mode", type="int", default=2,
139 help="MISMIP grid mode")
140 parser.add_option("-N", dest="N", type="int", default=3601,
141 help="Custom grid size; use with --mode=3")
142 parser.add_option("-c", dest="calving_front", type="float", default=…
143 help="Calving front location, in meters (e.g. 1600…
144
145 (opts, args) = parser.parse_args()
146
147 experiments = ('1a', '1b', '2a', '2b', '3a', '3b')
148 if opts.experiment not in experiments:
149 print("Invalid experiment %s. Has to be one of %s." % (
150 opts.experiment, experiments))
151 exit(1)
152
153 if not opts.output_filename:
154 output_filename = "MISMIP_%s_%d_%d.nc" % (opts.experiment,
155 opts.step,
156 opts.mode)
157 else:
158 output_filename = opts.output_filename
159
160 print("Creating MISMIP setup for experiment %s, step %s, grid mode %…
161 opts.experiment, opts.step, opts.mode, output_filename))
162
163 pism_bootstrap_file(output_filename,
164 opts.experiment,
165 opts.step,
166 opts.mode,
167 calving_front=opts.calving_front,
168 N=opts.N,
169 semianalytical_profile=opts.semianalytical_profi…
170
171 print("done.")
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.