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