SICOPOLIS V5-dev  Revision 1420
sico_main_loop_m.F90
Go to the documentation of this file.
1 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 !
3 ! Module : s i c o _ m a i n _ l o o p _ m
4 !
5 !> @file
6 !!
7 !! Main loop of SICOPOLIS.
8 !!
9 !! @section Copyright
10 !!
11 !! Copyright 2009-2019 Ralf Greve
12 !!
13 !! @section License
14 !!
15 !! This file is part of SICOPOLIS.
16 !!
17 !! SICOPOLIS is free software: you can redistribute it and/or modify
18 !! it under the terms of the GNU General Public License as published by
19 !! the Free Software Foundation, either version 3 of the License, or
20 !! (at your option) any later version.
21 !!
22 !! SICOPOLIS is distributed in the hope that it will be useful,
23 !! but WITHOUT ANY WARRANTY; without even the implied warranty of
24 !! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 !! GNU General Public License for more details.
26 !!
27 !! You should have received a copy of the GNU General Public License
28 !! along with SICOPOLIS. If not, see <http://www.gnu.org/licenses/>.
29 !<
30 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
31 
32 !-------------------------------------------------------------------------------
33 !> Main loop of SICOPOLIS.
34 !<------------------------------------------------------------------------------
36 
37  use sico_types_m
39  use sico_vars_m
40  use error_m
41 
42  implicit none
43 
44  public
45 
46 contains
47 
48 !-------------------------------------------------------------------------------
49 !> Main routine of sico_main_loop_m: Main loop of SICOPOLIS.
50 !<------------------------------------------------------------------------------
51 !@ begin openad_extract @
52  subroutine sico_main_loop(delta_ts, glac_index, &
53  mean_accum, &
54  dtime, dtime_temp, dtime_wss, dtime_out, dtime_ser, &
55  time, time_init, time_end, time_output, &
56  dxi, deta, dzeta_c, dzeta_t, dzeta_r, &
57  z_sl, dzsl_dtau, z_mar, &
58  ndat2d, ndat3d, n_output, &
59  runname)
60 !@ end openad_extract @
61 
62  use boundary_m
63 
64 #if (CALCMOD==0 || CALCMOD==1 || CALCMOD==-1)
65  use calc_temp_m
66 #elif (CALCMOD==2 || CALCMOD==3)
68 #endif
69 
70  use calc_enhance_m
72  use calc_vxy_m
73  use calc_vz_m
74  use calc_dxyz_m
75  use calc_gia_m
76  use calc_thk_m
78  use calc_bas_melt_m
80 #if !defined(ALLOW_OPENAD) /* Normal */
81  use output_m
82 #else /* OpenAD */
84 #endif /* Normal vs. OpenAD */
85 
86  implicit none
87 
88 #if !defined(ALLOW_OPENAD) /* Normal */
89  integer(i4b), intent(in) :: n_output
90  real(dp), intent(in) :: mean_accum
91  real(dp), intent(in) :: dtime, dtime_temp, dtime_wss, &
92  dtime_out, dtime_ser
93  real(dp), intent(in) :: time_init, time_end, time_output(100)
94  real(dp), intent(in) :: dxi, deta, dzeta_c, dzeta_t, dzeta_r
95  character(len=100), intent(in) :: runname
96 #else
97  integer(i4b), intent(inout) :: n_output
98  real(dp), intent(inout) :: mean_accum
99  real(dp), intent(inout) :: dtime, dtime_temp, dtime_wss, &
100  dtime_out, dtime_ser
101  real(dp), intent(inout) :: time_init, time_end, time_output(100)
102  real(dp), intent(inout) :: dxi, deta, dzeta_c, dzeta_t, dzeta_r
103  character(len=100), intent(inout) :: runname
104 #endif
105  integer(i4b), intent(inout) :: ndat2d, ndat3d
106  real(dp), intent(inout) :: delta_ts, glac_index
107  real(dp), intent(inout) :: time
108  real(dp), intent(inout) :: z_sl, dzsl_dtau, z_mar
109 
110  integer(i4b) :: i, j, kc, kt, kr, n
111  integer(i4b) :: itercount, itercount_max
112  integer(i4b) :: iter_temp, iter_wss, iter_ser, iter_out, iter_output(100)
113  real(dp) :: dtime_temp_inv
114  logical :: flag_3d_output
115 
116  !-------- Begin of main loop (time integration) --------
117 
118  write(unit=6, fmt='(/a/)') ' -------- sico_main_loop --------'
119 
120  itercount_max = nint((time_end-time_init)/dtime)
121 
122  iter_temp = nint(dtime_temp/dtime)
123 #if (REBOUND==2)
124  iter_wss = nint(dtime_wss/dtime)
125 #endif
126  iter_ser = nint(dtime_ser/dtime)
127 #if (OUTPUT==1 || OUTPUT==3)
128  iter_out = nint(dtime_out/dtime)
129 #endif
130 #if (OUTPUT==2 || OUTPUT==3)
131  do n=1, n_output
132  iter_output(n) = nint((time_output(n)-time_init)/dtime)
133  end do
134 #endif
135 
136 #if !defined(ALLOW_OPENAD) /* Normal */
137  main_loop : do itercount=1, itercount_max
138 
139  write(unit=6, fmt='(2x,i0)') itercount
140 
141  !-------- Update of time --------
142 
143  time = time_init + real(itercount,dp)*dtime
144 
145  !-------- Save old mask --------
146 
147  maske_old = maske
148 
149  !-------- Boundary conditions --------
150 
151  call boundary(time, dtime, dxi, deta, delta_ts, glac_index, &
152  z_sl, dzsl_dtau, z_mar)
153 
154  !-------- Temperature, water content, age, flow enhancement factor --------
155 
156  if ( mod(itercount, iter_temp) == 0 ) then
157 
158  write(unit=6, fmt='(10x,a)') 'Computation of T'
159 
160  ! ------ Temperature, water content, age
161 
162 #if (CALCMOD==1)
163  call calc_temp_poly(dxi, deta, dzeta_c, dzeta_t, dzeta_r, dtime_temp)
164  ! polythermal scheme (POLY)
165 
166 #elif (CALCMOD==0)
167  call calc_temp_cold(dxi, deta, dzeta_c, dzeta_t, dzeta_r, dtime_temp)
168  ! cold-ice scheme (COLD)
169 
170 #elif (CALCMOD==2 || CALCMOD==3)
171  call calc_temp_enth(dxi, deta, dzeta_c, dzeta_t, dzeta_r, dtime_temp)
172  ! enthalpy scheme (ENTC or ENTM)
173 
174 #elif (CALCMOD==-1)
175  call calc_temp_const() ! isothermal scheme (ISOT)
176 
177 #else
178  errormsg = ' >>> sico_main_loop: ' &
179  //'Parameter CALCMOD must be between -1 and 3!'
180  call error(errormsg)
181 #endif
182 
183  ! ------ Time derivative of H_t (further time derivatives are
184  ! computed in subroutine calc_thk_xxx)
185 
186  dtime_temp_inv = 1.0_dp/dtime_temp
187 
188  dh_t_dtau = (h_t_neu - h_t)*dtime_temp_inv
189 
190  ! ------ New values --> old values
191 
192  n_cts = n_cts_neu
194  zm = zm_neu
195  h_c = h_c_neu
196  h_t = h_t_neu
198  age_c = age_c_neu
200  age_t = age_t_neu
202 
203 #if (CALCMOD==2 || CALCMOD==3)
207 #endif
208 
209  ! ------ Flow enhancement factor
210 
211 #if (ENHMOD==1)
212  call calc_enhance_1()
213 #elif (ENHMOD==2)
214  call calc_enhance_2()
215 #elif (ENHMOD==3)
216  call calc_enhance_3(time)
217 #elif (ENHMOD==4)
218  call calc_enhance_4()
219 #elif (ENHMOD==5)
220  call calc_enhance_5()
221 #else
222  errormsg = ' >>> sico_main_loop: ' &
223  //'Parameter ENHMOD must be between 1 and 5!'
224  call error(errormsg)
225 #endif
226 
227  end if
228  ! End of computation of temperature, water content, age and
229  ! enhancement factor
230 
231  !-------- Velocity --------
232 
233  call flag_update_gf_gl_cf()
234 
235 #if (DYNAMICS==1 || DYNAMICS==2)
236 
237  call calc_vxy_b_sia(time, z_sl)
238  call calc_vxy_sia(dzeta_c, dzeta_t)
239 
240 #if (MARGIN==3 || DYNAMICS==2)
241  call calc_vxy_ssa(z_sl, dxi, deta, dzeta_c, dzeta_t)
242 #endif
243 
244  call calc_vz_grounded(dxi, deta, dzeta_c, dzeta_t)
245 
246 #if (MARGIN==3)
247  call calc_vz_floating(z_sl, dxi, deta, dzeta_c)
248 #endif
249 
250 #elif (DYNAMICS==0)
251 
252  call calc_vxy_static()
253  call calc_vz_static()
254 
255 #else
256  errormsg = ' >>> sico_main_loop: ' &
257  //'Parameter DYNAMICS must be either 0, 1 or 2!'
258  call error(errormsg)
259 #endif
260 
261  call calc_dxyz(dxi, deta, dzeta_c, dzeta_t)
262 
263  !-------- Glacial isostatic adjustment and ice topography --------
264 
265  call calc_gia(time, z_sl, dtime, dxi, deta, itercount, iter_wss)
266 
267  call calc_thk_init()
268 
269 #if ((MARGIN==3 || DYNAMICS==2) && (CALCTHK==1 || CALCTHK==2 || CALCTHK==3))
270  errormsg = ' >>> sico_main_loop:' &
271  // end_of_line &
272  //' Non-SIA dynamics combined with' &
273  // end_of_line &
274  //' SIA ice thickness solver!'
275  call error(errormsg)
276 #endif
277 
278 #if (CALCTHK==1)
279  call calc_thk_sia_expl(time, dtime, dxi, deta, z_mar)
280 #elif (CALCTHK==2 || CALCTHK==3)
281  call calc_thk_sia_impl(time, dtime, dxi, deta, z_mar, mean_accum)
282 #elif (CALCTHK==4)
283  call calc_thk_expl(time, dtime, dxi, deta, z_mar)
284 #elif (CALCTHK==5 || CALCTHK==6)
285  call calc_thk_impl(time, dtime, dxi, deta, z_mar, mean_accum)
286 #else
287  errormsg = ' >>> sico_main_loop: ' &
288  //'Parameter CALCTHK must be between 1 and 6!'
289  call error(errormsg)
290 #endif
291 
292 #if (MARGIN==3) /* coupled SIA/SSA or SIA/SStA/SSA dynamics */
293  call calc_thk_mask_update(time, dtime, dxi, deta, z_sl, z_mar, 3_i1b)
294 #elif (DYNAMICS==2) /* hybrid SIA/SStA dynamics */
295  call calc_thk_mask_update(time, dtime, dxi, deta, z_sl, z_mar, 2_i1b)
296 #else /* SIA-only dynamics */
297 #if (CALCTHK==1 || CALCTHK==2 || CALCTHK==3)
298  call calc_thk_mask_update(time, dtime, dxi, deta, z_sl, z_mar, 1_i1b)
299 #elif (CALCTHK==4 || CALCTHK==5 || CALCTHK==6)
300  call calc_thk_mask_update(time, dtime, dxi, deta, z_sl, z_mar, 2_i1b)
301 #endif
302 #endif
303 
304  call flag_update_gf_gl_cf()
305 
306  ! ------ New values --> old values
307 
308  zs = zs_neu
309  zm = zm_neu
310  zb = zb_neu
311  zl = zl_neu
312  h_c= h_c_neu
313  h_t= h_t_neu
314 
315  !-------- Melting temperature --------
316 
317  call calc_temp_melt()
318 
319  !-------- Basal temperature --------
320 
321  call calc_temp_bas()
322 
323  !-------- Basal melting rate --------
324 
325  call calc_qbm(time, z_sl, dzeta_c, dzeta_r)
326 
327  !-------- Effective thickness of subglacial water --------
328 
329  call calc_thk_water_bas(z_sl)
330 
331  !-------- Data output --------
332 
333 #if (OUTPUT==1)
334 
335  if ( mod(itercount, iter_out) == 0 ) then
336 
337 #if (ERGDAT==0)
338  flag_3d_output = .false.
339 #elif (ERGDAT==1)
340  flag_3d_output = .true.
341 #endif
342 
343  call output1(runname, time, delta_ts, glac_index, z_sl, &
344  flag_3d_output, ndat2d, ndat3d)
345 
346  end if
347 
348 #elif (OUTPUT==2)
349 
350  do n=1, n_output
351 
352  if (itercount == iter_output(n)) then
353 
354 #if (ERGDAT==0)
355  flag_3d_output = .false.
356 #elif (ERGDAT==1)
357  flag_3d_output = .true.
358 #endif
359 
360  call output1(runname, time, delta_ts, glac_index, z_sl, &
361  flag_3d_output, ndat2d, ndat3d)
362 
363  end if
364 
365  end do
366 
367 #elif (OUTPUT==3)
368 
369  if ( mod(itercount, iter_out) == 0 ) then
370 
371  flag_3d_output = .false.
372 
373  call output1(runname, time, delta_ts, glac_index, z_sl, &
374  flag_3d_output, ndat2d, ndat3d)
375 
376  end if
377 
378  do n=1, n_output
379 
380  if (itercount == iter_output(n)) then
381 
382  flag_3d_output = .true.
383 
384  call output1(runname, time, delta_ts, glac_index, z_sl, &
385  flag_3d_output, ndat2d, ndat3d)
386 
387  end if
388 
389  end do
390 
391 #endif
392 
393  if ( mod(itercount, iter_ser) == 0 ) then
394  call output2(time, dxi, deta, delta_ts, glac_index, z_sl)
395  call output4(time, dxi, deta, delta_ts, glac_index, z_sl)
396 #if (defined(ASF) && WRITE_SER_FILE_STAKES>0)
397  call output5(time, dxi, deta, delta_ts, glac_index, z_sl)
398 #endif
399  end if
400 
401  end do main_loop ! End of main loop (time integration)
402 
403 #else /* OpenAD */
404 
405  call sico_main_loop_wrapper(delta_ts, glac_index, &
406  mean_accum, &
407  dtime, dtime_temp, dtime_wss, dtime_out, dtime_ser, &
408  time, time_init, time_end, time_output, &
409  dxi, deta, dzeta_c, dzeta_t, dzeta_r, &
410  z_sl, dzsl_dtau, z_mar, &
411  ndat2d, ndat3d, n_output, &
412  runname,&
413  itercount_max,iter_temp,iter_wss,iter_ser,&
414  iter_out,iter_output)
415 
416 #endif /* Normal vs. OpenAD */
417 
418  end subroutine sico_main_loop
419 !-------------------------------------------------------------------------------
420 
421 end module sico_main_loop_m
422 !
real(dp), dimension(0:kcmax, 0:jmax, 0:imax) temp_c
temp_c(kc,j,i): Temperature in the upper (kc) ice domain
subroutine, public calc_thk_water_bas(z_sl)
Main subroutine of calc_thk_water_bas_m: Computation of the thickness of the water column under the i...
Computation of the ice thickness.
Definition: calc_thk_m.F90:35
integer(i1b), dimension(0:jmax, 0:imax) n_cts
n_cts(j,i): Mask for thermal conditions. -1: cold ice base, 0: temperate ice base with cold ice above...
real(dp), dimension(0:krmax, 0:jmax, 0:imax) temp_r_neu
(.)_neu: New value of quantity (.) computed during an integration step
subroutine, public calc_thk_init()
Initialisations for the ice thickness computation.
Definition: calc_thk_m.F90:62
Update of the flags for the land-terminating grounded front, marine-terminating grounded front...
real(dp), dimension(0:kcmax, 0:jmax, 0:imax) age_c
age_c(kc,j,i): Age in the upper (kc) ice domain
subroutine, public calc_qbm(time, z_sl, dzeta_c, dzeta_r)
Computation of the basal melting rate Q_bm. Summation of Q_bm and Q_tld (water drainage rate from the...
real(dp), dimension(0:kcmax, 0:jmax, 0:imax) enth_c_neu
(.)_neu: New value of quantity (.) computed during an integration step
subroutine, public flag_update_gf_gl_cf()
Main subroutine of flag_update_gf_gl_cf_m: Update of the flags for the land-terminating grounded fron...
real(dp), dimension(0:ktmax, 0:jmax, 0:imax) age_t
age_t(kt,j,i): Age in the lower (kt) ice domain
real(dp), dimension(0:krmax, 0:jmax, 0:imax) temp_r
temp_r(kr,j,i): Temperature in the bedrock
real(dp), dimension(0:ktmax, 0:jmax, 0:imax) age_t_neu
(.)_neu: New value of quantity (.) computed during an integration step
subroutine, public calc_enhance_2()
Computation of the flow enhancement factor. Case ENHMOD==2: two different values depending on age for...
subroutine, public calc_vz_floating(z_sl, dxi, deta, dzeta_c)
Computation of the vertical velocity vz for floating ice.
Definition: calc_vz_m.F90:259
subroutine error(error_message)
Main routine of error_m: Writing of error messages and stopping execution.
Definition: error_m.F90:47
subroutine, public output1(runname, time, delta_ts, glac_index, z_sl, flag_3d_output, ndat2d, ndat3d)
Writing of time-slice files in native binary or NetCDF format.
Definition: output_m.F90:60
real(dp), dimension(0:ktmax, 0:jmax, 0:imax) enth_t
enth_t(kt,j,i): Enthalpy in the lower (kt) ice domain
real(dp), dimension(0:jmax, 0:imax) dh_t_dtau
dH_t_dtau(j,i): Derivative of H_t by tau (time)
Computation of the thickness of the water column under the ice base.
Main loop of SICOPOLIS.
integer(i1b), dimension(0:jmax, 0:imax) maske_old
maske_old(j,i): Old value of maske (at the previous time step)
subroutine, public calc_temp_cold(dxi, deta, dzeta_c, dzeta_t, dzeta_r, dtime_temp)
Computation of temperature and age in cold-ice mode.
subroutine, public calc_thk_sia_expl(time, dtime, dxi, deta, z_mar)
Explicit solver for the diffusive SIA ice surface equation.
Definition: calc_thk_m.F90:156
Computation of all components of the strain-rate tensor, the full effective strain rate and the shear...
Definition: calc_dxyz_m.F90:37
real(dp), dimension(0:jmax, 0:imax) h_t_neu
(.)_neu: New value of quantity (.) computed during an integration step
subroutine, public calc_temp_const()
Isothermal mode: Setting of the temperature and age to constant values.
subroutine, public calc_enhance_5()
Computation of the flow enhancement factor. Case ENHMOD==5: minimal anisotropic enhancement factor fo...
subroutine, public calc_thk_sia_impl(time, dtime, dxi, deta, z_mar, mean_accum)
Over-implicit solver for the diffusive SIA ice surface equation.
Definition: calc_thk_m.F90:234
real(dp), dimension(0:jmax, 0:imax) zl
zl(j,i): Coordinate z of the lithosphere surface
subroutine, public calc_thk_expl(time, dtime, dxi, deta, z_mar)
Explicit solver for the general ice thickness equation.
Definition: calc_thk_m.F90:592
subroutine, public calc_vxy_static()
Computation of the horizontal velocity vx, vy, the horizontal volume flux qx, qy etc. for static ice.
subroutine, public output4(time, dxi, deta, delta_ts, glac_index, z_sl)
Writing of time-series data of the deep ice cores on file in ASCII format (and optionally in NetCDF f...
Definition: output_m.F90:5384
real(dp), dimension(0:jmax, 0:imax) zl_neu
(.)_neu: New value of quantity (.) computed during an integration step
Declarations of global variables for SICOPOLIS (for the ANT domain).
Definition: sico_vars_m.F90:35
Computation of the flow enhancement factor.
Computation of the horizontal velocity vx, vy.
Definition: calc_vxy_m.F90:36
subroutine, public calc_temp_melt()
Computation of the melting temperatures.
real(dp), dimension(0:kcmax, 0:jmax, 0:imax) enth_c
enth_c(kc,j,i): Enthalpy in the upper (kc) ice domain
real(dp), dimension(0:kcmax, 0:jmax, 0:imax) age_c_neu
(.)_neu: New value of quantity (.) computed during an integration step
subroutine, public calc_vz_grounded(dxi, deta, dzeta_c, dzeta_t)
Computation of the vertical velocity vz for grounded ice.
Definition: calc_vz_m.F90:52
subroutine, public calc_thk_mask_update(time, dtime, dxi, deta, z_sl, z_mar, n_calc_thk_mask_update_aux)
Update of the ice-land-ocean mask etc.
Declarations of kind types for SICOPOLIS.
real(dp), dimension(0:jmax, 0:imax) zs
zs(j,i): Coordinate z of the surface topography
integer(i4b), dimension(0:jmax, 0:imax) kc_cts
kc_cts(j,i): Position kc of the CTS (for COLD, ENTC, ENTM)
real(dp), dimension(0:kcmax, 0:jmax, 0:imax) temp_c_neu
(.)_neu: New value of quantity (.) computed during an integration step
real(dp), dimension(0:jmax, 0:imax) h_c
H_c(j,i): Thickness of ice in the upper (kc) domain (thickness of the cold-ice layer for POLY...
Computation of temperature, water content and age.
Definition: calc_temp_m.F90:35
subroutine, public calc_temp_bas()
Computation of the basal temperatures.
Computation of the melting and basal temperatures.
subroutine sico_main_loop_wrapper(delta_ts, glac_index, mean_accum, dtime, dtime_temp, dtime_wss, dtime_out, dtime_ser, time, time_init, time_end, time_output, dxi, deta, dzeta_c, dzeta_t, dzeta_r, z_sl, dzsl_dtau, z_mar, ndat2d, ndat3d, n_output, runname, itercount_max, iter_temp, iter_wss, iter_ser, iter_out, iter_output)
Calls sico_main_loop_iter_m. Necessarily decoupled from time loop due to use of revolve.
integer(i1b), dimension(0:jmax, 0:imax) n_cts_neu
(.)_neu: New value of quantity (.) computed during an integration step
subroutine, public calc_vxy_ssa(z_sl, dxi, deta, dzeta_c, dzeta_t)
Computation of the horizontal velocity vx, vy, the horizontal volume flux qx, qy and the flux across ...
subroutine sico_main_loop(delta_ts, glac_index, mean_accum, dtime, dtime_temp, dtime_wss, dtime_out, dtime_ser, time, time_init, time_end, time_output, dxi, deta, dzeta_c, dzeta_t, dzeta_r, z_sl, dzsl_dtau, z_mar, ndat2d, ndat3d, n_output, runname)
Main routine of sico_main_loop_m: Main loop of SICOPOLIS.
Computation of the vertical velocity vz.
Definition: calc_vz_m.F90:35
real(dp), dimension(0:ktmax, 0:jmax, 0:imax) omega_t_neu
(.)_neu: New value of quantity (.) computed during an integration step
subroutine, public calc_gia(time, z_sl, dtime, dxi, deta, itercount, iter_wss)
Main subroutine of calc_gia_m: Computation of the glacial isostatic adjustment of the lithosphere sur...
Definition: calc_gia_m.F90:55
Writing of error messages and stopping execution.
Definition: error_m.F90:35
real(dp), dimension(0:kcmax, 0:jmax, 0:imax) omega_c
omega_c(kc,j,i): Water content in the upper (kc) ice domain
real(dp), dimension(0:ktmax, 0:jmax, 0:imax) enth_t_neu
(.)_neu: New value of quantity (.) computed during an integration step
real(dp), dimension(0:jmax, 0:imax) zs_neu
(.)_neu: New value of quantity (.) computed during an integration step
subroutine, public calc_vz_static()
Computation of the vertical velocity vz for static ice.
Definition: calc_vz_m.F90:374
character, parameter end_of_line
end_of_line: End-of-line string
integer(i4b), dimension(0:jmax, 0:imax) kc_cts_neu
(.)_neu: New value of quantity (.) computed during an integration step
real(dp), dimension(0:jmax, 0:imax) h_c_neu
(.)_neu: New value of quantity (.) computed during an integration step
subroutine, public calc_enhance_1()
Computation of the flow enhancement factor. Case ENHMOD==1: constant for grounded ice...
real(dp), dimension(0:jmax, 0:imax) zm
zm(j,i): Coordinate z of the bottom of the upper (kc) ice domain = top of the lower (kt) ice domain (...
integer(i1b), dimension(0:jmax, 0:imax) maske
maske(j,i): Ice-land-ocean mask. 0: grounded ice, 1: ice-free land, 2: ocean, 3: floating ice ...
Computation of temperature, water content and age with the enthalpy method.
subroutine, public calc_vxy_sia(dzeta_c, dzeta_t)
Computation of the shear stresses txz, tyz, the effective shear stress sigma, the depth-averaged flui...
Definition: calc_vxy_m.F90:573
subroutine boundary(time, dtime, dxi, deta, delta_ts, glac_index, z_sl, dzsl_dtau, z_mar)
Main routine of boundary_m: Computation of the surface temperature (must be less than 0 deg C!) and o...
Definition: boundary_m.F90:61
subroutine, public output2(time, dxi, deta, delta_ts, glac_index, z_sl)
Writing of time-series data on file in ASCII format (and optionally in NetCDF format).
Definition: output_m.F90:4039
subroutine, public calc_temp_enth(dxi, deta, dzeta_c, dzeta_t, dzeta_r, dtime_temp)
Main subroutine of calc_temp_enth_m: Computation of temperature, water content and age with the entha...
subroutine, public calc_enhance_3(time)
Computation of the flow enhancement factor. Case ENHMOD==3: two different values depending on time of...
real(dp), dimension(0:ktmax, 0:jmax, 0:imax) omega_t
omega_t(kt,j,i): Water content in the lower (kt) ice domain
subroutine, public calc_dxyz(dxi, deta, dzeta_c, dzeta_t)
Main subroutine of calc_dxyz_m: Computation of all components of the strain-rate tensor, the full effective strain rate and the shear fraction.
Definition: calc_dxyz_m.F90:57
subroutine, public calc_enhance_4()
Computation of the flow enhancement factor. Case ENHMOD==4: minimal anisotropic enhancement factor fo...
Computation of the basal melting rate.
real(dp), dimension(0:jmax, 0:imax) zb_neu
(.)_neu: New value of quantity (.) computed during an integration step
Computation of the surface temperature (must be less than 0 deg C!) and of the accumulation-ablation ...
Definition: boundary_m.F90:37
real(dp), dimension(0:jmax, 0:imax) zm_neu
(.)_neu: New value of quantity (.) computed during an integration step
subroutine, public calc_thk_impl(time, dtime, dxi, deta, z_mar, mean_accum)
Over-implicit solver for the general ice thickness equation.
Definition: calc_thk_m.F90:734
character(len=256) errormsg
errormsg: Error-message string
integer, parameter dp
Double-precision reals.
real(dp), dimension(0:jmax, 0:imax) zb
zb(j,i): Coordinate z of the ice base
real(dp), dimension(0:kcmax, 0:jmax, 0:imax) omega_c_neu
(.)_neu: New value of quantity (.) computed during an integration step
subroutine, public calc_temp_poly(dxi, deta, dzeta_c, dzeta_t, dzeta_r, dtime_temp)
Computation of temperature, water content and age in polythermal mode.
Definition: calc_temp_m.F90:57
Writing of output data on files.
Definition: output_m.F90:36
Computation of the glacial isostatic adjustment of the lithosphere surface.
Definition: calc_gia_m.F90:36
real(dp), dimension(0:jmax, 0:imax) h_t
H_t(j,i): Thickness of ice in the lower (kt) domain (thickness of the temperate layer for POLY...
subroutine, public calc_vxy_b_sia(time, z_sl)
Computation of the basal horizontal velocity vx_b, vy_b in the shallow ice approximation.
Definition: calc_vxy_m.F90:55
Declarations of global variables for SICOPOLIS.