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