SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
modi_glt_updasn_r.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 !GLT_LIC The GELATO model is a seaice model used in stand-alone or embedded mode.
6 !GLT_LIC It has been developed by Meteo-France. The holder of GELATO is Meteo-France.
7 !GLT_LIC
8 !GLT_LIC This software is governed by the CeCILL-C license under French law and biding
9 !GLT_LIC by the rules of distribution of free software. See the CeCILL-C_V1-en.txt
10 !GLT_LIC (English) and CeCILL-C_V1-fr.txt (French) for details. The CeCILL is a free
11 !GLT_LIC software license, explicitly compatible with the GNU GPL
12 !GLT_LIC (see http://www.gnu.org/licenses/license-list.en.html#CeCILL)
13 !GLT_LIC
14 !GLT_LIC The CeCILL-C licence agreement grants users the right to modify and re-use the
15 !GLT_LIC software governed by this free software license. The exercising of this right
16 !GLT_LIC is conditional upon the obligation to make available to the community the
17 !GLT_LIC modifications made to the source code of the software so as to contribute to
18 !GLT_LIC its evolution.
19 !GLT_LIC
20 !GLT_LIC In consideration of access to the source code and the rights to copy, modify
21 !GLT_LIC and redistribute granted by the license, users are provided only with a limited
22 !GLT_LIC warranty and the software's author, the holder of the economic rights, and the
23 !GLT_LIC successive licensors only have limited liability. In this respect, the risks
24 !GLT_LIC associated with loading, using, modifying and/or developing or reproducing the
25 !GLT_LIC software by the user are brought to the user's attention, given its Free
26 !GLT_LIC Software status, which may make it complicated to use, with the result that its
27 !GLT_LIC use is reserved for developers and experienced professionals having in-depth
28 !GLT_LIC computer knowledge. Users are therefore encouraged to load and test the
29 !GLT_LIC suitability of the software as regards their requirements in conditions enabling
30 !GLT_LIC the security of their systems and/or data to be ensured and, more generally, to
31 !GLT_LIC use and operate it in the same conditions of security.
32 !GLT_LIC
33 !GLT_LIC The GELATO sofware is cureently distibuted with the SURFEX software, available at
34 !GLT_LIC http://www.cnrm.meteo.fr/surfex. The fact that you download the software deemed that
35 !GLT_LIC you had knowledge of the CeCILL-C license and that you accept its terms.
36 !GLT_LIC Attempts to use this software in a way not complying with CeCILL-C license
37 !GLT_LIC may lead to prosecution.
38 !GLT_LIC
39 ! =======================================================================
40 ! ======================== MODULE modi_glt_updasn_r =========================
41 ! =======================================================================
42 !
43 ! Goal:
44 ! -----
45 ! This module contains a subroutine that is used to update snow
46 ! albedo, depending on wheather conditions.
47 !
48 ! IMPORTANT NOTICE: this routine should be placed just after the
49 ! vertical heat diffusion, before a correction on snow temperature
50 ! MAX( T_melt, T_snow) was applied.
51 !
52 ! Created : 2001/08 (D. Salas y Melia)
53 ! Taken out from thermo_ice, which used to do this job.
54 ! Modified: 2009/06 (D. Salas y Melia)
55 ! Reduced grid
56 ! Modified: 2010/02 (D. Salas y Melia)
57 ! - Rain is no longer considered here.
58 ! - bare thin ice albedo coefficients are adapted from
59 ! Flato and Brown (1996) - see also Curry et. al (2001)
60 ! - Douville et al. (1995) snow ageing parameterisations are
61 ! removed
62 ! Modified: 2012/01 (M. Chevallier & D. Salas y Melia)
63 ! A melt pond parameterization is included (updaponds_r).
64 !
65 ! IF THE MELT POND PARAMETERIZATION IS DISABLED:
66 !
67 ! *************** (3) snow cover: asn=asnow if hsnow>val else asi
68 !
69 ! ----___------__ (2.1 + 2.3) bare ice+melt ponds: asi=albimlt if
70 ! ice surface is melting, else asi=asi(hi)
71 !
72 ! IF THE MELT POND PARAMETERIZATION IS ENABLED:
73 !
74 ! *************** (3) snow cover: asn=asnow if hsnow>val else asi
75 !
76 ! ________ ___ (2.2) melt ponds: asi=fmp*abi + (1-fmp)*amp
77 ! --------------- (2.1) bare ice: asi=abi if ice surface is melting,
78 ! else asi=asi(hi)
79 !
80 ! --------------------- BEGIN MODULE modi_glt_updasn_r ----------------------
81 !
82 !THXS_SFX!MODULE modi_glt_updasn_r
83 !THXS_SFX!INTERFACE
84 !THXS_SFX!!
85 !THXS_SFX!SUBROUTINE glt_updasn_r( gsmelt,tpatm,tpblki,pvsp,tpsit,tpdia )
86 !THXS_SFX! USE modd_types_glt
87 !THXS_SFX! USE modd_glt_param
88 !THXS_SFX! LOGICAL, DIMENSION(nt,np), INTENT(in) :: &
89 !THXS_SFX! gsmelt
90 !THXS_SFX! TYPE(t_atm), DIMENSION(np), INTENT(in) :: &
91 !THXS_SFX! tpatm
92 !THXS_SFX! TYPE(t_blk), DIMENSION(nt,np), INTENT(in) :: &
93 !THXS_SFX! tpblki
94 !THXS_SFX! REAL, DIMENSION(nl,nt,np), INTENT(in) :: &
95 !THXS_SFX! pvsp
96 !THXS_SFX! TYPE(t_sit), DIMENSION(nt,np), INTENT(inout) :: &
97 !THXS_SFX! tpsit
98 !THXS_SFX! TYPE(t_dia), DIMENSION(np), INTENT(inout) :: &
99 !THXS_SFX! tpdia
100 !THXS_SFX!END SUBROUTINE glt_updasn_r
101 !THXS_SFX!!
102 !THXS_SFX!END INTERFACE
103 !THXS_SFX!END MODULE modi_glt_updasn_r
104 !
105 ! ---------------------- END MODULE modi_glt_updasn_r -----------------------
106 !
107 !
108 !
109 ! -----------------------------------------------------------------------
110 ! ------------------------- SUBROUTINE glt_updasn_r -------------------------
111 !
112 ! * Subroutine used to update snow albedo (takes into account snow or
113 ! thermodynamic surface melting).
114 ! * (ASN = Albedo SNow)
115 !
116 SUBROUTINE glt_updasn_r( gsmelt,tpatm,tpblki,pvsp,tpsit,tpdia )
117 !
119  USE modd_types_glt
120  USE modd_glt_param
121 !
122  IMPLICIT NONE
123 !
124  LOGICAL, DIMENSION(nt,np), INTENT(in) :: &
125  gsmelt
126  TYPE(t_atm), DIMENSION(np), INTENT(in) :: &
127  tpatm
128  TYPE(t_blk), DIMENSION(nt,np), INTENT(in) :: &
129  tpblki
130  REAL, DIMENSION(nl,nt,np), INTENT(in) :: &
131  pvsp
132  TYPE(t_sit), DIMENSION(nt,np), INTENT(inout) :: &
133  tpsit
134  TYPE(t_dia), DIMENSION(np), INTENT(inout) :: &
135  tpdia
136 !
137  LOGICAL, DIMENSION(nt,np) :: &
138  gsnmelt,gsimelt
139  REAL :: &
140  zhsicr
141  REAL, DIMENSION(np) :: &
142  zfsit
143  REAL, DIMENSION(nt,np) :: &
144  zpcps,zpcpr,zasi,zasn,zent0,zalf,zt
145 !
146 !
147 !
148 ! 1. Initializations
149 ! ==================
150 !
151 ! .. Compute critical thickness (where albedo parameterization for thin ice
152 ! reaches standard sea ice albedo)
153 !
154  zhsicr = ( ( albi-albw )/xalf1 )**( 1./xpow )
155 !
156 ! .. Initialize ancillary real arrays
157 !
158 ! Sea ice and snow albedo
159  zasi(:,:) = 0.
160  zasn(:,:) = 0.
161 !
162 ! Melting point gltools_enthalpy
163  zent0 = -cpsw*mu*pvsp(nilay,:,:)
164 !
165 ! .. Initialize sea ice and snow melting flags (criterion: as this routine is
166 ! placed just after the heat diffusion scheme, without any correction
167 ! on snow temperature, all slabs with T_snow > tice_m are melting)
168 !
169  gsnmelt = .false.
170  WHERE( tpsit(:,:)%hsn>=epsil1 .AND. gsmelt(:,:) )
171  gsnmelt(:,:) = .true.
172  ENDWHERE
173 !
174  gsimelt(:,:) = .false.
175  WHERE( tpsit(:,:)%hsi > 0.1 .AND. tpsit(:,:)%hsn < epsil1 .AND. gsmelt(:,:) )
176  gsimelt(:,:) = .true.
177  ENDWHERE
178 !
179 ! .. Compute the amount of fallen precipitation.
180 !
181  zpcps(:,:) = spread( tpatm(:)%sop,1,nt )
182  zpcpr(:,:) = spread( tpatm(:)%lip,1,nt )
183 !
184 !
185 !
186 ! 2. Compute the albedo of snow-free ice
187 ! ======================================
188 !
189 ! 2.1. Albedo of bare, non-melting sea ice (without ponds)
190 ! ---------------------------------------------------------
191 !
192 ! The ice-thickness dependence of bare sea ice albedo was eliminated in this version
193 ! While based on physical grounds for young sea ice, this thickness dependence is
194 ! clearly not valid for old, thinning sea ice.
195 ! The lower albedo of young sea ice is due to the fact this ice tends to be
196 ! rather translucid. However, the SW radiation transmission coefficient though
197 ! sea ice does not take into account the fact sea ice is more or less translucid.
198 ! Actually, this parameterization probably caused the sea ice to absorb too much
199 ! SW radiation.
200 ! So here we prefer simply assuming the albedo of melting sea ice is just equal to
201 ! a standard value (albi)
202 !
203 ! IF ( niceage==1 ) THEN
204 ! zalf(:,:) = EXP( - MAX( tpsit(:,:)%age/xmonth2sec-6.,0. ) )
205 ! ELSE
206 ! zalf(:,:) = 1.
207 ! ENDIF
208 ! zalf(:,:) = albyngi * zalf(:,:)
209 !!
210 ! WHERE( tpsit(:,:)%hsi<zhsicr )
211 ! zt(:,:) = tpsit(:,:)%hsi
212 ! zasi(:,:) = zalf(:,:) * ( xalf1*AMAX1( zt(:,:),0. )**xpow + albw ) + &
213 ! ( 1.-zalf(:,:) ) * albi
214 !!
215 !! .. No thermodynamic surface melting on thick ice without snow.
216 !! The albedo is set to bare ice albedo.
217 !!
218 ! ELSEWHERE
219 ! zasi(:,:) = albi
220 !!
221 ! ENDWHERE
222 !
223  zasi(:,:) = albi
224 !
225 !
226 ! 2.2. Albedo of bare, melting sea ice (pond parameterization is enabled)
227 ! ------------------------------------------------------------------------
228 !
229 ! .. Thermodynamic surface melting on ice without snow.
230 ! The albedo is set to melting ice albedo.
231 !
232  IF ( nmponds==1) THEN
233 ! .. Melt pond case: melting bare ice albedo is considered as a physical
234 ! constant (=0.65).
235 !
236  WHERE( gsimelt(:,:) )
237  zasi(:,:) = amin1( zasi(:,:),xalbareimlt )
238  ENDWHERE
239 ! .. Invoke the pond parameterization. The melting ice surface consists in a fraction (fmp)
240 ! covered with meltwater ponds, and in melting bare ice (1-fmp). This parameterization
241 ! updates the global melting ice albedo.
242 !
243  CALL gltools_updaponds_r(gsmelt,tpatm,tpblki,tpdia,tpsit,zasi)
244  ELSE
245 !
246 !
247 ! 2.3. Albedo of bare, melting sea ice (pond parameterization is disabled)
248 ! -------------------------------------------------------------------------
249 !
250 ! .. In this case, melting ice surface is a mix of melting bare ice and melt ponds.
251 ! Melting ice albedo is prescribed as a "tuning" parameter.
252  WHERE( gsimelt(:,:) )
253  zasi(:,:) = amin1( zasi(:,:),albimlt )
254  ENDWHERE
255 !
256  ENDIF
257 !
258 !
259 !
260 ! 3. Compute the albedo of the snow covered part of the ice
261 ! =========================================================
262 !
263 ! 3.1. Determine the initial snow albedo
264 ! --------------------------------------
265 !
266 ! .. Now compute albedo of the snow covered part of the ice slab from:
267 ! - initial averaged snow+bare ice albedo, tpsit%asn
268 ! - computed bare ice albedo, zasi
269 ! - snow thickness, tpsit%hsn
270 !
271  zt(:,:) = tpsit(:,:)%rsn*tpsit(:,:)%hsn / rhofw
272  zalf(:,:) = amin1( zt(:,:)/wnew,1. )
273 !
274 ! .. Snow cover albedo: melting and dry snow cases
275 !
276  WHERE( gsnmelt(:,:) )
277  zasn(:,:) = albsmlt
278  ELSEWHERE
279  zasn(:,:) = albsdry
280  ENDWHERE
281 !
282 !
283 ! 3.2. Case of new snow falls
284 ! ----------------------------
285 !
286 ! .. Snow accumulation : albedo is refreshed to its maximum value if
287 ! snow amount reaches a threshold wnew. If new snow thickness is less
288 ! than wnew, a linear combination of initial snow surface albedo and
289 ! maximum snow albedo gives new albedo.
290 !
291  WHERE ( zpcps(:,:)>zpcpr(:,:) )
292  zasn(:,:) = albsdry
293  ENDWHERE
294 !
295 !
296 !
297 ! 4. Weighted surface albedo (snow covered + bare ice parts of the slab)
298 ! =======================================================================
299 !
300 ! .. Now that albedos were computed both on a sea ice slab with and
301 ! without snow, the global surface albedo will be recomposed to take
302 ! into account the fact that a thin snow cover does not actually cover
303 ! the entire slab.
304 !
305  tpsit(:,:)%asn = &
306  zalf(:,:)*zasn(:,:) + (1.-zalf(:,:))*zasi(:,:)
307 !
308 ! .. For AR5 diagnostics: weighted bare sea ice albedo
309 ! Weights for final computation of the average bare ice albedo
310 ! [i.e. SUM(ftot)] must be incremented here, not where diagnostics
311 ! are writtenSUM(ftot))
312 ! The reason for this is that tpsit%fsi in the present routine would
313 ! not be consistent with total sea ice fraction in the diagnostics.
314 !
315 !* Accumulate sea ice fraction
316  zfsit(:) = sum( tpsit(:,:)%fsi, dim=1 )
317  tpdia(:)%aiw = tpdia(:)%aiw + zfsit(:)
318 !* Ice surface albedo (bare ice + melt ponds)
319  tpdia(:)%asi = sum( tpsit(:,:)%fsi*zasi(:,:),dim=1 )
320 !* Snow albedo: approximation (suppose zalf is generally close to 1)
321  tpdia(:)%asn = sum( tpsit(:,:)%fsi*zasn(:,:),dim=1 )
322 !
323 END SUBROUTINE glt_updasn_r
324 !
325 ! ---------------------- END SUBROUTINE glt_updasn_r ------------------------
326 ! -----------------------------------------------------------------------
subroutine glt_updasn_r(gsmelt, tpatm, tpblki, pvsp, tpsit, tpdia)
subroutine gltools_updaponds_r(omelt, tpatm, tpblki, tpdia, tpsit, pasi)