New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
icethd_pnd.F90 in NEMO/branches/2020/SI3_martin_ponds/src/ICE – NEMO

source: NEMO/branches/2020/SI3_martin_ponds/src/ICE/icethd_pnd.F90 @ 13909

Last change on this file since 13909 was 13909, checked in by vancop, 4 years ago

pond routine easy infrastructure part

  • Property svn:keywords set to Id
File size: 23.1 KB
Line 
1MODULE icethd_pnd 
2   !!======================================================================
3   !!                     ***  MODULE  icethd_pnd   ***
4   !!   sea-ice: Melt ponds on top of sea ice
5   !!======================================================================
6   !! history :       !  2012     (O. Lecomte)       Adaptation from Flocco and Turner
7   !!                 !  2017     (M. Vancoppenolle, O. Lecomte, C. Rousset) Implementation
8   !!            4.0  !  2018     (many people)      SI3 [aka Sea Ice cube]
9   !!----------------------------------------------------------------------
10#if defined key_si3
11   !!----------------------------------------------------------------------
12   !!   'key_si3' :                                     SI3 sea-ice model
13   !!----------------------------------------------------------------------
14   !!   ice_thd_pnd_init : some initialization and namelist read
15   !!   ice_thd_pnd      : main calling routine
16   !!----------------------------------------------------------------------
17   USE phycst         ! physical constants
18   USE dom_oce        ! ocean space and time domain
19   USE ice            ! sea-ice: variables
20   USE ice1D          ! sea-ice: thermodynamics variables
21   USE icetab         ! sea-ice: 1D <==> 2D transformation
22   USE sbc_ice        ! surface energy budget
23   !
24   USE in_out_manager ! I/O manager
25   USE iom            ! I/O manager library
26   USE lib_mpp        ! MPP library
27   USE lib_fortran    ! fortran utilities (glob_sum + no signed zero)
28   USE timing         ! Timing
29
30   IMPLICIT NONE
31   PRIVATE
32
33   PUBLIC   ice_thd_pnd_init    ! routine called by icestp.F90
34   PUBLIC   ice_thd_pnd         ! routine called by icestp.F90
35
36   INTEGER ::              nice_pnd    ! choice of the type of pond scheme
37   !                                   ! associated indices:
38   INTEGER, PARAMETER ::   np_pndNO  = 0   ! No pond scheme
39   INTEGER, PARAMETER ::   np_pndCST = 1   ! Constant ice pond scheme
40   INTEGER, PARAMETER ::   np_pndLEV = 2   ! Level ice pond scheme
41   INTEGER, PARAMETER ::   np_pndTOPO = 3   ! Level ice pond scheme
42
43   REAL(wp), PARAMETER :: &   ! shared parameters for topographic melt ponds
44      zhi_min = 0.1_wp        , & ! minimum ice thickness with ponds (m)
45      zTd     = 0.15_wp       , & ! temperature difference for freeze-up (C)
46      zvp_min = 1.e-4_wp          ! minimum pond volume (m)
47
48   !--------------------------------------------------------------------------
49   !
50   ! Pond volume per area budget diags
51   
52   ! The idea of diags is the volume of ponds per grid cell area is
53   !
54   ! dV/dt = mlt + drn + lid + rnf
55   ! mlt   = input from surface melting
56   ! drn   = drainage through brine network
57   ! lid   = lid growth & melt
58   ! rnf   = runoff (water directly removed out of surface melting + overflow)
59   !
60   ! In topo mode, the pond water lost because it is in the snow is not included in the budget
61   !
62   ! In level mode, all terms are incorporated
63
64   REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: & ! pond volume budget diagnostics
65      diag_dvpn_mlt,  &     !! meltwater pond volume input      [m/day]
66      diag_dvpn_drn,  &     !! pond volume lost by drainage     [m/day]
67      diag_dvpn_lid,  &     !! exchange with lid / refreezing   [m/day]
68      diag_dvpn_rnf         !! meltwater pond lost to runoff    [m/day]
69     
70   REAL(wp), ALLOCATABLE, DIMENSION(:) ::   & ! pond volume budget diagnostics (1d)
71      diag_dvpn_mlt_1d,  &  !! meltwater pond volume input      [m/day]
72      diag_dvpn_drn_1d,  &  !! pond volume lost by drainage     [m/day]
73      diag_dvpn_lid_1d,  &  !! exchange with lid / refreezing   [m/day]
74      diag_dvpn_rnf_1d      !! meltwater pond lost to runoff    [m/day]
75   !
76
77   !!----------------------------------------------------------------------
78   !! NEMO/ICE 4.0 , NEMO Consortium (2018)
79   !! $Id$
80   !! Software governed by the CeCILL license (see ./LICENSE)
81   !!----------------------------------------------------------------------
82CONTAINS
83
84   SUBROUTINE ice_thd_pnd
85
86      !!-------------------------------------------------------------------
87      !!               ***  ROUTINE ice_thd_pnd   ***
88      !!               
89      !! ** Purpose :   change melt pond fraction and thickness
90      !!
91      !! Note: Melt ponds affect only radiative transfer for now
92      !!
93      !!       No heat, no salt.
94      !!       The melt water they carry is collected but
95      !!       not removed from fw budget or released to the ocean
96      !!
97      !!       A wfx_pnd has been coded for diagnostic purposes
98      !!       It is not fully consistent yet.
99      !!
100      !!       The current diagnostic lacks a contribution from drainage
101      !!
102      !!-------------------------------------------------------------------
103      !!
104     
105      ALLOCATE( diag_dvpn_mlt(jpi,jpj), diag_dvpn_lid(jpi,jpj), diag_dvpn_drn(jpi,jpj), diag_dvpn_rnf(jpi,jpj) )
106      ALLOCATE( diag_dvpn_mlt_1d(jpij), diag_dvpn_lid_1d(jpij), diag_dvpn_drn_1d(jpij), diag_dvpn_rnf_1d(jpij) )
107
108      diag_dvpn_mlt(:,:) = 0._wp    ;   diag_dvpn_drn(:,:)  = 0._wp
109      diag_dvpn_lid(:,:) = 0._wp    ;   diag_dvpn_rnf(:,:)  = 0._wp
110      diag_dvpn_mlt_1d(:) = 0._wp   ;   diag_dvpn_drn_1d(:) = 0._wp
111      diag_dvpn_lid_1d(:) = 0._wp   ;   diag_dvpn_rnf_1d(:) = 0._wp
112
113      SELECT CASE ( nice_pnd )
114      !
115      CASE (np_pndCST)   ;   CALL pnd_CST                              !==  Constant melt ponds  ==!
116         !
117      CASE (np_pndLEV)   ;   CALL pnd_LEV                              !==  Level ice melt ponds  ==!
118         !
119      CASE (np_pndTOPO)  ;   CALL pnd_TOPO                             !==  Topographic melt ponds  ==!
120         !
121      END SELECT
122      !
123
124      IF( iom_use('dvpn_mlt'  ) )   CALL iom_put( 'dvpn_mlt', diag_dvpn_mlt * 100._wp * 86400._wp ) ! input from melting
125      IF( iom_use('dvpn_lid'  ) )   CALL iom_put( 'dvpn_lid', diag_dvpn_lid * 100._wp * 86400._wp ) ! exchanges with lid
126      IF( iom_use('dvpn_drn'  ) )   CALL iom_put( 'dvpn_drn', diag_dvpn_drn * 100._wp * 86400._wp ) ! vertical drainage
127      IF( iom_use('dvpn_rnf'  ) )   CALL iom_put( 'dvpn_rnf', diag_dvpn_rnf * 100._wp * 86400._wp ) ! runoff + overflow
128
129      DEALLOCATE( diag_dvpn_mlt, diag_dvpn_lid, diag_dvpn_drn, diag_dvpn_rnf )
130      DEALLOCATE( diag_dvpn_mlt_1d, diag_dvpn_lid_1d, diag_dvpn_drn_1d, diag_dvpn_rnf_1d )
131     
132   END SUBROUTINE ice_thd_pnd 
133
134
135
136   SUBROUTINE pnd_CST 
137      !!-------------------------------------------------------------------
138      !!                ***  ROUTINE pnd_CST  ***
139      !!
140      !! ** Purpose :   Compute melt pond evolution
141      !!
142      !! ** Method  :   Melt pond fraction and thickness are prescribed
143      !!                to non-zero values when t_su = 0C
144      !!
145      !! ** Tunable parameters : pond fraction (rn_apnd), pond depth (rn_hpnd)
146      !!               
147      !! ** Note   : Coupling with such melt ponds is only radiative
148      !!             Advection, ridging, rafting... are bypassed
149      !!
150      !! ** References : Bush, G.W., and Trump, D.J. (2017)
151      !!-------------------------------------------------------------------
152      INTEGER  ::   ji        ! loop indices
153      !!-------------------------------------------------------------------
154      DO ji = 1, npti
155         !
156         IF( a_i_1d(ji) > 0._wp .AND. t_su_1d(ji) >= rt0 ) THEN
157            h_ip_1d(ji)      = rn_hpnd   
158            a_ip_1d(ji)      = rn_apnd * a_i_1d(ji)
159            h_il_1d(ji)      = 0._wp    ! no pond lids whatsoever
160         ELSE
161            h_ip_1d(ji)      = 0._wp   
162            a_ip_1d(ji)      = 0._wp
163            h_il_1d(ji)      = 0._wp
164         ENDIF
165         !
166      END DO
167      !
168   END SUBROUTINE pnd_CST
169
170
171   SUBROUTINE pnd_LEV
172      !!-------------------------------------------------------------------
173      !!                ***  ROUTINE pnd_LEV  ***
174      !!
175      !! ** Purpose : Compute melt pond evolution
176      !!
177      !! ** Method  : A fraction of meltwater is accumulated in ponds and sent to ocean when surface is freezing
178      !!              We  work with volumes and then redistribute changes into thickness and concentration
179      !!              assuming linear relationship between the two.
180      !!
181      !! ** Action  : - pond growth:      Vp = Vp + dVmelt                                          --- from Holland et al 2012 ---
182      !!                                     dVmelt = (1-r)/rhow * ( rhoi*dh_i + rhos*dh_s ) * a_i
183      !!                                        dh_i  = meltwater from ice surface melt
184      !!                                        dh_s  = meltwater from snow melt
185      !!                                        (1-r) = fraction of melt water that is not flushed
186      !!
187      !!              - limtations:       a_ip must not exceed (1-r)*a_i
188      !!                                  h_ip must not exceed 0.5*h_i
189      !!
190      !!              - pond shrinking:
191      !!                       if lids:   Vp = Vp -dH * a_ip
192      !!                                     dH = lid thickness change. Retrieved from this eq.:    --- from Flocco et al 2010 ---
193      !!
194      !!                                                                   rhoi * Lf * dH/dt = ki * MAX(Tp-Tsu,0) / H
195      !!                                                                      H = lid thickness
196      !!                                                                      Lf = latent heat of fusion
197      !!                                                                      Tp = -2C
198      !!
199      !!                                                                And solved implicitely as:
200      !!                                                                   H(t+dt)**2 -H(t) * H(t+dt) -ki * (Tp-Tsu) * dt / (rhoi*Lf) = 0
201      !!
202      !!                    if no lids:   Vp = Vp * exp(0.01*MAX(Tp-Tsu,0)/Tp)                      --- from Holland et al 2012 ---
203      !!
204      !!              - Flushing:         w = -perm/visc * rho_oce * grav * Hp / Hi                 --- from Flocco et al 2007 ---
205      !!                                     perm = permability of sea-ice
206      !!                                     visc = water viscosity
207      !!                                     Hp   = height of top of the pond above sea-level
208      !!                                     Hi   = ice thickness thru which there is flushing
209      !!
210      !!              - Corrections:      remove melt ponds when lid thickness is 10 times the pond thickness
211      !!
212      !!              - pond thickness and area is retrieved from pond volume assuming a linear relationship between h_ip and a_ip:
213      !!                                  a_ip/a_i = a_ip_frac = h_ip / zaspect
214      !!
215      !! ** Tunable parameters : ln_pnd_lids, rn_apnd_max, rn_apnd_min
216      !!
217      !! ** Note       :   mostly stolen from CICE
218      !!
219      !! ** References :   Flocco and Feltham (JGR, 2007)
220      !!                   Flocco et al       (JGR, 2010)
221      !!                   Holland et al      (J. Clim, 2012)
222      !!-------------------------------------------------------------------
223      REAL(wp), DIMENSION(nlay_i) ::   ztmp           ! temporary array
224      !!
225      REAL(wp), PARAMETER ::   zaspect =  0.8_wp      ! pond aspect ratio
226      REAL(wp), PARAMETER ::   zTp     = -2._wp       ! reference temperature
227      REAL(wp), PARAMETER ::   zvisc   =  1.79e-3_wp  ! water viscosity
228      !!
229      REAL(wp) ::   zfr_mlt, zdv_mlt                  ! fraction and volume of available meltwater retained for melt ponding
230      REAL(wp) ::   zdv_frz, zdv_flush                ! Amount of melt pond that freezes, flushes
231      REAL(wp) ::   zhp                               ! heigh of top of pond lid wrt ssh
232      REAL(wp) ::   zv_ip_max                         ! max pond volume allowed
233      REAL(wp) ::   zdT                               ! zTp-t_su
234      REAL(wp) ::   zsbr                              ! Brine salinity
235      REAL(wp) ::   zperm                             ! permeability of sea ice
236      REAL(wp) ::   zfac, zdum                        ! temporary arrays
237      REAL(wp) ::   z1_rhow, z1_aspect, z1_Tp         ! inverse
238      !!
239      INTEGER  ::   ji, jk                            ! loop indices
240      !!-------------------------------------------------------------------
241      z1_rhow   = 1._wp / rhow 
242      z1_aspect = 1._wp / zaspect
243      z1_Tp     = 1._wp / zTp 
244
245      DO ji = 1, npti
246         !                                                            !----------------------------------------------------!
247         IF( h_i_1d(ji) < rn_himin .OR. a_i_1d(ji) < epsi10 ) THEN    ! Case ice thickness < rn_himin or tiny ice fraction !
248            !                                                         !----------------------------------------------------!
249            !--- Remove ponds on thin ice or tiny ice fractions
250            a_ip_1d(ji)      = 0._wp
251            h_ip_1d(ji)      = 0._wp
252            h_il_1d(ji)      = 0._wp
253            !                                                         !--------------------------------!
254         ELSE                                                         ! Case ice thickness >= rn_himin !
255            !                                                         !--------------------------------!
256            v_ip_1d(ji) = h_ip_1d(ji) * a_ip_1d(ji)   ! retrieve volume from thickness
257            v_il_1d(ji) = h_il_1d(ji) * a_ip_1d(ji)
258            !
259            !------------------!
260            ! case ice melting !
261            !------------------!
262            !
263            !--- available meltwater for melt ponding ---!
264            zdum    = -( dh_i_sum(ji)*rhoi + dh_s_mlt(ji)*rhos ) * z1_rhow * a_i_1d(ji)
265            zfr_mlt = rn_apnd_min + ( rn_apnd_max - rn_apnd_min ) * at_i_1d(ji) !  = ( 1 - r ) = fraction of melt water that is not flushed
266            zdv_mlt = MAX( 0._wp, zfr_mlt * zdum ) ! max for roundoff errors?
267            !
268            !--- overflow ---!
269            ! If pond area exceeds zfr_mlt * a_i_1d(ji) then reduce the pond volume
270            !    a_ip_max = zfr_mlt * a_i
271            !    => from zaspect = h_ip / (a_ip / a_i), set v_ip_max as:
272            zv_ip_max = zfr_mlt**2 * a_i_1d(ji) * zaspect
273            zdv_mlt = MAX( 0._wp, MIN( zdv_mlt, zv_ip_max - v_ip_1d(ji) ) )
274
275            ! If pond depth exceeds half the ice thickness then reduce the pond volume
276            !    h_ip_max = 0.5 * h_i
277            !    => from zaspect = h_ip / (a_ip / a_i), set v_ip_max as:
278            zv_ip_max = z1_aspect * a_i_1d(ji) * 0.25 * h_i_1d(ji) * h_i_1d(ji)
279            zdv_mlt = MAX( 0._wp, MIN( zdv_mlt, zv_ip_max - v_ip_1d(ji) ) )
280           
281            !--- Pond growing ---!
282            v_ip_1d(ji) = v_ip_1d(ji) + zdv_mlt
283            !
284            !--- Lid melting ---!
285            IF( ln_pnd_lids )   v_il_1d(ji) = MAX( 0._wp, v_il_1d(ji) - zdv_mlt ) ! must be bounded by 0
286            !
287            !--- mass flux ---!
288            IF( zdv_mlt > 0._wp ) THEN
289               zfac = zdv_mlt * rhow * r1_Dt_ice                        ! melt pond mass flux < 0 [kg.m-2.s-1]
290               wfx_pnd_1d(ji) = wfx_pnd_1d(ji) - zfac
291               !
292               zdum = zfac / ( wfx_snw_sum_1d(ji) + wfx_sum_1d(ji) )    ! adjust ice/snow melting flux > 0 to balance melt pond flux
293               wfx_snw_sum_1d(ji) = wfx_snw_sum_1d(ji) * (1._wp + zdum)
294               wfx_sum_1d(ji)     = wfx_sum_1d(ji)     * (1._wp + zdum)
295            ENDIF
296
297            !-------------------!
298            ! case ice freezing ! i.e. t_su_1d(ji) < (zTp+rt0)
299            !-------------------!
300            !
301            zdT = MAX( zTp+rt0 - t_su_1d(ji), 0._wp )
302            !
303            !--- Pond contraction (due to refreezing) ---!
304            IF( ln_pnd_lids ) THEN
305               !
306               !--- Lid growing and subsequent pond shrinking ---!
307               zdv_frz = 0.5_wp * MAX( 0._wp, -v_il_1d(ji) + & ! Flocco 2010 (eq. 5) solved implicitly as aH**2 + bH + c = 0
308                  &                    SQRT( v_il_1d(ji)**2 + a_ip_1d(ji)**2 * 4._wp * rcnd_i * zdT * rdt_ice / (rLfus * rhow) ) ) ! max for roundoff errors
309               
310               ! Lid growing
311               v_il_1d(ji) = MAX( 0._wp, v_il_1d(ji) + zdv_frz )
312               
313               ! Pond shrinking
314               v_ip_1d(ji) = MAX( 0._wp, v_ip_1d(ji) - zdv_frz )
315
316            ELSE
317               ! Pond shrinking
318               v_ip_1d(ji) = v_ip_1d(ji) * EXP( 0.01_wp * zdT * z1_Tp ) ! Holland 2012 (eq. 6)
319            ENDIF
320            !
321            !--- Set new pond area and depth ---! assuming linear relation between h_ip and a_ip_frac
322            ! v_ip     = h_ip * a_ip
323            ! a_ip/a_i = a_ip_frac = h_ip / zaspect (cf Holland 2012, fitting SHEBA so that knowing v_ip we can distribute it to a_ip and h_ip)
324            a_ip_1d(ji)      = MIN( a_i_1d(ji), SQRT( v_ip_1d(ji) * z1_aspect * a_i_1d(ji) ) ) ! make sure a_ip < a_i
325            h_ip_1d(ji)      = zaspect * a_ip_1d(ji) / a_i_1d(ji)
326
327            !---------------!           
328            ! Pond flushing !
329            !---------------!
330            ! height of top of the pond above sea-level
331            zhp = ( h_i_1d(ji) * ( rho0 - rhoi ) + h_ip_1d(ji) * ( rho0 - rhow * a_ip_1d(ji) / a_i_1d(ji) ) ) * r1_rho0
332           
333            ! Calculate the permeability of the ice (Assur 1958, see Flocco 2010)
334            DO jk = 1, nlay_i
335               zsbr = - 1.2_wp                                  &
336                  &   - 21.8_wp    * ( t_i_1d(ji,jk) - rt0 )    &
337                  &   - 0.919_wp   * ( t_i_1d(ji,jk) - rt0 )**2 &
338                  &   - 0.0178_wp  * ( t_i_1d(ji,jk) - rt0 )**3
339               ztmp(jk) = sz_i_1d(ji,jk) / zsbr
340            END DO
341            zperm = MAX( 0._wp, 3.e-08_wp * MINVAL(ztmp)**3 )
342           
343            ! Do the drainage using Darcy's law
344            zdv_flush   = -zperm * rho0 * grav * zhp * rdt_ice / (zvisc * h_i_1d(ji)) * a_ip_1d(ji)
345            zdv_flush   = MAX( zdv_flush, -v_ip_1d(ji) )
346            v_ip_1d(ji) = v_ip_1d(ji) + zdv_flush
347           
348            !--- Set new pond area and depth ---! assuming linear relation between h_ip and a_ip_frac
349            a_ip_1d(ji)      = MIN( a_i_1d(ji), SQRT( v_ip_1d(ji) * z1_aspect * a_i_1d(ji) ) ) ! make sure a_ip < a_i
350            h_ip_1d(ji)      = zaspect * a_ip_1d(ji) / a_i_1d(ji)
351
352            !--- Corrections and lid thickness ---!
353            IF( ln_pnd_lids ) THEN
354               !--- retrieve lid thickness from volume ---!
355               IF( a_ip_1d(ji) > epsi10 ) THEN   ;   h_il_1d(ji) = v_il_1d(ji) / a_ip_1d(ji)
356               ELSE                              ;   h_il_1d(ji) = 0._wp
357               ENDIF
358               !--- remove ponds if lids are much larger than ponds ---!
359               IF ( h_il_1d(ji) > h_ip_1d(ji) * 10._wp ) THEN
360                  a_ip_1d(ji)      = 0._wp
361                  h_ip_1d(ji)      = 0._wp
362                  h_il_1d(ji)      = 0._wp
363               ENDIF
364            ENDIF
365            !
366         ENDIF
367         
368      END DO
369      !
370   END SUBROUTINE pnd_LEV
371
372
373   SUBROUTINE ice_thd_pnd_init 
374      !!-------------------------------------------------------------------
375      !!                  ***  ROUTINE ice_thd_pnd_init   ***
376      !!
377      !! ** Purpose : Physical constants and parameters linked to melt ponds
378      !!              over sea ice
379      !!
380      !! ** Method  :  Read the namthd_pnd  namelist and check the melt pond 
381      !!               parameter values called at the first timestep (nit000)
382      !!
383      !! ** input   :   Namelist namthd_pnd 
384      !!-------------------------------------------------------------------
385      INTEGER  ::   ios, ioptio   ! Local integer
386      !!
387      NAMELIST/namthd_pnd/  ln_pnd, ln_pnd_LEV , rn_apnd_min, rn_apnd_max, rn_pnd_flush, &
388         &                          ln_pnd_CST , rn_apnd, rn_hpnd,         &
389         &                          ln_pnd_TOPO,                           &
390         &                          ln_pnd_lids, ln_pnd_alb
391      !!-------------------------------------------------------------------
392      !
393      READ  ( numnam_ice_ref, namthd_pnd, IOSTAT = ios, ERR = 901)
394901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namthd_pnd  in reference namelist' )
395      READ  ( numnam_ice_cfg, namthd_pnd, IOSTAT = ios, ERR = 902 )
396902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namthd_pnd in configuration namelist' )
397      IF(lwm) WRITE ( numoni, namthd_pnd )
398      !
399      IF(lwp) THEN                        ! control print
400         WRITE(numout,*)
401         WRITE(numout,*) 'ice_thd_pnd_init: ice parameters for melt ponds'
402         WRITE(numout,*) '~~~~~~~~~~~~~~~~'
403         WRITE(numout,*) '   Namelist namicethd_pnd:'
404         WRITE(numout,*) '      Melt ponds activated or not                                 ln_pnd       = ', ln_pnd
405         WRITE(numout,*) '         Topographic melt pond scheme                             ln_pnd_TOPO  = ', ln_pnd_TOPO
406         WRITE(numout,*) '         Level ice melt pond scheme                               ln_pnd_LEV   = ', ln_pnd_LEV
407         WRITE(numout,*) '            Minimum ice fraction that contributes to melt ponds   rn_apnd_min  = ', rn_apnd_min
408         WRITE(numout,*) '            Maximum ice fraction that contributes to melt ponds   rn_apnd_max  = ', rn_apnd_max
409         WRITE(numout,*) '            Pond flushing efficiency                              rn_pnd_flush = ', rn_pnd_flus
410         WRITE(numout,*) '         Constant ice melt pond scheme                            ln_pnd_CST   = ', ln_pnd_CST
411         WRITE(numout,*) '            Prescribed pond fraction                              rn_apnd      = ', rn_apnd
412         WRITE(numout,*) '            Prescribed pond depth                                 rn_hpnd      = ', rn_hpnd
413         WRITE(numout,*) '         Frozen lids on top of melt ponds                         ln_pnd_lids  = ', ln_pnd_lids
414         WRITE(numout,*) '         Melt ponds affect albedo or not                          ln_pnd_alb   = ', ln_pnd_alb
415      ENDIF
416      !
417      !                             !== set the choice of ice pond scheme ==!
418      ioptio = 0
419      IF( .NOT.ln_pnd ) THEN   ;   ioptio = ioptio + 1   ;   nice_pnd = np_pndNO     ;   ENDIF
420      IF( ln_pnd_CST  ) THEN   ;   ioptio = ioptio + 1   ;   nice_pnd = np_pndCST    ;   ENDIF
421      IF( ln_pnd_LEV  ) THEN   ;   ioptio = ioptio + 1   ;   nice_pnd = np_pndLEV    ;   ENDIF
422      IF( ln_pnd_TOPO ) THEN   ;   ioptio = ioptio + 1   ;   nice_pnd = np_pndTOPO   ;   ENDIF
423      IF( ioptio /= 1 )   &
424         & CALL ctl_stop( 'ice_thd_pnd_init: choose either none (ln_pnd=F) or only one pond scheme (ln_pnd_LEV, ln_pnd_CST or ln_pnd_TOPO)' )
425      !
426      SELECT CASE( nice_pnd )
427      CASE( np_pndNO )         
428         IF( ln_pnd_alb  ) THEN ; ln_pnd_alb  = .FALSE. ; CALL ctl_warn( 'ln_pnd_alb=false when no ponds' )  ; ENDIF
429         IF( ln_pnd_lids ) THEN ; ln_pnd_lids = .FALSE. ; CALL ctl_warn( 'ln_pnd_lids=false when no ponds' ) ; ENDIF
430      CASE( np_pndCST )         
431         IF( ln_pnd_lids ) THEN ; ln_pnd_lids = .FALSE. ; CALL ctl_warn( 'ln_pnd_lids=false when constant ponds' ) ; ENDIF
432      END SELECT
433      !
434   END SUBROUTINE ice_thd_pnd_init
435   
436#else
437   !!----------------------------------------------------------------------
438   !!   Default option          Empty module          NO SI3 sea-ice model
439   !!----------------------------------------------------------------------
440#endif 
441
442   !!======================================================================
443END MODULE icethd_pnd 
Note: See TracBrowser for help on using the repository browser.