SICOPOLIS V5-dev  Revision 1368
boundary_m.F90
Go to the documentation of this file.
1 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 !
3 ! Module : b o u n d a r y _ m
4 !
5 !> @file
6 !!
7 !! Computation of the surface temperature (must be less than 0 deg C!)
8 !! and of the accumulation-ablation function.
9 !!
10 !! @section Copyright
11 !!
12 !! Copyright 2009-2018 Ralf Greve
13 !!
14 !! @section License
15 !!
16 !! This file is part of SICOPOLIS.
17 !!
18 !! SICOPOLIS is free software: you can redistribute it and/or modify
19 !! it under the terms of the GNU General Public License as published by
20 !! the Free Software Foundation, either version 3 of the License, or
21 !! (at your option) any later version.
22 !!
23 !! SICOPOLIS is distributed in the hope that it will be useful,
24 !! but WITHOUT ANY WARRANTY; without even the implied warranty of
25 !! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 !! GNU General Public License for more details.
27 !!
28 !! You should have received a copy of the GNU General Public License
29 !! along with SICOPOLIS. If not, see <http://www.gnu.org/licenses/>.
30 !<
31 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
32 
33 !-------------------------------------------------------------------------------
34 !> Computation of the surface temperature (must be less than 0 deg C!)
35 !! and of the accumulation-ablation function.
36 !<------------------------------------------------------------------------------
37 module boundary_m
38 
39  use sico_types_m
41  use sico_vars_m
42  use error_m
43 
44  implicit none
45 
46  public
47 
48 contains
49 
50 !-------------------------------------------------------------------------------
51 !> Main routine of boundary_m:
52 !! Computation of the surface temperature (must be less than 0 deg C!)
53 !! and of the accumulation-ablation function.
54 !<------------------------------------------------------------------------------
55 subroutine boundary(time, dtime, dxi, deta, &
56  delta_ts, glac_index, z_sl, dzsl_dtau, z_mar)
57 
58 #if ((MARGIN==2) \
59  && (marine_ice_formation==2) \
60  && (marine_ice_calving==9))
62 #endif
63 
65  use pdd_m
66 
67 implicit none
68 
69 real(dp), intent(in) :: time, dtime, dxi, deta
70 
71 real(dp), intent(out) :: delta_ts, glac_index, dzsl_dtau, z_mar
72 real(dp), intent(inout) :: z_sl
73 
74 ! Further return variables
75 ! (defined as global variables in module sico_variables_m):
76 !
77 ! accum(j,i), evap(j,i), runoff(j,i), as_perp(j,i),
78 ! calv_grounded(j,i), temp_s(j,i)
79 
80 integer(i4b) :: i, j, n
81 integer(i4b) :: i_gr, i_kl
82 real(dp) :: z_sl_old
83 real(dp) :: z_sl_min, t1, t2, t3, t4, t5, t6
84 real(dp) :: time_gr, time_kl
85 real(dp) :: z_sle_present, z_sle_help
86 real(dp), dimension(0:JMAX,0:IMAX,0:12) :: precip
87 real(dp), dimension(0:JMAX,0:IMAX,12) :: temp_mm
88 real(dp), dimension(0:JMAX,0:IMAX) :: temp_ma
89 real(dp), dimension(12) :: temp_mm_help
90 real(dp) :: temp_jja_help
91 real(dp) :: gamma_t, temp_diff
92 real(dp) :: gamma_p, zs_thresh, &
93  temp_rain, temp_snow, &
94  inv_delta_temp_rain_snow, coeff(0:5), inv_sqrt2_s_stat, &
95  precip_fact, frac_solid
96 real(dp) :: s_stat, beta1, beta2, pmax, mu, lambda_lti, temp_lti
97 logical, dimension(0:JMAX,0:IMAX) :: check_point
98 logical, save :: firstcall = .true.
99 
100 real(dp), parameter :: &
101  inv_twelve = 1.0_dp/12.0_dp, one_third = 1.0_dp/3.0_dp
102 
103 
104 !-------- Initialization of intent(out) variables --------
105 
106 z_sl_old = z_sl
107 
108 delta_ts = 0.0_dp
109 glac_index = 0.0_dp
110 z_sl = 0.0_dp
111 dzsl_dtau = 0.0_dp
112 z_mar = 0.0_dp
113 
114 !-------- Surface-temperature deviation from present values --------
115 
116 #if TSURFACE==1
117 delta_ts = delta_ts0
118 
119 ! ! Steady state with prescribed constant
120 ! ! air-temperature deviation
121 #elif TSURFACE==3
122 delta_ts = sine_amplit &
123  *cos(2.0_dp*pi*time/(sine_period*year_sec)) &
124  -sine_amplit
125 ! ! Sinusoidal air-temperature forcing
126 #elif TSURFACE==4
127 
128 ! ------ delta_ts from ice-core record
129 
130 if (time/year_sec.lt.real(grip_time_min,dp)) then
131  delta_ts = griptemp(0)
132 else if (time/year_sec.lt.real(grip_time_max,dp)) then
133 
134  i_kl = floor(((time/year_sec)-real(grip_time_min,dp))/real(grip_time_stp,dp))
135  i_kl = max(i_kl, 0)
136 
137  i_gr = ceiling(((time/year_sec)-real(grip_time_min,dp))/real(grip_time_stp,dp))
138  i_gr = min(i_gr, ndata_grip)
139 
140  if (i_kl.eq.i_gr) then
141 
142  delta_ts = griptemp(i_kl)
143 
144  else
145 
146  time_kl = (grip_time_min + i_kl*grip_time_stp) *year_sec
147  time_gr = (grip_time_min + i_gr*grip_time_stp) *year_sec
148 
149  delta_ts = griptemp(i_kl) &
150  +(griptemp(i_gr)-griptemp(i_kl)) &
151  *(time-time_kl)/(time_gr-time_kl)
152  ! linear interpolation of the ice-core data
153 
154  end if
155 
156 else
157  delta_ts = griptemp(ndata_grip)
158 end if
159 
160 delta_ts = delta_ts * grip_temp_fact
161 ! ! modification by constant factor
162 
163 !-------- Glacial index --------
164 
165 #elif TSURFACE==5
166 
167 if (time/year_sec < real(gi_time_min,dp)) then
168  glac_index = glacial_index(0)
169 else if (time/year_sec < real(gi_time_max,dp)) then
170 
171  i_kl = floor(((time/year_sec)-real(gi_time_min,dp))/real(gi_time_stp,dp))
172  i_kl = max(i_kl, 0)
173 
174  i_gr = ceiling(((time/year_sec)-real(gi_time_min,dp))/real(gi_time_stp,dp))
175  i_gr = min(i_gr, ndata_gi)
176 
177  if (i_kl == i_gr) then
178 
179  glac_index = glacial_index(i_kl)
180 
181  else
182 
183  time_kl = (gi_time_min + i_kl*gi_time_stp) *year_sec
184  time_gr = (gi_time_min + i_gr*gi_time_stp) *year_sec
185 
186  glac_index = glacial_index(i_kl) &
187  +(glacial_index(i_gr)-glacial_index(i_kl)) &
188  *(time-time_kl)/(time_gr-time_kl)
189  ! linear interpolation of the glacial-index data
190 
191  end if
192 
193 else
194  glac_index = glacial_index(ndata_gi)
195 end if
196 
197 #endif
198 
199 !-------- Sea level --------
200 
201 #if SEA_LEVEL==1
202 ! ------ constant sea level
203 z_sl = z_sl0
204 
205 #elif SEA_LEVEL==2
206 ! ------ saw-tooth-shaped palaeoclimatic sea-level forcing
207 
208 z_sl_min = -130.0_dp
209 
210 t1 = -250000.0_dp *year_sec
211 t2 = -140000.0_dp *year_sec
212 t3 = -125000.0_dp *year_sec
213 t4 = -21000.0_dp *year_sec
214 t5 = -8000.0_dp *year_sec
215 t6 = 0.0_dp *year_sec
216 
217 if (time.lt.t1) then
218  z_sl = 0.0_dp
219 else if (time.lt.t2) then
220  z_sl = z_sl_min*(time-t1)/(t2-t1)
221 else if (time.lt.t3) then
222  z_sl = -z_sl_min*(time-t3)/(t3-t2)
223 else if (time.lt.t4) then
224  z_sl = z_sl_min*(time-t3)/(t4-t3)
225 else if (time.lt.t5) then
226  z_sl = -z_sl_min*(time-t5)/(t5-t4)
227 else if (time.lt.t6) then
228  z_sl = 0.0_dp
229 else
230  z_sl = 0.0_dp
231 end if
232 
233 #elif SEA_LEVEL==3
234 
235 ! ------ z_sl from the SPECMAP record
236 
237 if (time/year_sec.lt.real(specmap_time_min,dp)) then
238  z_sl = specmap_zsl(0)
239 else if (time/year_sec.lt.real(specmap_time_max,dp)) then
240 
241  i_kl = floor(((time/year_sec)-real(specmap_time_min,dp))/real(specmap_time_stp,dp))
242  i_kl = max(i_kl, 0)
243 
244  i_gr = ceiling(((time/year_sec)-real(specmap_time_min,dp))/real(specmap_time_stp,dp))
245  i_gr = min(i_gr, ndata_specmap)
246 
247  if (i_kl.eq.i_gr) then
248 
249  z_sl = specmap_zsl(i_kl)
250 
251  else
252 
253  time_kl = (specmap_time_min + i_kl*specmap_time_stp) *year_sec
254  time_gr = (specmap_time_min + i_gr*specmap_time_stp) *year_sec
255 
256  z_sl = specmap_zsl(i_kl) &
257  +(specmap_zsl(i_gr)-specmap_zsl(i_kl)) &
258  *(time-time_kl)/(time_gr-time_kl)
259  ! linear interpolation of the sea-level data
260 
261  end if
262 
263 else
264  z_sl = specmap_zsl(ndata_specmap)
265 end if
266 
267 #endif
268 
269 ! ------ Time derivative of the sea level
270 
271 if ( z_sl_old > -999999.9_dp ) then
272  dzsl_dtau = (z_sl-z_sl_old)/dtime
273 else ! only dummy value for z_sl_old available
274  dzsl_dtau = 0.0_dp
275 end if
276 
277 ! ------ Minimum bedrock elevation for extent of marine ice
278 
279 #if MARGIN==2
280 
281 #if ( MARINE_ICE_CALVING==2 || MARINE_ICE_CALVING==3 )
282 z_mar = z_mar
283 #elif ( MARINE_ICE_CALVING==4 || MARINE_ICE_CALVING==5 )
284 z_mar = fact_z_mar*z_sl
285 #elif ( MARINE_ICE_CALVING==6 || MARINE_ICE_CALVING==7 )
286 if (z_sl >= -80.0_dp) then
287  z_mar = 2.5_dp*z_sl
288 else
289  z_mar = 10.25_dp*(z_sl+80.0_dp)-200.0_dp
290 end if
291 z_mar = fact_z_mar*z_mar
292 #endif
293 
294 #endif
295 
296 ! ------ Update of the mask according to the sea level
297 
298 ! ---- Check all sea and floating-ice points and their direct
299 ! neighbours
300 
301 do i=0, imax
302 do j=0, jmax
303  check_point(j,i) = .false.
304 end do
305 end do
306 
307 do i=1, imax-1
308 do j=1, jmax-1
309  if (maske(j,i) >= 2_i1b) then
310  check_point(j ,i ) = .true.
311  check_point(j ,i+1) = .true.
312  check_point(j ,i-1) = .true.
313  check_point(j+1,i ) = .true.
314  check_point(j-1,i ) = .true.
315  end if
316 end do
317 end do
318 
319 do i=1, imax-1
320 do j=1, jmax-1
321  if (check_point(j,i)) then
322  maske_neu(j,i) = mask_update_sea_level(z_sl, i, j)
323  end if
324 end do
325 end do
326 
327 ! ---- Assign new values of the mask
328 
329 do i=1, imax-1
330 do j=1, jmax-1
331  if (check_point(j,i)) then
332  maske(j,i) = maske_neu(j,i)
333  end if
334 end do
335 end do
336 
337 !-------- Surface air temperatures --------
338 
339 gamma_t = -4.5e-03_dp ! atmospheric lapse rate
340 
341 do i=0, imax
342 do j=0, jmax
343 
344 #if (TSURFACE <= 4)
345 
346 ! ------ Correction of present monthly temperatures with elevation changes
347 ! and temperature deviation delta_ts
348 
349  temp_diff = gamma_t*(zs(j,i)-zs_ref(j,i)) + delta_ts
350 
351  do n=1, 12 ! month counter
352  temp_mm(j,i,n) = temp_mm_present(j,i,n) + temp_diff
353  end do
354 
355 #elif (TSURFACE == 5)
356 
357 ! ------ Correction of present monthly temperatures with LGM anomaly and
358 ! glacial index as well as elevation changes
359 
360  temp_diff = gamma_t*(zs(j,i)-zs_ref(j,i))
361 
362  do n=1, 12 ! month counter
363  temp_mm(j,i,n) = temp_mm_present(j,i,n) &
364  + glac_index*temp_mm_lgm_anom(j,i,n) &
365  + temp_diff
366  end do
367 
368 #endif
369 
370 ! ------ Mean annual air temperature
371 
372  temp_ma(j,i) = 0.0_dp ! initialisation value
373 
374  do n=1, 12 ! month counter
375  temp_ma(j,i) = temp_ma(j,i) + temp_mm(j,i,n)*inv_twelve
376  end do
377 
378 end do
379 end do
380 
381 !-------- Accumulation-ablation function as_perp --------
382 
383 #if (ELEV_DESERT == 1)
384 
385 gamma_p = gamma_p*1.0e-03_dp ! Precipitation lapse rate
386  ! for elevation desertification, in m^(-1)
387 zs_thresh = zs_thresh ! Elevation threshold, in m
388 
389 #endif
390 
391 #if (SOLID_PRECIP == 1) /* Marsiat (1994) */
392 
393 temp_rain = 7.0_dp ! Threshold monthly mean temperature for
394  ! precipitation = 100% rain, in deg C
395 temp_snow = -10.0_dp ! Threshold monthly mean temperature for &
396  ! precipitation = 100% snow, in deg C
397 
398 inv_delta_temp_rain_snow = 1.0_dp/(temp_rain-temp_snow)
399 
400 #elif (SOLID_PRECIP == 2) /* Bales et al. (2009) */
401 
402 temp_rain = 7.2_dp ! Threshold monthly mean temperature for &
403  ! precipitation = 100% rain, in deg C
404 temp_snow = -11.6_dp ! Threshold monthly mean temperature for &
405  ! precipitation = 100% snow, in deg C
406 
407 coeff(0) = 5.4714e-01_dp ! Coefficients
408 coeff(1) = -9.1603e-02_dp ! of
409 coeff(2) = -3.314e-03_dp ! the
410 coeff(3) = 4.66e-04_dp ! fifth-order
411 coeff(4) = 3.8e-05_dp ! polynomial
412 coeff(5) = 6.0e-07_dp ! fit
413 
414 #elif (SOLID_PRECIP == 3) /* Huybrechts and de Wolde (1999) */
415 
416 temp_rain = 2.0_dp ! Threshold instantaneous temperature for &
417  ! precipitation = 100% rain, in deg C
418 temp_snow = temp_rain ! Threshold instantaneous temperature for &
419  ! precipitation = 100% snow, in deg C
420 
421 s_stat = s_stat_0 ! Standard deviation of the air termperature
422  ! (same parameter as in the PDD model)
423 
424 inv_sqrt2_s_stat = 1.0_dp/(sqrt(2.0_dp)*s_stat)
425 
426 #endif
427 
428 #if (ABLSURFACE==1 || ABLSURFACE==2)
429 
430 s_stat = s_stat_0
431 beta1 = beta1_0 *(0.001_dp/86400.0_dp)*(rho_w/rho)
432  ! (mm WE)/(d*deg C) --> (m IE)/(s*deg C)
433 beta2 = beta2_0 *(0.001_dp/86400.0_dp)*(rho_w/rho)
434  ! (mm WE)/(d*deg C) --> (m IE)/(s*deg C)
435 
436 pmax = pmax_0
437 mu = mu_0 *(1000.0_dp*86400.0_dp)*(rho/rho_w)
438  ! (d*deg C)/(mm WE) --> (s*deg C)/(m IE)
439 
440 #elif (ABLSURFACE==3)
441 
442 lambda_lti = lambda_lti *(0.001_dp/year_sec)*(rho_w/rho)
443  ! (mm WE)/(a*deg C) --> (m IE)/(s*deg C)
444 temp_lti = temp_lti
445 mu = 0.0_dp ! no superimposed ice considered
446 
447 #endif
448 
449 do i=0, imax
450 do j=0, jmax
451 
452 ! ------ Accumulation
453 
454 #if (ACCSURFACE <= 3)
455 
456 ! ---- Elevation desertification of precipitation
457 
458 #if (ELEV_DESERT == 0)
459 
460  precip_fact = 1.0_dp ! no elevation desertification
461 
462 #elif (ELEV_DESERT == 1)
463 
464  if (zs_ref(j,i) < zs_thresh) then
465  precip_fact &
466  = exp(gamma_p*(max(zs(j,i),zs_thresh)-zs_thresh))
467  else
468  precip_fact &
469  = exp(gamma_p*(max(zs(j,i),zs_thresh)-zs_ref(j,i)))
470  end if
471 
472 #else
473  errormsg = ' >>> boundary: Parameter ELEV_DESERT must be either 0 or 1!'
474  call error(errormsg)
475 #endif
476 
477  do n=1, 12 ! month counter
478  precip(j,i,n) = precip_present(j,i,n)*precip_fact
479  end do
480 
481 #endif
482 
483 ! ---- Precipitation change related to changing climate
484 
485 #if ACCSURFACE==1
486  precip_fact = accfact
487 #elif ACCSURFACE==2
488  precip_fact = 1.0_dp + gamma_s*delta_ts
489 #elif ACCSURFACE==3
490  precip_fact = exp(gamma_s*delta_ts)
491 #endif
492 
493 #if (ACCSURFACE <= 3)
494 
495  precip(j,i,0) = 0.0_dp ! initialisation value for mean annual precip
496 
497  do n=1, 12 ! month counter
498  precip(j,i,n) = precip(j,i,n)*precip_fact ! monthly precip
499  precip(j,i,0) = precip(j,i,0) + precip(j,i,n)*inv_twelve
500  ! mean annual precip
501  end do
502 
503 #elif (ACCSURFACE == 5)
504 
505  precip(j,i,0) = 0.0_dp ! initialisation value for mean annual precip
506 
507  do n=1, 12 ! month counter
508 
509 #if (PRECIP_ANOM_INTERPOL==1)
510  precip_fact = 1.0_dp-glac_index+glac_index*precip_lgm_anom(j,i,n)
511  ! interpolation with a linear function
512 #elif (PRECIP_ANOM_INTERPOL==2)
513  precip_fact = exp(-glac_index*gamma_precip_lgm_anom(j,i,n))
514  ! interpolation with an exponential function
515 #endif
516 
517  precip(j,i,n) = precip_present(j,i,n)*precip_fact ! monthly precip
518  precip(j,i,0) = precip(j,i,0) + precip(j,i,n)*inv_twelve
519  ! mean annual precip
520  end do
521 
522 #endif
523 
524 ! ---- Annual accumulation, snowfall and rainfall rates
525 
526  accum(j,i) = precip(j,i,0)
527 
528  snowfall(j,i) = 0.0_dp ! initialisation value
529 
530  do n=1, 12 ! month counter
531 
532 #if (SOLID_PRECIP == 1) /* Marsiat (1994) */
533 
534  if (temp_mm(j,i,n) >= temp_rain) then
535  frac_solid = 0.0_dp
536  else if (temp_mm(j,i,n) <= temp_snow) then
537  frac_solid = 1.0_dp
538  else
539  frac_solid = (temp_rain-temp_mm(j,i,n))*inv_delta_temp_rain_snow
540  end if
541 
542 #elif (SOLID_PRECIP == 2) /* Bales et al. (2009) */
543 
544  if (temp_mm(j,i,n) >= temp_rain) then
545  frac_solid = 0.0_dp
546  else if (temp_mm(j,i,n) <= temp_snow) then
547  frac_solid = 1.0_dp
548  else
549  frac_solid = coeff(0) + temp_mm(j,i,n) * ( coeff(1) &
550  + temp_mm(j,i,n) * ( coeff(2) &
551  + temp_mm(j,i,n) * ( coeff(3) &
552  + temp_mm(j,i,n) * ( coeff(4) &
553  + temp_mm(j,i,n) * coeff(5) ) ) ) )
554  ! evaluation of 5th-order polynomial by Horner scheme
555  end if
556 
557 #elif (SOLID_PRECIP == 3) /* Huybrechts and de Wolde (1999) */
558 
559  frac_solid = 1.0_dp &
560  - 0.5_dp*erfc((temp_rain-temp_mm(j,i,n))*inv_sqrt2_s_stat)
561 
562 #endif
563 
564  snowfall(j,i) = snowfall(j,i) + precip(j,i,n)*frac_solid*inv_twelve
565 
566  end do
567 
568  rainfall(j,i) = precip(j,i,0) - snowfall(j,i)
569 
570  if (snowfall(j,i) < 0.0_dp) snowfall(j,i) = 0.0_dp ! correction of
571  if (rainfall(j,i) < 0.0_dp) rainfall(j,i) = 0.0_dp ! negative values
572 
573 ! ------ Ablation
574 
575 ! ---- Runoff
576 
577 #if (ABLSURFACE==1 || ABLSURFACE==2)
578 
579 ! ---- Temperature excess ET
580 
581  do n=1, 12 ! month counter
582  temp_mm_help(n) = temp_mm(j,i,n)
583  end do
584 
585  call pdd(temp_mm_help, s_stat, et(j,i))
586 
587 
588 ! ---- Formation rate of superimposed ice (melt_star), melt rate (melt)
589 ! and runoff rate (runoff)
590 
591 #if (ABLSURFACE==1)
592 
593  if ((beta1*et(j,i)) <= (pmax*snowfall(j,i))) then
594  melt_star(j,i) = beta1*et(j,i)
595  melt(j,i) = 0.0_dp
596  runoff(j,i) = melt(j,i)+rainfall(j,i)
597  else
598  melt_star(j,i) = pmax*snowfall(j,i)
599  melt(j,i) = beta2*(et(j,i)-melt_star(j,i)/beta1)
600  runoff(j,i) = melt(j,i)+rainfall(j,i)
601  end if
602 
603 #elif (ABLSURFACE==2)
604 
605  if ( rainfall(j,i) <= (pmax*snowfall(j,i)) ) then
606 
607  if ( (rainfall(j,i)+beta1*et(j,i)) <= (pmax*snowfall(j,i)) ) then
608  melt_star(j,i) = rainfall(j,i)+beta1*et(j,i)
609  melt(j,i) = 0.0_dp
610  runoff(j,i) = melt(j,i)
611  else
612  melt_star(j,i) = pmax*snowfall(j,i)
613  melt(j,i) = beta2 &
614  *(et(j,i)-(melt_star(j,i)-rainfall(j,i))/beta1)
615  runoff(j,i) = melt(j,i)
616  end if
617 
618  else
619 
620  melt_star(j,i) = pmax*snowfall(j,i)
621  melt(j,i) = beta2*et(j,i)
622  runoff(j,i) = melt(j,i) + rainfall(j,i)-pmax*snowfall(j,i)
623 
624  end if
625 
626 #endif
627 
628 #elif (ABLSURFACE==3)
629 
630  temp_jja_help = one_third*(temp_mm(j,i,6)+temp_mm(j,i,7)+temp_mm(j,i,8))
631 
632  melt_star(j,i) = 0.0_dp ! no superimposed ice considered
633  melt(j,i) = lambda_lti*max((temp_jja_help-temp_lti), 0.0_dp)
634  runoff(j,i) = melt(j,i) + rainfall(j,i)
635 
636 #endif
637 
638 ! ---- Evaporation
639 
640  evap(j,i) = 0.0_dp
641 
642 end do
643 end do
644 
645 ! ------ Accumulation minus runoff
646 
647 as_perp = accum - evap - runoff
648 
649  !hack for initial present-day conditions:
650  !set as_perp to zero, hold bedrock fixed and let zs evolve freely (initial zs smoothing)
651  !as_perp = 0.0_dp
652 
653 ! ------ Ice-surface temperature (10-m firn temperature) temp_s,
654 ! including empirical firn-warming correction due to
655 ! refreezing meltwater when superimposed ice is formed
656 
657 where (melt_star >= melt)
658  temp_s = temp_ma + mu*(melt_star-melt)
659 elsewhere
660  temp_s = temp_ma
661 end where
662 
663 where (temp_s > -0.001_dp) temp_s = -0.001_dp
664  ! Cut-off of positive air temperatures
665 
666 !-------- Calving rate of grounded ice --------
667 
668 calv_grounded = 0.0_dp
669 
670 #if ((MARGIN==2) \
671  && (marine_ice_formation==2) \
672  && (marine_ice_calving==9))
673 
674 call calving_underwater_ice(z_sl)
676 
677 #endif
678 
679 if (firstcall) firstcall = .false.
680 
681 end subroutine boundary
682 
683 !-------------------------------------------------------------------------------
684 
685 end module boundary_m
686 !
integer(i4b) grip_time_stp
grip_time_stp: Time step of the data values for the surface temperature anomaly
integer(i4b) ndata_specmap
ndata_specmap: Number of data values for the sea level
real(dp), dimension(0:jmax, 0:imax, 12) temp_mm_present
temp_mm_present(j,i,n): Present-day mean monthly surface temperature
real(dp) rho_w
RHO_W: Density of pure water.
subroutine error(error_message)
Main routine of error_m: Writing of error messages and stopping execution.
Definition: error_m.F90:47
integer(i4b) specmap_time_max
specmap_time_max: Maximum time of the data values for the sea level
real(dp) mu_0
MU_0: Firn-warming correction.
real(dp), dimension(0:jmax, 0:imax) calv_grounded
calv_grounded(j,i): Calving rate of grounded ice
real(dp), dimension(0:jmax, 0:imax) rainfall
rainfall(j,i): Rainfall rate at the ice surface
integer(i4b) specmap_time_min
specmap_time_min: Minimum time of the data values for the sea level
Computation of the positive degree days (PDD) with statistical temperature fluctuations; based on sem...
Definition: pdd_m.F90:37
integer(i1b), dimension(0:jmax, 0:imax) maske_neu
maske_neu(j,i): New value of maske computed during an integration step
real(dp), dimension(0:jmax, 0:imax) as_perp
as_perp(j,i): Accumulation-ablation function at the ice surface (SMB)
real(dp), dimension(:), allocatable glacial_index
glacial_index(n): Data values for the glacial index
real(dp) s_stat_0
S_STAT_0: Standard deviation of the air termperature for the degree-day model.
real(dp), dimension(0:jmax, 0:imax) runoff
runoff(j,i): Runoff rate at the ice surface
real(dp), dimension(0:jmax, 0:imax) melt_star
melt_star(j,i): Superimposed ice formation rate at the ice surface
real(dp), dimension(0:jmax, 0:imax) zs_ref
zs_ref(j,i): Reference elevation for precip_present, temp_ma_present and temp_mj_present ...
real(dp), dimension(0:jmax, 0:imax) snowfall
snowfall(j,i): Snowfall rate at the ice surface
real(dp), dimension(0:jmax, 0:imax) temp_s
temp_s(j,i): Ice surface temperature
real(dp), dimension(0:jmax, 0:imax) melt
melt(j,i): Melting rate at the ice surface
integer(i4b) grip_time_max
grip_time_max: Maximum time of the data values for the surface temperature anomaly ...
Declarations of global variables for SICOPOLIS (for the ANT domain).
Definition: sico_vars_m.F90:35
integer(i4b) ndata_gi
ndata_gi: Number of data values for the glacial index
integer(i4b) ndata_grip
ndata_grip: Number of data values for the surface temperature anomaly
real(dp) beta1_0
BETA1_0: Degree-day factor for snow.
real(dp), dimension(0:jmax, 0:imax) et
ET(j,i): Temperature excess at the ice surface (positive degree days divided by time) ...
real(dp), dimension(0:jmax, 0:imax) calv_uw_ice
Calving of "underwater ice".
Declarations of kind types for SICOPOLIS.
real(dp), dimension(0:jmax, 0:imax) zs
zs(j,i): Coordinate z of the surface topography
real(dp) pmax_0
PMAX_0: Saturation factor for the formation of superimposed ice.
real(dp), dimension(0:jmax, 0:imax) evap
evap(j,i): Evaporation rate at the ice surface
real(dp), dimension(0:jmax, 0:imax) accum
accum(j,i): Accumulation rate at the ice surface (includes liquid precipitation = rainfall!) ...
integer(i1b) function, public mask_update_sea_level(z_sl, i, j)
Main function of mask_update_m: Update of the ice-land-ocean mask due to changes of the sea level...
integer(i4b) gi_time_min
gi_time_min: Minimum time of the data values for the glacial index
real(dp), dimension(:), allocatable specmap_zsl
specmap_zsl(n): Data values for the sea level
real(dp) beta2_0
BETA2_0: Degree-day factor for ice.
integer(i4b) gi_time_stp
gi_time_stp: Time step of the data values for the glacial index
Writing of error messages and stopping execution.
Definition: error_m.F90:35
integer(i4b) gi_time_max
gi_time_max: Maximum time of the data values for the glacial index
real(dp), dimension(0:jmax, 0:imax, 12) gamma_precip_lgm_anom
gamma_precip_lgm_anom(j,i,n): negative natural logarithm of precip_lgm_anom(j,i,n) ...
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 ...
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
integer(i4b) specmap_time_stp
specmap_time_stp: Time step of the data values for the sea level
real(dp), parameter pi
pi: Constant pi
integer(i4b) grip_time_min
grip_time_min: Minimum time of the data values for the surface temperature anomaly ...
subroutine calving_underwater_ice(z_sl)
Main routine: Calving of "underwater ice".
Computation of the surface temperature (must be less than 0 deg C!) and of the accumulation-ablation ...
Definition: boundary_m.F90:37
subroutine, public pdd(temp_mm, s_stat, ET)
Main subroutine of pdd_m: Computation of the positive degree days (PDD) with statistical temperature ...
Definition: pdd_m.F90:57
character(len=256) errormsg
errormsg: Error-message string
real(dp) rho
RHO: Density of ice.
Update of the ice-land-ocean mask due to changes of the sea level.
integer, parameter dp
Double-precision reals.
real(dp), dimension(0:jmax, 0:imax, 12) precip_present
precip_present(j,i,n): Present-day mean monthly precipitation rate at the ice surface ...
real(dp), dimension(0:jmax, 0:imax, 12) precip_lgm_anom
precip_lgm_anom(j,i,n): LGM anomaly (ratio LGM/present) of the mean monthly precipitation rate at the...
real(dp), dimension(0:jmax, 0:imax, 12) temp_mm_lgm_anom
temp_mm_lgm_anom(j,i,n): LGM anomaly (difference LGM - present) of the mean monthly surface temperatu...
Declarations of global variables for SICOPOLIS.
real(dp), dimension(:), allocatable griptemp
griptemp(n): Data values for the surface temperature anomaly