SICOPOLIS V5-dev  Revision 1288
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 !-------- 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 ! ! Steady state with prescribed constant
118 ! ! air-temperature deviation
119 #elif TSURFACE==3
120 delta_ts = sine_amplit &
121  *cos(2.0_dp*pi*time/(sine_period*year_sec)) &
122  -sine_amplit
123 ! ! Sinusoidal air-temperature forcing
124 #elif TSURFACE==4
125 
126 ! ------ delta_ts from ice-core record
127 
128 if (time/year_sec.lt.real(grip_time_min,dp)) then
129  delta_ts = griptemp(0)
130 else if (time/year_sec.lt.real(grip_time_max,dp)) then
131 
132  i_kl = floor(((time/year_sec) &
133  -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) &
137  -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) &
172  -real(gi_time_min,dp))/real(gi_time_stp,dp))
173  i_kl = max(i_kl, 0)
174 
175  i_gr = ceiling(((time/year_sec) &
176  -real(gi_time_min,dp))/real(gi_time_stp,dp))
177  i_gr = min(i_gr, ndata_gi)
178 
179  if (i_kl == i_gr) then
180 
181  glac_index = glacial_index(i_kl)
182 
183  else
184 
185  time_kl = (gi_time_min + i_kl*gi_time_stp) *year_sec
186  time_gr = (gi_time_min + i_gr*gi_time_stp) *year_sec
187 
188  glac_index = glacial_index(i_kl) &
189  +(glacial_index(i_gr)-glacial_index(i_kl)) &
190  *(time-time_kl)/(time_gr-time_kl)
191  ! linear interpolation of the glacial-index data
192 
193  end if
194 
195 else
196  glac_index = glacial_index(ndata_gi)
197 end if
198 
199 #endif
200 
201 !-------- Sea level --------
202 
203 #if SEA_LEVEL==1
204 ! ------ constant sea level
205 z_sl = z_sl0
206 
207 #elif SEA_LEVEL==2
208 ! ------ saw-tooth-shaped palaeoclimatic sea-level forcing
209 
210 z_sl_min = -130.0_dp
211 
212 t1 = -250000.0_dp *year_sec
213 t2 = -140000.0_dp *year_sec
214 t3 = -125000.0_dp *year_sec
215 t4 = -21000.0_dp *year_sec
216 t5 = -8000.0_dp *year_sec
217 t6 = 0.0_dp *year_sec
218 
219 if (time.lt.t1) then
220  z_sl = 0.0_dp
221 else if (time.lt.t2) then
222  z_sl = z_sl_min*(time-t1)/(t2-t1)
223 else if (time.lt.t3) then
224  z_sl = -z_sl_min*(time-t3)/(t3-t2)
225 else if (time.lt.t4) then
226  z_sl = z_sl_min*(time-t3)/(t4-t3)
227 else if (time.lt.t5) then
228  z_sl = -z_sl_min*(time-t5)/(t5-t4)
229 else if (time.lt.t6) then
230  z_sl = 0.0_dp
231 else
232  z_sl = 0.0_dp
233 end if
234 
235 #elif SEA_LEVEL==3
236 
237 ! ------ z_sl from the SPECMAP record
238 
239 if (time/year_sec.lt.real(specmap_time_min,dp)) then
240  z_sl = specmap_zsl(0)
241 else if (time/year_sec.lt.real(specmap_time_max,dp)) then
242 
243  i_kl = floor(((time/year_sec) &
244  -real(specmap_time_min,dp))/real(specmap_time_stp,dp))
245  i_kl = max(i_kl, 0)
246 
247  i_gr = ceiling(((time/year_sec) &
248  -real(specmap_time_min,dp))/real(specmap_time_stp,dp))
249  i_gr = min(i_gr, ndata_specmap)
250 
251  if (i_kl.eq.i_gr) then
252 
253  z_sl = specmap_zsl(i_kl)
254 
255  else
256 
257  time_kl = (specmap_time_min + i_kl*specmap_time_stp) *year_sec
258  time_gr = (specmap_time_min + i_gr*specmap_time_stp) *year_sec
259 
260  z_sl = specmap_zsl(i_kl) &
261  +(specmap_zsl(i_gr)-specmap_zsl(i_kl)) &
262  *(time-time_kl)/(time_gr-time_kl)
263  ! linear interpolation of the sea-level data
264 
265  end if
266 
267 else
268  z_sl = specmap_zsl(ndata_specmap)
269 end if
270 
271 #endif
272 
273 ! ------ Time derivative of the sea level
274 
275 if ( z_sl_old > -999999.9_dp ) then
276  dzsl_dtau = (z_sl-z_sl_old)/dtime
277 else ! only dummy value for z_sl_old available
278  dzsl_dtau = 0.0_dp
279 end if
280 
281 ! ------ Minimum bedrock elevation for extent of marine ice
282 
283 #if MARGIN==2
284 
285 #if ( MARINE_ICE_CALVING==2 || MARINE_ICE_CALVING==3 )
286 z_mar = z_mar
287 #elif ( MARINE_ICE_CALVING==4 || MARINE_ICE_CALVING==5 )
288 z_mar = fact_z_mar*z_sl
289 #elif ( MARINE_ICE_CALVING==6 || MARINE_ICE_CALVING==7 )
290 if (z_sl >= -80.0_dp) then
291  z_mar = 2.5_dp*z_sl
292 else
293  z_mar = 10.25_dp*(z_sl+80.0_dp)-200.0_dp
294 end if
295 z_mar = fact_z_mar*z_mar
296 #endif
297 
298 #endif
299 
300 ! ------ Update of the mask according to the sea level
301 
302 ! ---- Check all sea and floating-ice points and their direct
303 ! neighbours
304 
305 do i=0, imax
306 do j=0, jmax
307  check_point(j,i) = .false.
308 end do
309 end do
310 
311 do i=1, imax-1
312 do j=1, jmax-1
313  if (maske(j,i).ge.2) then
314  check_point(j ,i ) = .true.
315  check_point(j ,i+1) = .true.
316  check_point(j ,i-1) = .true.
317  check_point(j+1,i ) = .true.
318  check_point(j-1,i ) = .true.
319  end if
320 end do
321 end do
322 
323 do i=1, imax-1
324 do j=1, jmax-1
325  if (check_point(j,i)) then
326  maske_neu(j,i) = mask_update_sea_level(z_sl, i, j)
327  end if
328 end do
329 end do
330 
331 ! ---- Assign new values of the mask
332 
333 do i=1, imax-1
334 do j=1, jmax-1
335  if (check_point(j,i)) then
336  maske(j,i) = maske_neu(j,i)
337  end if
338 end do
339 end do
340 
341 !-------- Surface air temperatures --------
342 
343 gamma_t = -6.5e-03_dp ! atmospheric lapse rate
344 
345 do i=0, imax
346 do j=0, jmax
347 
348 #if (TSURFACE <= 4)
349 
350 ! ------ Correction of present monthly temperatures with elevation changes
351 ! and temperature deviation delta_ts
352 
353  temp_diff = gamma_t*(zs(j,i)-zs_ref(j,i)) + delta_ts
354 
355  do n=1, 12 ! month counter
356  temp_mm(j,i,n) = temp_mm_present(j,i,n) + temp_diff
357  end do
358 
359 #elif (TSURFACE == 5)
360 
361 ! ------ Correction of present monthly temperatures with LGM anomaly and
362 ! glacial index as well as elevation changes
363 
364  temp_diff = gamma_t*(zs(j,i)-zs_ref(j,i))
365 
366  do n=1, 12 ! month counter
367  temp_mm(j,i,n) = temp_mm_present(j,i,n) &
368  + glac_index*temp_mm_lgm_anom(j,i,n) &
369  + temp_diff
370  end do
371 
372 #endif
373 
374 ! ------ Mean annual air temperature
375 
376  temp_ma(j,i) = 0.0_dp ! initialisation value
377 
378  do n=1, 12 ! month counter
379  temp_ma(j,i) = temp_ma(j,i) + temp_mm(j,i,n)*inv_twelve
380  end do
381 
382 end do
383 end do
384 
385 !-------- Accumulation-ablation function as_perp --------
386 
387 #if (ELEV_DESERT == 1)
388 
389 gamma_p = gamma_p*1.0e-03_dp ! Precipitation lapse rate
390  ! for elevation desertification, in m^(-1)
391 zs_thresh = zs_thresh ! Elevation threshold, in m
392 
393 #endif
394 
395 #if (SOLID_PRECIP == 1) /* Marsiat (1994) */
396 
397 temp_rain = 7.0_dp ! Threshold monthly mean temperature for
398  ! precipitation = 100% rain, in deg C
399 temp_snow = -10.0_dp ! Threshold monthly mean temperature for &
400  ! precipitation = 100% snow, in deg C
401 
402 inv_delta_temp_rain_snow = 1.0_dp/(temp_rain-temp_snow)
403 
404 #elif (SOLID_PRECIP == 2) /* Bales et al. (2009) */
405 
406 temp_rain = 7.2_dp ! Threshold monthly mean temperature for &
407  ! precipitation = 100% rain, in deg C
408 temp_snow = -11.6_dp ! Threshold monthly mean temperature for &
409  ! precipitation = 100% snow, in deg C
410 
411 coeff(0) = 5.4714e-01_dp ! Coefficients
412 coeff(1) = -9.1603e-02_dp ! of
413 coeff(2) = -3.314e-03_dp ! the
414 coeff(3) = 4.66e-04_dp ! fifth-order
415 coeff(4) = 3.8e-05_dp ! polynomial
416 coeff(5) = 6.0e-07_dp ! fit
417 
418 #elif (SOLID_PRECIP == 3) /* Huybrechts and de Wolde (1999) */
419 
420 temp_rain = 2.0_dp ! Threshold instantaneous temperature for &
421  ! precipitation = 100% rain, in deg C
422 temp_snow = temp_rain ! Threshold instantaneous temperature for &
423  ! precipitation = 100% snow, in deg C
424 
425 s_stat = s_stat_0 ! Standard deviation of the air termperature
426  ! (same parameter as in the PDD model)
427 
428 inv_sqrt2_s_stat = 1.0_dp/(sqrt(2.0_dp)*s_stat)
429 
430 #endif
431 
432 #if (ABLSURFACE==1 || ABLSURFACE==2)
433 
434 s_stat = s_stat_0
435 beta1 = beta1_0 *(0.001_dp/86400.0_dp)*(rho_w/rho)
436  ! (mm WE)/(d*deg C) --> (m IE)/(s*deg C)
437 beta2 = beta2_0 *(0.001_dp/86400.0_dp)*(rho_w/rho)
438  ! (mm WE)/(d*deg C) --> (m IE)/(s*deg C)
439 pmax = pmax_0
440 mu = mu_0 *(1000.0_dp*86400.0_dp)*(rho/rho_w)
441  ! (d*deg C)/(mm WE) --> (s*deg C)/(m IE)
442 
443 #elif (ABLSURFACE==3)
444 
445 lambda_lti = lambda_lti *(0.001_dp/year_sec)*(rho_w/rho)
446  ! (mm WE)/(a*deg C) --> (m IE)/(s*deg C)
447 temp_lti = temp_lti
448 mu = 0.0_dp ! no superimposed ice considered
449 
450 #endif
451 
452 do i=0, imax
453 do j=0, jmax
454 
455 ! ------ Accumulation
456 
457 #if (ACCSURFACE <= 3)
458 
459 ! ---- Elevation desertification of precipitation
460 
461 #if (ELEV_DESERT == 0)
462 
463  precip_fact = 1.0_dp ! no elevation desertification
464 
465 #elif (ELEV_DESERT == 1)
466 
467  if (zs_ref(j,i) < zs_thresh) then
468  precip_fact &
469  = exp(gamma_p*(max(zs(j,i),zs_thresh)-zs_thresh))
470  else
471  precip_fact &
472  = exp(gamma_p*(max(zs(j,i),zs_thresh)-zs_ref(j,i)))
473  end if
474 
475 #else
476  errormsg = ' >>> boundary: Parameter ELEV_DESERT must be either 0 or 1!'
477  call error(errormsg)
478 #endif
479 
480  do n=1, 12 ! month counter
481  precip(j,i,n) = precip_present(j,i,n)*precip_fact
482  end do
483 
484 #endif
485 
486 ! ---- Precipitation change related to changing climate
487 
488 #if ACCSURFACE==1
489  precip_fact = accfact
490 #elif ACCSURFACE==2
491  precip_fact = 1.0_dp + gamma_s*delta_ts
492 #elif ACCSURFACE==3
493  precip_fact = exp(gamma_s*delta_ts)
494 #endif
495 
496 #if (ACCSURFACE <= 3)
497 
498  precip(j,i,0) = 0.0_dp ! initialisation value for mean annual precip
499 
500  do n=1, 12 ! month counter
501  precip(j,i,n) = precip(j,i,n)*precip_fact ! monthly precip
502  precip(j,i,0) = precip(j,i,0) + precip(j,i,n)*inv_twelve
503  ! mean annual precip
504  end do
505 
506 #elif (ACCSURFACE == 5)
507 
508  precip(j,i,0) = 0.0_dp ! initialisation value for mean annual precip
509 
510  do n=1, 12 ! month counter
511 
512 #if (PRECIP_ANOM_INTERPOL==1)
513  precip_fact = 1.0_dp-glac_index+glac_index*precip_lgm_anom(j,i,n)
514  ! interpolation with a linear function
515 #elif (PRECIP_ANOM_INTERPOL==2)
516  precip_fact = exp(-glac_index*gamma_precip_lgm_anom(j,i,n))
517  ! interpolation with an exponential function
518 #endif
519 
520  precip(j,i,n) = precip_present(j,i,n)*precip_fact ! monthly precip
521  precip(j,i,0) = precip(j,i,0) + precip(j,i,n)*inv_twelve
522  ! mean annual precip
523  end do
524 
525 #endif
526 
527 ! ---- Annual accumulation, snowfall and rainfall rates
528 
529  accum(j,i) = precip(j,i,0)
530 
531  snowfall(j,i) = 0.0_dp ! initialisation value
532 
533  do n=1, 12 ! month counter
534 
535 #if (SOLID_PRECIP == 1) /* Marsiat (1994) */
536 
537  if (temp_mm(j,i,n) >= temp_rain) then
538  frac_solid = 0.0_dp
539  else if (temp_mm(j,i,n) <= temp_snow) then
540  frac_solid = 1.0_dp
541  else
542  frac_solid = (temp_rain-temp_mm(j,i,n))*inv_delta_temp_rain_snow
543  end if
544 
545 #elif (SOLID_PRECIP == 2) /* Bales et al. (2009) */
546 
547  if (temp_mm(j,i,n) >= temp_rain) then
548  frac_solid = 0.0_dp
549  else if (temp_mm(j,i,n) <= temp_snow) then
550  frac_solid = 1.0_dp
551  else
552  frac_solid = coeff(0) + temp_mm(j,i,n) * ( coeff(1) &
553  + temp_mm(j,i,n) * ( coeff(2) &
554  + temp_mm(j,i,n) * ( coeff(3) &
555  + temp_mm(j,i,n) * ( coeff(4) &
556  + temp_mm(j,i,n) * coeff(5) ) ) ) )
557  ! evaluation of 5th-order polynomial by Horner scheme
558  end if
559 
560 #elif (SOLID_PRECIP == 3) /* Huybrechts and de Wolde (1999) */
561 
562  frac_solid = 1.0_dp &
563  - 0.5_dp*erfc((temp_rain-temp_mm(j,i,n))*inv_sqrt2_s_stat)
564 
565 #endif
566 
567  snowfall(j,i) = snowfall(j,i) + precip(j,i,n)*frac_solid*inv_twelve
568 
569  end do
570 
571  rainfall(j,i) = precip(j,i,0) - snowfall(j,i)
572 
573  if (snowfall(j,i) < 0.0_dp) snowfall(j,i) = 0.0_dp ! correction of
574  if (rainfall(j,i) < 0.0_dp) rainfall(j,i) = 0.0_dp ! negative values
575 
576 ! ------ Ablation
577 
578 ! ---- Runoff
579 
580 #if (ABLSURFACE==1 || ABLSURFACE==2)
581 
582 ! -- Temperature excess ET
583 
584  do n=1, 12 ! month counter
585  temp_mm_help(n) = temp_mm(j,i,n)
586  end do
587 
588  call pdd(temp_mm_help, s_stat, et(j,i))
589 
590 ! -- Formation rate of superimposed ice (melt_star), melt rate (melt)
591 ! and runoff rate (runoff)
592 
593 #if (ABLSURFACE==1)
594 
595  if ((beta1*et(j,i)) <= (pmax*snowfall(j,i))) then
596  melt_star(j,i) = beta1*et(j,i)
597  melt(j,i) = 0.0_dp
598  runoff(j,i) = melt(j,i)+rainfall(j,i)
599  else
600  melt_star(j,i) = pmax*snowfall(j,i)
601  melt(j,i) = beta2*(et(j,i)-melt_star(j,i)/beta1)
602  runoff(j,i) = melt(j,i)+rainfall(j,i)
603  end if
604 
605 #elif (ABLSURFACE==2)
606 
607  if ( rainfall(j,i) <= (pmax*snowfall(j,i)) ) then
608 
609  if ( (rainfall(j,i)+beta1*et(j,i)) <= (pmax*snowfall(j,i)) ) then
610  melt_star(j,i) = rainfall(j,i)+beta1*et(j,i)
611  melt(j,i) = 0.0_dp
612  runoff(j,i) = melt(j,i)
613  else
614  melt_star(j,i) = pmax*snowfall(j,i)
615  melt(j,i) = beta2 &
616  *(et(j,i)-(melt_star(j,i)-rainfall(j,i))/beta1)
617  runoff(j,i) = melt(j,i)
618  end if
619 
620  else
621 
622  melt_star(j,i) = pmax*snowfall(j,i)
623  melt(j,i) = beta2*et(j,i)
624  runoff(j,i) = melt(j,i) + rainfall(j,i)-pmax*snowfall(j,i)
625 
626  end if
627 
628 #endif
629 
630 #elif (ABLSURFACE==3)
631 
632  temp_jja_help = one_third*(temp_mm(j,i,6)+temp_mm(j,i,7)+temp_mm(j,i,8))
633 
634  melt_star(j,i) = 0.0_dp ! no superimposed ice considered
635  melt(j,i) = lambda_lti*max((temp_jja_help-temp_lti), 0.0_dp)
636  runoff(j,i) = melt(j,i) + rainfall(j,i)
637 
638 #endif
639 
640 ! ---- Evaporation
641 
642  evap(j,i) = 0.0_dp
643 
644 end do
645 end do
646 
647 ! ------ Accumulation minus ablation
648 
649 as_perp = accum - evap - runoff
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.
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(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
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(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
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