SICOPOLIS V5-dev  Revision 1288
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-2018 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  ii, jj, nn, &
59  ndat2d, ndat3d, n_output, &
60  runname)
61 !@ end openad_extract @
62 
63  use boundary_m
64 
65 #if (CALCMOD==0 || CALCMOD==1 || CALCMOD==-1)
66  use calc_temp_m
67 #elif (CALCMOD==2 || CALCMOD==3)
69 #endif
70 
71  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_GRDCHK) && !defined(ALLOW_OPENAD)) /* Normal */
89  integer(i4b), intent(in) :: ii((imax+1)*(jmax+1)), &
90  jj((imax+1)*(jmax+1)), &
91  nn(0:jmax,0:imax)
92 #else /* OpenAD */
93  integer(i4b), intent(inout) :: ii((imax+1)*(jmax+1)), &
94  jj((imax+1)*(jmax+1)), &
95  nn(0:jmax,0:imax)
96 #endif /* Normal vs. OpenAD */
97 
98 #if (!defined(ALLOW_GRDCHK) && !defined(ALLOW_OPENAD)) /* Normal */
99  integer(i4b), intent(in) :: n_output
100  real(dp), intent(in) :: mean_accum
101  real(dp), intent(in) :: dtime, dtime_temp, dtime_wss, &
102  dtime_out, dtime_ser
103  real(dp), intent(in) :: time_init, time_end, time_output(100)
104  real(dp), intent(in) :: dxi, deta, dzeta_c, dzeta_t, dzeta_r
105  character(len=100), intent(in) :: runname
106 #else
107  integer(i4b), intent(inout) :: n_output
108  real(dp), intent(inout) :: mean_accum
109  real(dp), intent(inout) :: dtime, dtime_temp, dtime_wss, &
110  dtime_out, dtime_ser
111  real(dp), intent(inout) :: time_init, time_end, time_output(100)
112  real(dp), intent(inout) :: dxi, deta, dzeta_c, dzeta_t, dzeta_r
113  character(len=100), intent(inout) :: runname
114 #endif
115  integer(i4b), intent(inout) :: ndat2d, ndat3d
116  real(dp), intent(inout) :: delta_ts, glac_index
117  real(dp), intent(inout) :: time
118  real(dp), intent(inout) :: z_sl, dzsl_dtau, z_mar
119 
120  integer(i4b) :: i, j, kc, kt, kr, n
121  integer(i4b) :: itercount, itercount_max
122  integer(i4b) :: iter_temp, iter_wss, iter_ser, iter_out, iter_output(100)
123  real(dp) :: dtime_temp_inv
124  logical :: flag_3d_output
125 
126  !-------- Begin of main loop --------
127 
128  write(unit=6, fmt='(/a/)') ' -------- sico_main_loop --------'
129 
130  itercount_max = nint((time_end-time_init)/dtime)
131 
132  iter_temp = nint(dtime_temp/dtime)
133 #if (REBOUND==2)
134  iter_wss = nint(dtime_wss/dtime)
135 #endif
136  iter_ser = nint(dtime_ser/dtime)
137 #if (OUTPUT==1 || OUTPUT==3)
138  iter_out = nint(dtime_out/dtime)
139 #endif
140 #if (OUTPUT==2 || OUTPUT==3)
141  do n=1, n_output
142  iter_output(n) = nint((time_output(n)-time_init)/dtime)
143  end do
144 #endif
145 
146 #if (!defined(ALLOW_OPENAD)) /* Normal */
147  main_loop : do itercount=1, itercount_max
148 
149  write(unit=6, fmt='(2x,i0)') itercount
150 
151  !-------- Update of time --------
152 
153  time = time_init + real(itercount,dp)*dtime
154 
155  !-------- Save old mask --------
156 
157  maske_old = maske
158 
159  !-------- Boundary conditions --------
160 
161  call boundary(time, dtime, dxi, deta, delta_ts, glac_index, &
162  z_sl, dzsl_dtau, z_mar)
163 
164  !-------- Temperature, water content, age, flow enhancement factor --------
165 
166  if ( mod(itercount, iter_temp) == 0 ) then
167 
168  write(unit=6, fmt='(10x,a)') 'Computation of T'
169 
170  ! ------ Temperature, water content, age
171 
172 #if (CALCMOD==1)
173  call calc_temp_poly(dxi, deta, dzeta_c, dzeta_t, dzeta_r, dtime_temp)
174  ! polythermal scheme (POLY)
175 
176 #elif (CALCMOD==0)
177  call calc_temp_cold(dxi, deta, dzeta_c, dzeta_t, dzeta_r, dtime_temp)
178  ! cold-ice scheme (COLD)
179 
180 #elif (CALCMOD==2 || CALCMOD==3)
181  call calc_temp_enth(dxi, deta, dzeta_c, dzeta_t, dzeta_r, dtime_temp)
182  ! enthalpy scheme (ENTC or ENTM)
183 
184 #elif (CALCMOD==-1)
185  call calc_temp_const() ! isothermal scheme (ISOT)
186 
187 #else
188  errormsg = ' >>> sico_main_loop: ' &
189  //'Parameter CALCMOD must be between -1 and 3!'
190  call error(errormsg)
191 #endif
192 
193  ! ------ Time derivative of H_t (further time derivatives are
194  ! computed in subroutine calc_thk_xxx)
195 
196  dtime_temp_inv = 1.0_dp/dtime_temp
197 
198  dh_t_dtau = (h_t_neu - h_t)*dtime_temp_inv
199 
200  ! ------ New values --> old values
201 
202  n_cts = n_cts_neu
204  zm = zm_neu
205  h_c = h_c_neu
206  h_t = h_t_neu
208  age_c = age_c_neu
210  age_t = age_t_neu
212 
213 #if (CALCMOD==2 || CALCMOD==3)
217 #endif
218 
219  ! ------ Flow enhancement factor
220 
221 #if (ENHMOD==1)
222  call calc_enhance_1()
223 #elif (ENHMOD==2)
224  call calc_enhance_2()
225 #elif (ENHMOD==3)
226  call calc_enhance_3(time)
227 #elif (ENHMOD==4)
228  call calc_enhance_4()
229 #elif (ENHMOD==5)
230  call calc_enhance_5()
231 #else
232  errormsg = ' >>> sico_main_loop: ' &
233  //'Parameter ENHMOD must be between 1 and 5!'
234  call error(errormsg)
235 #endif
236 
237  end if
238  ! End of computation of temperature, water content, age and
239  ! enhancement factor
240 
241  !-------- Velocity --------
242 
243 #if (DYNAMICS==1 || DYNAMICS==2)
244 
245  call calc_vxy_b_sia(time, z_sl)
246  call calc_vxy_sia(dzeta_c, dzeta_t)
247 
248 #if (MARGIN==3 || DYNAMICS==2)
249  call calc_vxy_ssa(z_sl, dxi, deta, dzeta_c, dzeta_t, ii, jj, nn)
250 #endif
251 
252  call calc_vz_grounded(dxi, deta, dzeta_c, dzeta_t)
253 
254 #if (MARGIN==3)
255  call calc_vz_floating(z_sl, dxi, deta, dzeta_c)
256 #endif
257 
258 #elif (DYNAMICS==0)
259 
260  call calc_vxy_static()
261  call calc_vz_static()
262 
263 #else
264  errormsg = ' >>> sico_main_loop: ' &
265  //'Parameter DYNAMICS must be either 0, 1 or 2!'
266  call error(errormsg)
267 #endif
268 
269  call calc_dxyz(dxi, deta, dzeta_c, dzeta_t)
270 
271  !-------- Glacial isostatic adjustment and ice topography --------
272 
273  call calc_gia(time, z_sl, dtime, dxi, deta, itercount, iter_wss)
274 
275  call calc_thk_init()
276 
277 #if ((MARGIN==3 || DYNAMICS==2) && (CALCTHK==1 || CALCTHK==2 || CALCTHK==3))
278  errormsg = ' >>> sico_main_loop:' &
279  // end_of_line &
280  //' Non-SIA dynamics combined with' &
281  // end_of_line &
282  //' SIA ice thickness solver!'
283  call error(errormsg)
284 #endif
285 
286 #if (CALCTHK==1)
287  call calc_thk_sia_expl(time, dtime, dxi, deta, z_mar)
288 #elif (CALCTHK==2 || CALCTHK==3)
289  call calc_thk_sia_impl(time, dtime, dxi, deta, z_mar, mean_accum, ii, jj, nn)
290 #elif (CALCTHK==4)
291  call calc_thk_expl(time, dtime, dxi, deta, z_mar)
292 #elif (CALCTHK==5 || CALCTHK==6)
293  call calc_thk_impl(time, dtime, dxi, deta, z_mar, mean_accum, ii, jj, nn)
294 #else
295  errormsg = ' >>> sico_main_loop: ' &
296  //'Parameter CALCTHK must be between 1 and 6!'
297  call error(errormsg)
298 #endif
299 
300 #if (MARGIN==3) /* coupled SIA/SSA or SIA/SStA/SSA dynamics */
301  call calc_thk_mask_update(time, dtime, dxi, deta, z_sl, z_mar, 3_i2b)
302 #elif (DYNAMICS==2) /* hybrid SIA/SStA dynamics */
303  call calc_thk_mask_update(time, dtime, dxi, deta, z_sl, z_mar, 2_i2b)
304 #else /* SIA-only dynamics */
305 #if (CALCTHK==1 || CALCTHK==2 || CALCTHK==3)
306  call calc_thk_mask_update(time, dtime, dxi, deta, z_sl, z_mar, 1_i2b)
307 #elif (CALCTHK==4 || CALCTHK==5 || CALCTHK==6)
308  call calc_thk_mask_update(time, dtime, dxi, deta, z_sl, z_mar, 2_i2b)
309 #endif
310 #endif
311 
312  ! ------ New values --> old values
313 
314  zs = zs_neu
315  zm = zm_neu
316  zb = zb_neu
317  zl = zl_neu
318  h_c= h_c_neu
319  h_t= h_t_neu
320 
321  !-------- Melting temperature --------
322 
323  call calc_temp_melt()
324 
325  !-------- Basal temperature --------
326 
327  call calc_temp_bas()
328 
329  !-------- Basal melting rate --------
330 
331  call calc_qbm(time, z_sl, dzeta_c, dzeta_r)
332 
333  !-------- Effective thickness of subglacial water --------
334 
335  call calc_thk_water_bas(z_sl)
336 
337  !-------- Data output --------
338 
339 #if (OUTPUT==1)
340 
341  if ( mod(itercount, iter_out) == 0 ) then
342 
343 #if (ERGDAT==0)
344  flag_3d_output = .false.
345 #elif (ERGDAT==1)
346  flag_3d_output = .true.
347 #endif
348 
349  call output1(runname, time, delta_ts, glac_index, z_sl, &
350  flag_3d_output, ndat2d, ndat3d)
351 
352  end if
353 
354 #elif (OUTPUT==2)
355 
356  do n=1, n_output
357 
358  if (itercount == iter_output(n)) then
359 
360 #if (ERGDAT==0)
361  flag_3d_output = .false.
362 #elif (ERGDAT==1)
363  flag_3d_output = .true.
364 #endif
365 
366  call output1(runname, time, delta_ts, glac_index, z_sl, &
367  flag_3d_output, ndat2d, ndat3d)
368 
369  end if
370 
371  end do
372 
373 #elif (OUTPUT==3)
374 
375  if ( mod(itercount, iter_out) == 0 ) then
376 
377  flag_3d_output = .false.
378 
379  call output1(runname, time, delta_ts, glac_index, z_sl, &
380  flag_3d_output, ndat2d, ndat3d)
381 
382  end if
383 
384  do n=1, n_output
385 
386  if (itercount == iter_output(n)) then
387 
388  flag_3d_output = .true.
389 
390  call output1(runname, time, delta_ts, glac_index, z_sl, &
391  flag_3d_output, ndat2d, ndat3d)
392 
393  end if
394 
395  end do
396 
397 #endif
398 
399  if ( mod(itercount, iter_ser) == 0 ) then
400  call output2(time, dxi, deta, delta_ts, glac_index, z_sl)
401  call output4(time, dxi, deta, delta_ts, glac_index, z_sl)
402 #if (defined(ASF) && WRITE_SER_FILE_STAKES>0)
403  call output5(time, dxi, deta, delta_ts, glac_index, z_sl)
404 #endif
405 
406  end if
407  end do main_loop ! End of main loop
408 
409 #else /* OpenAD */
410 
411  call sico_main_loop_wrapper(delta_ts, glac_index, &
412  mean_accum, &
413  dtime, dtime_temp, dtime_wss, dtime_out, dtime_ser, &
414  time, time_init, time_end, time_output, &
415  dxi, deta, dzeta_c, dzeta_t, dzeta_r, &
416  z_sl, dzsl_dtau, z_mar, &
417  ii, jj, nn, &
418  ndat2d, ndat3d, n_output, &
419  runname,&
420  itercount_max,iter_temp,iter_wss,iter_ser,&
421  iter_out,iter_output)
422 
423 #endif /* Normal vs. OpenAD */
424 
425  end subroutine sico_main_loop
426 !-------------------------------------------------------------------------------
427 
428 end module sico_main_loop_m
429 !
subroutine, public calc_thk_sia_impl(time, dtime, dxi, deta, z_mar, mean_accum, ii, jj, nn)
Over-implicit solver for the diffusive SIA ice surface equation.
Definition: calc_thk_m.F90:251
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
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
real(dp), dimension(0:kcmax, 0:jmax, 0:imax) age_c
age_c(kc,j,i): Age in the upper (kc) ice domain
integer(i2b), 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...
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
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.
integer(i2b), 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 ...
Main loop of SICOPOLIS.
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:173
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 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, ii, jj, nn, ndat2d, ndat3d, n_output, runname)
Main routine of sico_main_loop_m: Main loop of SICOPOLIS.
subroutine, public calc_enhance_5()
Computation of the flow enhancement factor. Case ENHMOD==5: minimal anisotropic enhancement factor fo...
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:611
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:4852
integer(i2b), dimension(0:jmax, 0:imax) kc_cts
kc_cts(j,i): Position kc of the CTS (for COLD, ENTC, ENTM)
subroutine, public calc_vxy_ssa(z_sl, dxi, deta, dzeta_c, dzeta_t, ii, jj, nn)
Computation of the horizontal velocity vx, vy, the horizontal volume flux qx, qy and the flux across ...
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.
subroutine, public calc_thk_impl(time, dtime, dxi, deta, z_mar, mean_accum, ii, jj, nn)
Over-implicit solver for the general ice thickness equation.
Definition: calc_thk_m.F90:753
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(i2b), dimension(0:jmax, 0:imax) kc_cts_neu
(.)_neu: New value of quantity (.) computed during an integration step
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.
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
integer(i2b), dimension(0:jmax, 0:imax) maske_old
maske_old(j,i): Old value of maske (at the previous time step)
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
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 (...
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:548
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:57
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:3507
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.
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, ii, jj, nn, ndat2d, ndat3d, n_output, runname, itercount_max, iter_temp, iter_wss, iter_ser, iter_out, iter_output)
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
character(len=256) errormsg
errormsg: Error-message string
integer(i2b), dimension(0:jmax, 0:imax) n_cts_neu
(.)_neu: New value of quantity (.) computed during an integration step
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.