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_zdf_bl99.F90 in NEMO/branches/2018/dev_r10190_ice_thd_zdf/src/ICE – NEMO

source: NEMO/branches/2018/dev_r10190_ice_thd_zdf/src/ICE/icethd_zdf_bl99.F90 @ 13121

Last change on this file since 13121 was 10193, checked in by andmirek, 6 years ago

Ticket #2139 new approach

  • Property svn:keywords set to Id
File size: 41.1 KB
Line 
1MODULE icethd_zdf_BL99
2   !!======================================================================
3   !!                       ***  MODULE icethd_zdf_BL99 ***
4   !!   sea-ice: vertical heat diffusion in sea ice (computation of temperatures)
5   !!======================================================================
6   !! History :       !  2003-02  (M. Vancoppenolle) original 1D code
7   !!                 !  2005-06  (M. Vancoppenolle) 3d version
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_zdf_BL99 : vertical diffusion computation
15   !!----------------------------------------------------------------------
16   USE dom_oce        ! ocean space and time domain
17   USE phycst         ! physical constants (ocean directory)
18   USE ice            ! sea-ice: variables
19   USE ice1D          ! sea-ice: thermodynamics variables
20   USE icevar         ! sea-ice: operations
21   !
22   USE in_out_manager ! I/O manager
23   USE lib_mpp        ! MPP library
24   USE lib_fortran    ! fortran utilities (glob_sum + no signed zero)
25
26   IMPLICIT NONE
27   PRIVATE
28
29   PUBLIC   ice_thd_zdf_BL99   ! called by icethd_zdf
30
31   !!----------------------------------------------------------------------
32   !! NEMO/ICE 4.0 , NEMO Consortium (2018)
33   !! $Id$
34   !! Software governed by the CeCILL license (see ./LICENSE)
35   !!----------------------------------------------------------------------
36CONTAINS
37
38   SUBROUTINE ice_thd_zdf_BL99( k_jules )
39      !!-------------------------------------------------------------------
40      !!                ***  ROUTINE ice_thd_zdf_BL99  ***
41      !!
42      !! ** Purpose : computes the time evolution of snow and sea-ice temperature
43      !!              profiles, using the original Bitz and Lipscomb (1999) algorithm
44      !!
45      !! ** Method  : solves the heat equation diffusion with a Neumann boundary
46      !!              condition at the surface and a Dirichlet one at the bottom.
47      !!              Solar radiation is partially absorbed into the ice.
48      !!              The specific heat and thermal conductivities depend on ice
49      !!              salinity and temperature to take into account brine pocket   
50      !!              melting. The numerical scheme is an iterative Crank-Nicolson
51      !!              on a non-uniform multilayer grid in the ice and snow system.
52      !!
53      !!           The successive steps of this routine are
54      !!           1.  initialization of ice-snow layers thicknesses
55      !!           2.  Internal absorbed and transmitted radiation
56      !!           Then iterative procedure begins
57      !!           3.  Thermal conductivity
58      !!           4.  Kappa factors
59      !!           5.  specific heat in the ice
60      !!           6.  eta factors
61      !!           7.  surface flux computation
62      !!           8.  tridiagonal system terms
63      !!           9.  solving the tridiagonal system with Gauss elimination
64      !!           Iterative procedure ends according to a criterion on evolution
65      !!           of temperature
66      !!           10. Fluxes at the interfaces
67      !!
68      !! ** Inputs / Ouputs : (global commons)
69      !!           surface temperature              : t_su_1d
70      !!           ice/snow temperatures            : t_i_1d, t_s_1d
71      !!           ice salinities                   : sz_i_1d
72      !!           number of layers in the ice/snow : nlay_i, nlay_s
73      !!           total ice/snow thickness         : h_i_1d, h_s_1d
74      !!-------------------------------------------------------------------
75      INTEGER, INTENT(in) ::   k_jules     ! Jules coupling (0=OFF, 1=EMULATED, 2=ACTIVE)
76      !
77      INTEGER ::   ji, jk         ! spatial loop index
78      INTEGER ::   jm             ! current reference number of equation
79      INTEGER ::   jm_mint, jm_maxt
80      INTEGER ::   iconv          ! number of iterations in iterative procedure
81      INTEGER ::   iconv_max = 50 ! max number of iterations in iterative procedure
82      !
83      INTEGER, DIMENSION(jpij) ::   jm_min    ! reference number of top equation
84      INTEGER, DIMENSION(jpij) ::   jm_max    ! reference number of bottom equation
85      !
86      REAL(wp) ::   zg1s      =  2._wp        ! for the tridiagonal system
87      REAL(wp) ::   zg1       =  2._wp        !
88      REAL(wp) ::   zgamma    =  18009._wp    ! for specific heat
89      REAL(wp) ::   zbeta     =  0.117_wp     ! for thermal conductivity (could be 0.13)
90      REAL(wp) ::   zraext_s  =  10._wp       ! extinction coefficient of radiation in the snow
91      REAL(wp) ::   zkimin    =  0.10_wp      ! minimum ice thermal conductivity
92      REAL(wp) ::   ztsu_err  =  1.e-5_wp     ! range around which t_su is considered at 0C
93      REAL(wp) ::   zdti_bnd  =  1.e-4_wp     ! maximal authorized error on temperature
94      REAL(wp) ::   zhs_min   =  0.01_wp      ! minimum snow thickness for conductivity calculation
95      REAL(wp) ::   ztmelts                   ! ice melting temperature
96      REAL(wp) ::   zdti_max                  ! current maximal error on temperature
97      REAL(wp) ::   zcpi                      ! Ice specific heat
98      REAL(wp) ::   zhfx_err, zdq             ! diag errors on heat
99      REAL(wp) ::   zfac                      ! dummy factor
100      !
101      REAL(wp), DIMENSION(jpij) ::   isnow        ! switch for presence (1) or absence (0) of snow
102      REAL(wp), DIMENSION(jpij) ::   ztsub        ! surface temperature at previous iteration
103      REAL(wp), DIMENSION(jpij) ::   zh_i, z1_h_i ! ice layer thickness
104      REAL(wp), DIMENSION(jpij) ::   zh_s, z1_h_s ! snow layer thickness
105      REAL(wp), DIMENSION(jpij) ::   zqns_ice_b   ! solar radiation absorbed at the surface
106      REAL(wp), DIMENSION(jpij) ::   zfnet        ! surface flux function
107      REAL(wp), DIMENSION(jpij) ::   zdqns_ice_b  ! derivative of the surface flux function
108      !
109      REAL(wp), DIMENSION(jpij       )     ::   ztsuold     ! Old surface temperature in the ice
110      REAL(wp), DIMENSION(nlay_i, jpij)     ::   ztiold      ! Old temperature in the ice
111      REAL(wp), DIMENSION(nlay_s, jpij)     ::   ztsold      ! Old temperature in the snow
112      REAL(wp), DIMENSION(nlay_i, jpij)     ::   ztib        ! Temporary temperature in the ice to check the convergence
113      REAL(wp), DIMENSION(nlay_s, jpij)     ::   ztsb        ! Temporary temperature in the snow to check the convergence
114      REAL(wp), DIMENSION(0:nlay_i, jpij)   ::   ztcond_i    ! Ice thermal conductivity
115      REAL(wp), DIMENSION(jpij, 0:nlay_i)   ::   zradtr_i    ! Radiation transmitted through the ice
116      REAL(wp), DIMENSION(0:nlay_i, jpij)   ::   zradab_i    ! Radiation absorbed in the ice
117      REAL(wp), DIMENSION(0:nlay_i, jpij)   ::   zkappa_i    ! Kappa factor in the ice
118      REAL(wp), DIMENSION(0:nlay_i, jpij)   ::   zeta_i      ! Eta factor in the ice
119      REAL(wp), DIMENSION(jpij,0:nlay_s)   ::   zradtr_s    ! Radiation transmited through the snow
120      REAL(wp), DIMENSION(0:nlay_s, jpij)   ::   zradab_s    ! Radiation absorbed in the snow
121      REAL(wp), DIMENSION(0:nlay_s, jpij)   ::   zkappa_s    ! Kappa factor in the snow
122      REAL(wp), DIMENSION(0:nlay_s, jpij)   ::   zeta_s      ! Eta factor in the snow
123      REAL(wp), DIMENSION(nlay_i+3, jpij)   ::   zindterm    ! 'Ind'ependent term
124      REAL(wp), DIMENSION(nlay_i+3, jpij)   ::   zindtbis    ! Temporary 'ind'ependent term
125      REAL(wp), DIMENSION(nlay_i+3, jpij)   ::   zdiagbis    ! Temporary 'dia'gonal term
126      REAL(wp), DIMENSION(3, nlay_i+3, jpij)::   ztrid       ! Tridiagonal system terms
127      REAL(wp), DIMENSION(jpij)            ::   zq_ini      ! diag errors on heat
128      REAL(wp), DIMENSION(jpij)            ::   zghe        ! G(he), th. conduct enhancement factor, mono-cat
129      REAL(wp), DIMENSION(nlay_i, jpij)     ::   tt_i_1d, tsz_i_1d
130      REAL(wp), DIMENSION(nlay_s, jpij)     ::   tt_s_1d
131      !
132      ! Mono-category
133      REAL(wp) ::   zepsilon   ! determines thres. above which computation of G(h) is done
134      REAL(wp) ::   zhe        ! dummy factor
135      REAL(wp) ::   zcnd_i     ! mean sea ice thermal conductivity
136      INTEGER  ::   itot
137      LOGICAL, DIMENSION(jpij)  ::   liter
138      !!------------------------------------------------------------------     
139      itot = npti
140      ! --- diag error on heat diffusion - PART 1 --- !
141      DO ji = 1, npti
142         zq_ini(ji) = ( SUM( e_i_1d(ji,1:nlay_i) ) * h_i_1d(ji) * r1_nlay_i +  &
143            &           SUM( e_s_1d(ji,1:nlay_s) ) * h_s_1d(ji) * r1_nlay_s ) 
144      END DO
145
146      !------------------
147      ! 1) Initialization
148      !------------------
149      DO ji = 1, npti
150         isnow(ji) = 1._wp - MAX( 0._wp , SIGN(1._wp, - h_s_1d(ji) ) )  ! is there snow or not
151         ! layer thickness
152         zh_i(ji) = h_i_1d(ji) * r1_nlay_i
153         zh_s(ji) = h_s_1d(ji) * r1_nlay_s
154      END DO
155      !
156      WHERE( zh_i(1:npti) >= epsi10 )   ;   z1_h_i(1:npti) = 1._wp / zh_i(1:npti)
157      ELSEWHERE                         ;   z1_h_i(1:npti) = 0._wp
158      END WHERE
159      !
160      WHERE( zh_s(1:npti) > 0._wp   )       zh_s(1:npti) = MAX( zhs_min * r1_nlay_s, zh_s(1:npti) )
161      !
162      WHERE( zh_s(1:npti) > 0._wp   )   ;   z1_h_s(1:npti) = 1._wp / zh_s(1:npti)
163      ELSEWHERE                         ;   z1_h_s(1:npti) = 0._wp
164      END WHERE
165      !
166      ! Store initial temperatures and non solar heat fluxes
167      IF( k_jules == np_jules_OFF .OR. k_jules == np_jules_EMULE ) THEN
168         !
169         ztsub      (1:npti) = t_su_1d(1:npti)                          ! surface temperature at iteration n-1
170         ztsuold    (1:npti) = t_su_1d(1:npti)                          ! surface temperature initial value
171         t_su_1d    (1:npti) = MIN( t_su_1d(1:npti), rt0 - ztsu_err )   ! required to leave the choice between melting or not
172         zdqns_ice_b(1:npti) = dqns_ice_1d(1:npti)                      ! derivative of incoming nonsolar flux
173         zqns_ice_b (1:npti) = qns_ice_1d(1:npti)                       ! store previous qns_ice_1d value
174         !
175      ENDIF
176      !
177      DO jk = 1, nlay_i
178         DO ji = 1, npti
179            tt_i_1d(jk, ji) = t_i_1d(ji, jk)
180            tsz_i_1d(jk, ji) = sz_i_1d(ji, jk)
181         END DO
182      END DO
183
184      DO jk = 1, nlay_s
185         DO ji = 1, npti
186            tt_s_1d(jk, ji) = t_s_1d(ji, jk)
187         END DO
188      END DO
189
190
191      ztsold (:, :) = tt_s_1d(:,:)   ! Old snow temperature
192      ztiold (:, :) = tt_i_1d(:,:)   ! Old ice temperature
193
194      !-------------
195      ! 2) Radiation
196      !-------------
197      ! --- Transmission/absorption of solar radiation in the ice --- !
198      zradtr_s(1:npti,0) = qtr_ice_top_1d(1:npti)
199      DO jk = 1, nlay_s
200         DO ji = 1, npti
201            !                             ! radiation transmitted below the layer-th snow layer
202            zradtr_s(ji,jk) = zradtr_s(ji,0) * EXP( - zraext_s * h_s_1d(ji) * r1_nlay_s * REAL(jk) )
203            !                             ! radiation absorbed by the layer-th snow layer
204            zradab_s(jk,ji) = zradtr_s(ji,jk-1) - zradtr_s(ji,jk)
205         END DO
206      END DO
207      !
208      zradtr_i(1:npti, 0) = zradtr_s(1:npti, nlay_s) * isnow(1:npti) + qtr_ice_top_1d(1:npti) * ( 1._wp - isnow(1:npti) )
209      DO jk = 1, nlay_i 
210         DO ji = 1, npti
211            !                             ! radiation transmitted below the layer-th ice layer
212            zradtr_i(ji, jk) = zradtr_i(ji, 0) * EXP( - rn_kappa_i * zh_i(ji) * REAL(jk) )
213            !                             ! radiation absorbed by the layer-th ice layer
214            zradab_i(jk,ji) = zradtr_i(ji,jk-1) - zradtr_i(ji,jk)
215         END DO
216      END DO
217      !
218      qtr_ice_bot_1d(1:npti) = zradtr_i(1:npti, nlay_i)   ! record radiation transmitted below the ice
219      !
220      iconv    = 0          ! number of iterations
221      zdti_max = 1000._wp   ! maximal value of error on all points
222      !
223      liter(:) = .TRUE.                                          !============================!
224      DO iconv = 1, iconv_max                                    ! Iterative procedure begins !
225         IF(itot<1) EXIT
226         DO ji = 1, npti
227          IF(liter(ji)) THEN
228            zdti_max = 0._wp
229            !
230            ztib(:, ji) = tt_i_1d(:, ji)
231            ztsb(:, ji) = tt_s_1d(:, ji)
232            !
233            !--------------------------------
234            ! 3) Sea ice thermal conductivity
235            !--------------------------------
236            IF( ln_cndi_U64 ) THEN         !-- Untersteiner (1964) formula: k = k0 + beta.S/T
237            !
238               ztcond_i(0, ji)      = rcnd_i + zbeta * tsz_i_1d(1, ji)      / MIN( -epsi10, tt_i_1d(1, ji) - rt0 )
239               ztcond_i(nlay_i, ji) = rcnd_i + zbeta * tsz_i_1d(nlay_i, ji) / MIN( -epsi10, t_bo_1d(ji)  - rt0 )
240               DO jk = 1, nlay_i-1
241                    ztcond_i(jk, ji) = rcnd_i + zbeta * 0.5_wp * ( tsz_i_1d(jk, ji) + tsz_i_1d(jk+1, ji) ) /  &
242                        &                       MIN( -epsi10, 0.5_wp * (tt_i_1d(jk, ji) + tt_i_1d(jk+1, ji)) - rt0 )
243                  END DO
244               !
245            ELSEIF( ln_cndi_P07 ) THEN     !-- Pringle et al formula: k = k0 + beta1.S/T - beta2.T
246               !
247                  ztcond_i(0, ji)      = rcnd_i + 0.09_wp  *  tsz_i_1d(1, ji)      / MIN( -epsi10, tt_i_1d(1, ji) - rt0 )  &
248                     &                         - 0.011_wp * ( tt_i_1d(1, ji) - rt0 )
249                  ztcond_i(nlay_i, ji) = rcnd_i + 0.09_wp  *  tsz_i_1d(nlay_i, ji) / MIN( -epsi10, t_bo_1d(ji)  - rt0 )  &
250                     &                         - 0.011_wp * ( t_bo_1d(ji) - rt0 )
251               DO jk = 1, nlay_i-1
252                  ztcond_i(jk,ji) = rcnd_i + 0.09_wp  *   0.5_wp * ( tsz_i_1d(jk,ji) + tsz_i_1d(jk+1,ji) ) /        &
253                     &                      MIN( -epsi10, 0.5_wp * ( tt_i_1d (jk,ji) + tt_i_1d (jk+1,ji) ) - rt0 )  &
254                     &                     - 0.011_wp * ( 0.5_wp * ( tt_i_1d (jk,ji) + tt_i_1d (jk+1,ji) ) - rt0 )
255               END DO
256            !
257            ENDIF
258            ztcond_i(:, ji) = MAX( zkimin, ztcond_i(:, ji) )       
259            !
260            !--- G(he) : enhancement of thermal conductivity in mono-category case
261            ! Computation of effective thermal conductivity G(h)
262            ! Used in mono-category case only to simulate an ITD implicitly
263            ! Fichefet and Morales Maqueda, JGR 1997
264            zghe(ji) = 1._wp
265            !
266            SELECT CASE ( nn_virtual_itd )
267            !
268            CASE ( 1 , 2 )
269            !
270            zepsilon = 0.1_wp
271               zcnd_i = SUM( ztcond_i(:,ji) ) / REAL( nlay_i+1, wp )                                ! Mean sea ice thermal conductivity
272               zhe = ( rn_cnd_s * h_i_1d(ji) + zcnd_i * h_s_1d(ji) ) / ( rn_cnd_s + zcnd_i )        ! Effective thickness he (zhe)
273               IF( zhe >=  zepsilon * 0.5_wp * EXP(1._wp) )  &
274                  &   zghe(ji) = MIN( 2._wp, 0.5_wp * ( 1._wp + LOG( 2._wp * zhe / zepsilon ) ) )   ! G(he)
275            !
276            END SELECT
277            !
278            !-----------------
279            ! 4) kappa factors
280            !-----------------
281            !--- Snow
282            DO jk = 0, nlay_s-1
283               zkappa_s(jk,ji) = zghe(ji) * rn_cnd_s * z1_h_s(ji)
284            END DO
285            ! Snow-ice interface
286            zfac = 0.5_wp * ( ztcond_i(0, ji) * zh_s(ji) + rn_cnd_s * zh_i(ji) )
287            IF( zfac > epsi10 ) THEN
288               zkappa_s(nlay_s, ji) = zghe(ji) * rn_cnd_s * ztcond_i(0, ji) / zfac
289            ELSE
290               zkappa_s(nlay_s, ji) = 0._wp
291            ENDIF
292
293            !--- Ice
294            DO jk = 0, nlay_i
295               zkappa_i(jk,ji) = zghe(ji) * ztcond_i(jk,ji) * z1_h_i(ji)
296            END DO
297            zkappa_i(0, ji) = zkappa_s(nlay_s, ji) * isnow(ji) + zkappa_i(0, ji) * ( 1._wp - isnow(ji) )
298            !
299            !--------------------------------------
300            ! 5) Sea ice specific heat, eta factors
301            !--------------------------------------
302            DO jk = 1, nlay_i
303               zcpi = rcpi + zgamma * tsz_i_1d(jk,ji) / MAX( ( tt_i_1d(jk,ji) - rt0 ) * ( ztiold(jk,ji) - rt0 ), epsi10 )
304               zeta_i(jk,ji) = rdt_ice * r1_rhoi * z1_h_i(ji) / MAX( epsi10, zcpi )
305            END DO
306
307            DO jk = 1, nlay_s
308               zeta_s(jk,ji) = rdt_ice * r1_rhos * r1_rcpi * z1_h_s(ji)
309            END DO
310         !
311         !----------------------------------------!
312         !                                        !
313         !   JULES COUPLING IS OFF OR EMULATED    !
314         !                                        !
315         !----------------------------------------!
316         !
317         IF( k_jules == np_jules_OFF .OR. k_jules == np_jules_EMULE ) THEN
318            !
319            ! ==> The original BL99 temperature computation is used
320            !       (with qsr_ice, qns_ice and dqns_ice as inputs)
321            !
322            !----------------------------
323            ! 6) surface flux computation
324            !----------------------------
325            ! update of the non solar flux according to the update in T_su
326               qns_ice_1d(ji) = qns_ice_1d(ji) + dqns_ice_1d(ji) * ( t_su_1d(ji) - ztsub(ji) )
327
328               zfnet(ji) = qsr_ice_1d(ji) - qtr_ice_top_1d(ji) + qns_ice_1d(ji) ! net heat flux = net - transmitted solar + non solar
329            !
330            !----------------------------
331            ! 7) tridiagonal system terms
332            !----------------------------
333            ! layer denotes the number of the layer in the snow or in the ice
334            ! jm denotes the reference number of the equation in the tridiagonal
335            ! system, terms of tridiagonal system are indexed as following :
336            ! 1 is subdiagonal term, 2 is diagonal and 3 is superdiagonal one
337
338            ! ice interior terms (top equation has the same form as the others)
339            ztrid   (:, :, ji) = 0._wp
340            zindterm(:, ji)   = 0._wp
341            zindtbis(:, ji)   = 0._wp
342            zdiagbis(:, ji)   = 0._wp
343
344            DO jm = nlay_s + 2, nlay_s + nlay_i 
345                  jk = jm - nlay_s - 1
346                  ztrid   (1, jm, ji) =       - zeta_i(jk,ji) *   zkappa_i(jk-1, ji)
347                  ztrid   (2, jm, ji) = 1._wp + zeta_i(jk,ji) * ( zkappa_i(jk-1, ji) + zkappa_i(jk, ji) )
348                  ztrid   (3, jm, ji) =       - zeta_i(jk,ji) *                       zkappa_i(jk, ji)
349                  zindterm(jm,ji)   = ztiold(jk,ji) + zeta_i(jk,ji) * zradab_i(jk, ji)
350            END DO
351
352            jm =  nlay_s + nlay_i + 1
353               ! ice bottom term
354               ztrid   (1, jm, ji) =       - zeta_i(nlay_i, ji) *   zkappa_i(nlay_i-1, ji)   
355               ztrid   (2, jm, ji) = 1._wp + zeta_i(nlay_i, ji) * ( zkappa_i(nlay_i-1, ji) + zkappa_i(nlay_i, ji) * zg1 )
356               ztrid   (3, jm, ji) = 0._wp
357               zindterm(jm,ji)   = ztiold(nlay_i, ji) + zeta_i(nlay_i, ji) *  &
358                  &              ( zradab_i(nlay_i, ji) + zkappa_i(nlay_i, ji) * zg1 * t_bo_1d(ji) ) 
359
360               !                               !---------------------!
361               IF( h_s_1d(ji) > 0._wp ) THEN   !  snow-covered cells !
362                  !                            !---------------------!
363                  ! snow interior terms (bottom equation has the same form as the others)
364                  DO jm = 3, nlay_s + 1
365                     jk = jm - 1
366                     ztrid   (1, jm, ji) =       - zeta_s(jk,ji) *   zkappa_s(jk-1,ji)
367                     ztrid   (2, jm, ji) = 1._wp + zeta_s(jk,ji) * ( zkappa_s(jk-1,ji) + zkappa_s(jk,ji) )
368                     ztrid   (3, jm, ji) =       - zeta_s(jk,ji) *                       zkappa_s(jk,ji)
369                     zindterm(jm,ji)   = ztsold(jk,ji) + zeta_s(jk,ji) * zradab_s(jk,ji)
370                  END DO
371                 
372                  ! case of only one layer in the ice (ice equation is altered)
373                  IF( nlay_i == 1 ) THEN
374                     ztrid   (3, nlay_s+2, ji) = 0._wp
375                     zindterm(nlay_s+2, ji)   = zindterm(nlay_s+2, ji) + zeta_i(1, ji) * zkappa_i(1, ji) * t_bo_1d(ji) 
376                  ENDIF
377                 
378                  IF( t_su_1d(ji) < rt0 ) THEN   !--  case 1 : no surface melting
379                     
380                     jm_min(ji) = 1
381                     jm_max(ji) = nlay_i + nlay_s + 1
382                     
383                     ! surface equation
384                     ztrid   (1, 1, ji) = 0._wp
385                     ztrid   (2, 1, ji) = zdqns_ice_b(ji) - zg1s * zkappa_s(0, ji)
386                     ztrid   (3, 1, ji) =                   zg1s * zkappa_s(0, ji)
387                     zindterm(1, ji)   = zdqns_ice_b(ji) * t_su_1d(ji) - zfnet(ji)
388                     
389                     ! first layer of snow equation
390                     ztrid   (1, 2, ji) =       - zeta_s(1, ji) *                    zkappa_s(0, ji) * zg1s
391                     ztrid   (2, 2, ji) = 1._wp + zeta_s(1, ji) * ( zkappa_s(1, ji) + zkappa_s(0, ji) * zg1s )
392                     ztrid   (3, 2, ji) =       - zeta_s(1, ji) *   zkappa_s(1, ji)
393                     zindterm(2, ji)   = ztsold(1, ji) + zeta_s(1, ji) * zradab_s(1, ji)
394                     
395                  ELSE                            !--  case 2 : surface is melting
396                     !
397                     jm_min(ji) = 2
398                     jm_max(ji) = nlay_i + nlay_s + 1
399                     
400                     ! first layer of snow equation
401                     ztrid   (1, 2, ji) = 0._wp
402                     ztrid   (2, 2, ji) = 1._wp + zeta_s(1, ji) * ( zkappa_s(1, ji) + zkappa_s(0, ji) * zg1s )
403                     ztrid   (3, 2, ji) =       - zeta_s(1, ji) *   zkappa_s(1, ji) 
404                     zindterm(2, ji)   = ztsold(1, ji) + zeta_s(1, ji) * ( zradab_s(1, ji) + zkappa_s(0, ji) * zg1s * t_su_1d(ji) ) 
405                  ENDIF
406                  !                            !---------------------!
407               ELSE                            ! cells without snow  !
408                  !                            !---------------------!
409                  !
410                  IF( t_su_1d(ji) < rt0 ) THEN   !--  case 1 : no surface melting
411                     !
412                     jm_min(ji) = nlay_s + 1
413                     jm_max(ji) = nlay_i + nlay_s + 1
414                     
415                     ! surface equation   
416                     ztrid   (1, jm_min(ji), ji) = 0._wp
417                     ztrid   (2, jm_min(ji), ji) = zdqns_ice_b(ji) - zkappa_i(0, ji) * zg1   
418                     ztrid   (3, jm_min(ji), ji) =                   zkappa_i(0, ji) * zg1
419                     zindterm(jm_min(ji), ji)   = zdqns_ice_b(ji) * t_su_1d(ji) - zfnet(ji)
420                     
421                     ! first layer of ice equation
422                     ztrid   (1, jm_min(ji)+1, ji) =       - zeta_i(1, ji) *                    zkappa_i(0, ji) * zg1
423                     ztrid   (2, jm_min(ji)+1, ji) = 1._wp + zeta_i(1, ji) * ( zkappa_i(1, ji) + zkappa_i(0, ji) * zg1 )
424                     ztrid   (3, jm_min(ji)+1, ji) =       - zeta_i(1, ji) *   zkappa_i(1, ji) 
425                     zindterm(jm_min(ji)+1, ji)   = ztiold(1, ji) + zeta_i(1, ji) * zradab_i(1, ji) 
426                     
427                     ! case of only one layer in the ice (surface & ice equations are altered)
428                     IF( nlay_i == 1 ) THEN
429                        ztrid   (1, jm_min(ji), ji)   = 0._wp
430                        ztrid   (2, jm_min(ji), ji)   = zdqns_ice_b(ji)      -   zkappa_i(0, ji) * 2._wp
431                        ztrid   (3, jm_min(ji), ji)   =                          zkappa_i(0, ji) * 2._wp
432                        ztrid   (1, jm_min(ji)+1, ji) =       - zeta_i(1, ji) *   zkappa_i(0, ji) * 2._wp
433                        ztrid   (2, jm_min(ji)+1, ji) = 1._wp + zeta_i(1, ji) * ( zkappa_i(0, ji) * 2._wp + zkappa_i(1, ji) )
434                        ztrid   (3, jm_min(ji)+1, ji) = 0._wp
435                        zindterm(jm_min(ji)+1, ji)   = ztiold(1, ji) + zeta_i(1, ji) * (zradab_i(1, ji) + zkappa_i(1, ji) * t_bo_1d(ji))
436                     ENDIF
437                     
438                  ELSE                            !--  case 2 : surface is melting
439                     
440                     jm_min(ji) = nlay_s + 2
441                     jm_max(ji) = nlay_i + nlay_s + 1
442                     
443                     ! first layer of ice equation
444                     ztrid   (1, jm_min(ji), ji) = 0._wp
445                     ztrid   (2, jm_min(ji), ji) = 1._wp + zeta_i(1, ji) * ( zkappa_i(1, ji) + zkappa_i(0, ji) * zg1 ) 
446                     ztrid   (3, jm_min(ji), ji) =       - zeta_i(1, ji) *   zkappa_i(1, ji)
447                     zindterm(jm_min(ji), ji)   = ztiold(1, ji) + zeta_i(1, ji) * (zradab_i(1, ji) + zkappa_i(0, ji) * zg1 * t_su_1d(ji)) 
448                     
449                     ! case of only one layer in the ice (surface & ice equations are altered)
450                     IF( nlay_i == 1 ) THEN
451                        ztrid   (1, jm_min(ji), ji) = 0._wp
452                        ztrid   (2, jm_min(ji), ji) = 1._wp + zeta_i(1, ji) * ( zkappa_i(0, ji) * 2._wp + zkappa_i(1, ji) )
453                        ztrid   (3, jm_min(ji), ji) = 0._wp
454                        zindterm(jm_min(ji), ji)   = ztiold(1, ji) + zeta_i(1, ji) * ( zradab_i(1, ji) + zkappa_i(1, ji) * t_bo_1d(ji) ) &
455                           &                      + t_su_1d(ji) * zeta_i(1, ji) * zkappa_i(0, ji) * 2._wp
456                     ENDIF
457                     
458                  ENDIF
459               ENDIF
460               !
461               zindtbis(jm_min(ji), ji) = zindterm(jm_min(ji), ji)
462               zdiagbis(jm_min(ji), ji) = ztrid   (2, jm_min(ji), ji)
463               !
464            !
465            !------------------------------
466            ! 8) tridiagonal system solving
467            !------------------------------
468            ! Solve the tridiagonal system with Gauss elimination method.
469            ! Thomas algorithm, from Computational fluid Dynamics, J.D. ANDERSON, McGraw-Hill 1984
470
471
472
473
474
475               DO jm = jm_min(ji)+1, jm_max(ji)
476                  zdiagbis(jm,ji) = ztrid   (2, jm, ji) - ztrid(1, jm, ji) * ztrid   (3, jm-1, ji) / zdiagbis(jm-1,ji)
477                  zindtbis(jm,ji) = zindterm(jm,ji  ) - ztrid(1, jm, ji) * zindtbis(jm-1,ji  ) / zdiagbis(jm-1,ji)
478               END DO
479
480            ! ice temperatures
481               tt_i_1d(nlay_i, ji) = zindtbis(jm_max(ji), ji) / zdiagbis(jm_max(ji), ji)
482
483               DO jm = nlay_i + nlay_s, nlay_s + 2, -1
484                  jk = jm - nlay_s - 1
485                  tt_i_1d(jk, ji) = ( zindtbis(jm,ji) - ztrid(3, jm,ji) * tt_i_1d(jk+1, ji) ) / zdiagbis(jm,ji)
486               END DO
487
488               ! snow temperatures     
489               IF( h_s_1d(ji) > 0._wp ) THEN
490                  tt_s_1d(nlay_s, ji) = ( zindtbis(nlay_s+1, ji) - ztrid(3, nlay_s+1, ji) * tt_i_1d(1, ji) ) / zdiagbis(nlay_s+1, ji)
491               ENDIF
492               ! surface temperature
493               ztsub(ji) = t_su_1d(ji)
494               IF( t_su_1d(ji) < rt0 ) THEN
495                  t_su_1d(ji) = ( zindtbis(jm_min(ji), ji) - ztrid(3,jm_min(ji),ji) *  &
496                     &          ( isnow(ji) * tt_s_1d(1, ji) + ( 1._wp - isnow(ji) ) * tt_i_1d(1, ji) ) ) / zdiagbis(jm_min(ji), ji)
497               ENDIF
498            !
499            !--------------------------------------------------------------
500            ! 9) Has the scheme converged?, end of the iterative procedure
501            !--------------------------------------------------------------
502            ! check that nowhere it has started to melt
503            ! zdti_max is a measure of error, it has to be under zdti_bnd
504
505               t_su_1d(ji) = MAX( MIN( t_su_1d(ji) , rt0 ) , rt0 - 100._wp )
506               zdti_max    = MAX( zdti_max, ABS( t_su_1d(ji) - ztsub(ji) ) )     
507
508               DO jk = 1, nlay_s
509                  tt_s_1d(jk,ji) = MAX( MIN( tt_s_1d(jk,ji), rt0 ), rt0 - 100._wp )
510                  zdti_max      = MAX( zdti_max, ABS( tt_s_1d(jk,ji) - ztsb(jk,ji) ) )
511               END DO
512
513               DO jk = 1, nlay_i
514                  ztmelts       = -rTmlt * tsz_i_1d(jk, ji) + rt0 
515                  tt_i_1d(jk, ji) =  MAX( MIN( tt_i_1d(jk, ji), ztmelts ), rt0 - 100._wp )
516                  zdti_max      =  MAX( zdti_max, ABS( tt_i_1d(jk, ji) - ztib(jk,ji) ) )
517               END DO
518         !
519         !----------------------------------------!
520         !                                        !
521         !      JULES COUPLING IS ACTIVE          !
522         !                                        !
523         !----------------------------------------!
524         !
525         ELSEIF( k_jules == np_jules_ACTIVE ) THEN
526            !
527            ! ==> we use a modified BL99 solver with conduction flux (qcn_ice) as forcing term
528            !
529            !----------------------------
530            ! 7) tridiagonal system terms
531            !----------------------------
532            ! layer denotes the number of the layer in the snow or in the ice
533            ! jm denotes the reference number of the equation in the tridiagonal
534            ! system, terms of tridiagonal system are indexed as following :
535            ! 1 is subdiagonal term, 2 is diagonal and 3 is superdiagonal one
536
537            ! ice interior terms (top equation has the same form as the others)
538               ztrid   (:, :, ji) = 0._wp
539               zindterm(:, ji)   = 0._wp
540               zindtbis(:, ji)   = 0._wp
541               zdiagbis(:, ji)   = 0._wp
542
543               DO jm = nlay_s + 2, nlay_s + nlay_i 
544                  jk = jm - nlay_s - 1
545                  ztrid   (1, jm, ji) =       - zeta_i(jk,ji) *   zkappa_i(jk-1, ji)
546                  ztrid   (2, jm, ji) = 1._wp + zeta_i(jk,ji) * ( zkappa_i(jk-1, ji) + zkappa_i(jk,ji) )
547                  ztrid   (3, jm, ji) =       - zeta_i(jk,ji) *                       zkappa_i(jk,ji)
548                  zindterm(jm,ji)   = ztiold(jk,ji) + zeta_i(jk,ji) * zradab_i(jk,ji)
549               ENDDO
550
551               jm =  nlay_s + nlay_i + 1
552               ! ice bottom term
553               ztrid   (1, jm, ji) =       - zeta_i(nlay_i, ji) *   zkappa_i(nlay_i-1, ji)   
554               ztrid   (2, jm, ji) = 1._wp + zeta_i(nlay_i, ji) * ( zkappa_i(nlay_i-1, ji) + zkappa_i(nlay_i, ji) * zg1 )
555               ztrid   (3, jm, ji) = 0._wp
556               zindterm(jm,ji)   = ztiold(nlay_i, ji) + zeta_i(nlay_i, ji) *  &
557                  &              ( zradab_i(nlay_i, ji) + zkappa_i(nlay_i, ji) * zg1 * t_bo_1d(ji) ) 
558
559               !                               !---------------------!
560               IF( h_s_1d(ji) > 0._wp ) THEN   !  snow-covered cells !
561                  !                            !---------------------!
562                  ! snow interior terms (bottom equation has the same form as the others)
563                  DO jm = 3, nlay_s + 1
564                     jk = jm - 1
565                     ztrid   (1, jm, ji) =       - zeta_s(jk,ji) *   zkappa_s(jk-1,ji)
566                     ztrid   (2, jm, ji) = 1._wp + zeta_s(jk,ji) * ( zkappa_s(jk-1,ji) + zkappa_s(jk,ji) )
567                     ztrid   (3, jm, ji) =       - zeta_s(jk,ji) *                       zkappa_s(jk,ji)
568                     zindterm(jm,ji)   = ztsold(jk,ji) + zeta_s(jk,ji) * zradab_s(jk,ji)
569                  END DO
570                 
571                  ! case of only one layer in the ice (ice equation is altered)
572                  IF ( nlay_i == 1 ) THEN
573                     ztrid   (3, nlay_s+2, ji) = 0._wp
574                     zindterm(nlay_s+2, ji)   = zindterm(nlay_s+2, ji) + zeta_i(1, ji) * zkappa_i(1, ji) * t_bo_1d(ji) 
575                  ENDIF
576                 
577                  jm_min(ji) = 2
578                  jm_max(ji) = nlay_i + nlay_s + 1
579                 
580                  ! first layer of snow equation
581                  ztrid   (1, 2, ji) = 0._wp
582                  ztrid   (2, 2, ji) = 1._wp + zeta_s(1, ji) * zkappa_s(1, ji)
583                  ztrid   (3, 2, ji) =       - zeta_s(1, ji) * zkappa_s(1, ji) 
584                  zindterm(2, ji)   = ztsold(1, ji) + zeta_s(1, ji) * ( zradab_s(1, ji) + qcn_ice_1d(ji) ) 
585                 
586                  !                            !---------------------!
587               ELSE                            ! cells without snow  !
588                  !                            !---------------------!
589                  jm_min(ji) = nlay_s + 2
590                  jm_max(ji) = nlay_i + nlay_s + 1
591                 
592                  ! first layer of ice equation
593                  ztrid   (1, jm_min(ji), ji) = 0._wp
594                  ztrid   (2, jm_min(ji), ji) = 1._wp + zeta_i(1, ji) * zkappa_i(1, ji) 
595                  ztrid   (3, jm_min(ji), ji) =       - zeta_i(1, ji) * zkappa_i(1, ji)
596                  zindterm(jm_min(ji), ji)   = ztiold(1, ji) + zeta_i(1, ji) * ( zradab_i(1, ji) + qcn_ice_1d(ji) )
597                 
598                  ! case of only one layer in the ice (surface & ice equations are altered)
599                  IF( nlay_i == 1 ) THEN
600                     ztrid   (1, jm_min(ji), ji) = 0._wp
601                     ztrid   (2, jm_min(ji), ji) = 1._wp + zeta_i(1, ji) * zkappa_i(1, ji)
602                     ztrid   (3, jm_min(ji), ji) = 0._wp
603                     zindterm(jm_min(ji), ji)   = ztiold(1, ji) + zeta_i(1, ji) *  &
604                        &                                     ( zradab_i(1, ji) + zkappa_i(1, ji) * t_bo_1d(ji) + qcn_ice_1d(ji) )
605                  ENDIF
606                 
607               ENDIF
608               !
609               zindtbis(jm_min(ji), ji) = zindterm(jm_min(ji), ji)
610               zdiagbis(jm_min(ji), ji) = ztrid   (2, jm_min(ji), ji)
611               !
612            !
613            !------------------------------
614            ! 8) tridiagonal system solving
615            !------------------------------
616            ! Solve the tridiagonal system with Gauss elimination method.
617            ! Thomas algorithm, from Computational fluid Dynamics, J.D. ANDERSON, McGraw-Hill 1984
618
619
620
621
622
623            DO jm = jm_min(ji)+1, jm_max(ji)
624                  zdiagbis(jm,ji) = ztrid   (2, jm, ji) - ztrid(1, jm, ji) * ztrid   (3, jm-1, ji) / zdiagbis(jm-1,ji)
625                  zindtbis(jm,ji) = zindterm(jm,ji)   - ztrid(1, jm,ji) * zindtbis(jm-1,ji)   / zdiagbis(jm-1,ji)
626            END DO
627           
628            ! ice temperatures
629               tt_i_1d(nlay_i, ji) = zindtbis(jm_max(ji), ji) / zdiagbis(jm_max(ji), ji)
630
631               DO jm = nlay_i + nlay_s, nlay_s + 2, -1
632                  jk = jm - nlay_s - 1
633                  tt_i_1d(jk, ji) = ( zindtbis(jm,ji) - ztrid(3, jm, ji) * tt_i_1d(jk+1, ji) ) / zdiagbis(jm,ji)
634               END DO
635           
636            ! snow temperatures     
637               IF( h_s_1d(ji) > 0._wp ) THEN
638                  tt_s_1d(nlay_s, ji) = ( zindtbis(nlay_s+1, ji) - ztrid(3, nlay_s+1, ji) * tt_i_1d(1, ji) ) / zdiagbis(nlay_s+1, ji)
639               ENDIF
640            !
641            !--------------------------------------------------------------
642            ! 9) Has the scheme converged?, end of the iterative procedure
643            !--------------------------------------------------------------
644            ! check that nowhere it has started to melt
645            ! zdti_max is a measure of error, it has to be under zdti_bnd
646
647
648               DO jk = 1, nlay_s
649                     tt_s_1d(jk,ji) = MAX( MIN( tt_s_1d(jk,ji), rt0 ), rt0 - 100._wp )
650                     zdti_max = MAX( zdti_max, ABS( tt_s_1d(jk,ji) - ztsb(jk,ji) ) )
651               END DO
652           
653               DO jk = 1, nlay_i
654                     ztmelts       = -rTmlt * tsz_i_1d(jk,ji) + rt0 
655                     tt_i_1d(jk,ji) =  MAX( MIN( tt_i_1d(jk,ji), ztmelts ), rt0 - 100._wp )
656                     zdti_max      =  MAX( zdti_max, ABS( tt_i_1d(jk,ji) - ztib(jk,ji) ) )
657               END DO
658
659        ENDIF ! k_jules
660
661        IF(zdti_max.le.zdti_bnd) THEN
662          liter(ji) = .FALSE.
663          itot = itot - 1
664        ENDIF
665
666        ENDIF ! liter
667        END DO ! ji
668      END DO  ! End of the do while iterative procedure
669!need to move this part where all processors are available     
670!     IF( ln_icectl .AND. lwp ) THEN
671!        WRITE(numout,*) ' zdti_max : ', zdti_max
672!        WRITE(numout,*) ' iconv    : ', iconv
673!     ENDIF
674     
675      !
676      !-----------------------------
677      ! 10) Fluxes at the interfaces
678      !-----------------------------
679      !
680      ! --- calculate conduction fluxes (positive downward)
681      DO jk = 1, nlay_s
682         t_s_1d(1:npti, jk) = tt_s_1d(jk, 1:npti)
683      ENDDO
684      DO jk = 1, nlay_i
685         t_i_1d(1:npti, jk) = tt_i_1d(jk, 1:npti)
686      ENDDO
687
688      DO ji = 1, npti
689         !                                ! surface ice conduction flux
690         qcn_ice_top_1d(ji) =  -           isnow(ji)   * zkappa_s(0, ji)      * zg1s * ( t_s_1d(ji,1) - t_su_1d(ji) )  &
691            &                  - ( 1._wp - isnow(ji) ) * zkappa_i(0, ji)      * zg1  * ( t_i_1d(ji,1) - t_su_1d(ji) )
692         !                                ! bottom ice conduction flux
693         qcn_ice_bot_1d(ji) =                          - zkappa_i(nlay_i, ji) * zg1  * ( t_bo_1d(ji ) - t_i_1d (ji,nlay_i) )
694      END DO
695     
696      !
697      ! --- Diagnose the heat loss due to changing non-solar / conduction flux --- !
698      !
699      IF( k_jules == np_jules_OFF .OR. k_jules == np_jules_EMULE ) THEN
700         !
701         DO ji = 1, npti
702            hfx_err_dif_1d(ji) = hfx_err_dif_1d(ji) - ( qns_ice_1d(ji) - zqns_ice_b(ji) ) * a_i_1d(ji) 
703         END DO
704         !
705      ELSEIF( k_jules == np_jules_ACTIVE ) THEN
706         !
707         DO ji = 1, npti
708            hfx_err_dif_1d(ji) = hfx_err_dif_1d(ji) - ( qcn_ice_top_1d(ji) - qcn_ice_1d(ji) ) * a_i_1d(ji) 
709         END DO
710         !
711      ENDIF
712     
713      !
714      ! --- Diagnose the heat loss due to non-fully converged temperature solution (should not be above 10-4 W-m2) --- !
715      !
716      IF( k_jules == np_jules_OFF .OR. k_jules == np_jules_ACTIVE ) THEN
717         
718         CALL ice_var_enthalpy       
719         
720         ! zhfx_err = correction on the diagnosed heat flux due to non-convergence of the algorithm used to solve heat equation
721         DO ji = 1, npti
722            zdq = - zq_ini(ji) + ( SUM( e_i_1d(ji,1:nlay_i) ) * h_i_1d(ji) * r1_nlay_i +  &
723               &                   SUM( e_s_1d(ji,1:nlay_s) ) * h_s_1d(ji) * r1_nlay_s )
724           
725            IF( k_jules == np_jules_OFF ) THEN
726               
727               IF( t_su_1d(ji) < rt0 ) THEN  ! case T_su < 0degC
728                  zhfx_err = ( qns_ice_1d(ji)     + qsr_ice_1d(ji)     - zradtr_i(ji, nlay_i) - qcn_ice_bot_1d(ji)  &
729                     &       + zdq * r1_rdtice ) * a_i_1d(ji)
730               ELSE                          ! case T_su = 0degC
731                  zhfx_err = ( qcn_ice_top_1d(ji) + qtr_ice_top_1d(ji) - zradtr_i(ji, nlay_i) - qcn_ice_bot_1d(ji)  &
732                     &       + zdq * r1_rdtice ) * a_i_1d(ji)
733               ENDIF
734               
735            ELSEIF( k_jules == np_jules_ACTIVE ) THEN
736           
737               zhfx_err    = ( qcn_ice_top_1d(ji) + qtr_ice_top_1d(ji) - zradtr_i(ji, nlay_i) - qcn_ice_bot_1d(ji)  &
738                  &          + zdq * r1_rdtice ) * a_i_1d(ji)
739           
740            ENDIF
741            !
742            ! total heat sink to be sent to the ocean
743            hfx_err_dif_1d(ji) = hfx_err_dif_1d(ji) + zhfx_err
744            !
745            ! hfx_dif = Heat flux diagnostic of sensible heat used to warm/cool ice in W.m-2   
746            hfx_dif_1d(ji) = hfx_dif_1d(ji) - zdq * r1_rdtice * a_i_1d(ji)
747            !
748         END DO
749         !
750      ENDIF
751      !
752      !---------------------------------------------------------------------------------------
753      ! 11) Jules coupling: reset inner snow and ice temperatures, update conduction fluxes
754      !---------------------------------------------------------------------------------------
755      ! effective conductivity and 1st layer temperature (needed by Met Office)
756      DO ji = 1, npti
757         IF( h_s_1d(ji) > 0.1_wp ) THEN
758            cnd_ice_1d(ji) = 2._wp * zkappa_s(0, ji)
759         ELSE
760            IF( h_i_1d(ji) > 0.1_wp ) THEN
761               cnd_ice_1d(ji) = 2._wp * zkappa_i(0, ji)
762            ELSE
763               cnd_ice_1d(ji) = 2._wp * ztcond_i(0, ji) * 10._wp
764            ENDIF
765         ENDIF
766         t1_ice_1d(ji) = isnow(ji) * t_s_1d(ji,1) + ( 1._wp - isnow(ji) ) * t_i_1d(ji,1)
767      END DO
768      !
769      IF( k_jules == np_jules_EMULE ) THEN
770         ! Restore temperatures to their initial values
771         DO jk = 1, nlay_s
772            t_s_1d    (1:npti,jk) = ztsold        (jk, 1:npti)
773         ENDDO
774         DO jk = 1, nlay_i
775            t_i_1d    (1:npti,jk) = ztiold        (jk, 1:npti)
776         ENDDO
777         qcn_ice_1d(1:npti)   = qcn_ice_top_1d(1:npti)
778      ENDIF
779      !
780      ! --- SIMIP diagnostics
781      !
782      DO ji = 1, npti         
783         !--- Snow-ice interfacial temperature (diagnostic SIMIP)
784         zfac = rn_cnd_s * zh_i(ji) + ztcond_i(1, ji) * zh_s(ji)
785         IF( h_s_1d(ji) >= zhs_min ) THEN
786            t_si_1d(ji) = ( rn_cnd_s       * zh_i(ji) * t_s_1d(ji,1) +   &
787               &            ztcond_i(1, ji) * zh_s(ji) * t_i_1d(ji,1) ) / MAX( epsi10, zfac )
788         ELSE
789            t_si_1d(ji) = t_su_1d(ji)
790         ENDIF
791      END DO
792      !
793   END SUBROUTINE ice_thd_zdf_BL99
794
795#else
796   !!----------------------------------------------------------------------
797   !!   Default option       Dummy Module             No SI3 sea-ice model
798   !!----------------------------------------------------------------------
799#endif
800
801   !!======================================================================
802END MODULE icethd_zdf_BL99
Note: See TracBrowser for help on using the repository browser.