SICOPOLIS V3.2
 All Classes Files Functions Variables Macros
sub_ice_shelf_melting_param.F90
Go to the documentation of this file.
1 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 !
3 ! Subroutine : s u b _ i c e _ s h e l f _ m e l t i n g _ p a r a m
4 !
5 !> @file
6 !!
7 !! Sub-ice-shelf melting parameterisation for Antarctica.
8 !!
9 !! @section Copyright
10 !!
11 !! Copyright 2013-2016 Ralf Greve, Ben Galton-Fenzi, Tatsuru Sato
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 !> Sub-ice-shelf melting parameterisation for Antarctica.
34 !<------------------------------------------------------------------------------
35 subroutine sub_ice_shelf_melting_param(z_sl, i, j, Q_bm_floating)
36 
37 use sico_types
39 use sico_vars
40 
41 implicit none
42 
43 integer(i4b), intent(in) :: i, j
44 real(dp), intent(in) :: z_sl
45 
46 real(dp), intent(out) :: q_bm_floating
47 
48 real(dp) :: lon_d, lat_d, tmb, phi_par
49 real(dp) :: toc, omega, alpha, draft0, draft
50 real(dp) :: h_w_now, q_bm_scaling_factor
51 
52 real(dp), parameter :: c_sw = 3974.0_dp, &
53  g_t = 5.0e-05_dp, &
54  beta_sw = 7.61e-04_dp
55 
56 real(dp), parameter :: euler = 2.718281828459045_dp
57 
58 phi_par = rho_sw*c_sw*g_t/(rho*l)
59 
60 lon_d = lambda(j,i) *pi_180_inv ! rad -> deg
61 lat_d = phi(j,i) *pi_180_inv ! rad -> deg
62 
63 lon_d = modulo(lon_d+180.0_dp, 360.0_dp)-180.0_dp
64  ! mapping to interval
65  ! [-180 deg, +180 deg)
66 
67 #if (defined(ANT)) /* Antarctic ice sheet */
68 
69 !-------- Definition of the sectors --------
70 
71 if ((lon_d>=-10.0_dp).and.(lon_d<60.0_dp)) then
72  ! Western East Antarctica
73  n_sector(j,i) = 1_i2b
74 
75  toc = 0.23_dp
76  omega = 0.0076_dp
77  alpha = 1.33_dp
78  draft0 = 200.0_dp
79 
80 else if ((lon_d>=60.0_dp).and.(lon_d<80.0_dp)) then
81  ! Amery/Prydz Bay
82  n_sector(j,i) = 2_i2b
83 
84  toc = -1.61_dp
85  omega = 0.0128_dp
86  alpha = 0.94_dp
87  draft0 = 200.0_dp
88 
89 else if ((lon_d>=80.0_dp).and.(lon_d<130.0_dp)) then
90  ! Sabrina Coast/
91  ! Aurora subglacial basin
92  n_sector(j,i) = 3_i2b
93 
94  toc = -0.16_dp
95  omega = 0.0497_dp
96  alpha = 0.85_dp
97  draft0 = 200.0_dp
98 
99 else if ( ((lon_d>=130.0_dp).and.(lon_d<159.0_dp)) &
100  .or. &
101  ((lon_d>=159.0_dp).and.(lon_d<170.0_dp) &
102  .and.(lat_d>=-72.0_dp)) ) then
103  ! George V Coast/
104  ! Wilkes subglacial basin
105  n_sector(j,i) = 4_i2b
106 
107  toc = -0.22_dp
108  omega = 0.0423_dp
109  alpha = 0.11_dp
110  draft0 = 200.0_dp
111 
112 else if ( (lon_d>=159.0_dp) &
113  .or. &
114  (lon_d<-140.0_dp) &
115  .or. &
116  ((lon_d>=-140.0_dp).and.(lon_d<-120.0_dp) &
117  .and.(lat_d<-77.0_dp)) ) then
118  ! Ross Sea
119  n_sector(j,i) = 5_i2b
120 
121  toc = -1.8_dp
122  omega = 0.0181_dp
123  alpha = 0.73_dp
124  draft0 = 200.0_dp
125 
126 else if ( ((lon_d>=-140.0_dp).and.(lon_d<-120.0_dp) &
127  .and.(lat_d>=-77.0_dp)) &
128  .or. &
129  ((lon_d>=-120.0_dp).and.(lon_d<-90.0_dp)) ) then
130  ! Amundsen Sea
131  n_sector(j,i) = 6_i2b
132 
133  toc = 0.42_dp
134  omega = 0.1023_dp
135  alpha = 0.26_dp
136  draft0 = 200.0_dp
137 
138 else if ( ((lon_d>=-90.0_dp).and.(lon_d<-66.0_dp) &
139  .and.(lat_d>=-74.0_dp)) ) then
140  ! Bellingshausen Sea
141  n_sector(j,i) = 7_i2b
142 
143  toc = 0.62_dp
144  omega = 0.0644_dp
145  alpha = 0.16_dp
146  draft0 = 200.0_dp
147 
148 else
149  ! Weddell Sea
150  n_sector(j,i) = 8_i2b
151 
152  toc = -1.55_dp
153  omega = 0.0197_dp
154  alpha = 0.26_dp
155  draft0 = 200.0_dp
156 
157 endif
158 
159 !-------- Computation of the sub-ice-shelf melting rate --------
160 
161 if (maske(j,i)==2_i2b) then ! ocean
162  draft = 0.0_dp
163  h_w_now = max((z_sl-zl(j,i)), 0.0_dp)
164 else if (maske(j,i)==3_i2b) then ! floating ice
165  draft = max((z_sl -zb(j,i)), 0.0_dp)
166  h_w_now = max((zb(j,i)-zl(j,i)), 0.0_dp)
167 else
168  write(6, fmt='(a)') ' sub_ice_shelf_melting_param:'
169  write(6, fmt='(a)') ' Routine should not be called for maske(j,i) < 2!'
170  stop
171 end if
172 
173 tmb = -beta_sw*draft - delta_tm_sw
174 
175 #if (defined(H_W_0))
176 
177 if (h_w_0 > eps) then
178  q_bm_scaling_factor = tanh(euler*h_w_now/h_w_0)
179 else
180  q_bm_scaling_factor = 1.0_dp
181 end if
182 
183 #else
184 q_bm_scaling_factor = 1.0_dp
185 #endif
186 
187 q_bm_floating = q_bm_scaling_factor &
188  *phi_par*omega*(toc-tmb)*(draft/draft0)**alpha
189 
190 #else /* not Antarctic ice sheet */
191 
192 write(6, fmt='(a)') ' sub_ice_shelf_melting_param:'
193 write(6, fmt='(a)') ' Parameterisation only defined for Antarctica!'
194 stop
195 
196 #endif
197 
198 end subroutine sub_ice_shelf_melting_param
199 !
Declarations of kind types for SICOPOLIS.
Definition: sico_types.F90:35
Declarations of global variables for SICOPOLIS (for the ANT domain).
Definition: sico_vars.F90:35
subroutine sub_ice_shelf_melting_param(z_sl, i, j, Q_bm_floating)
Sub-ice-shelf melting parameterisation for Antarctica.
Declarations of global variables for SICOPOLIS.