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/UKMO/dev_r10037_GPU/src/ICE – NEMO

source: NEMO/branches/UKMO/dev_r10037_GPU/src/ICE/icethd_zdf_bl99.F90 @ 11467

Last change on this file since 11467 was 11467, checked in by andmirek, 5 years ago

Ticket #2197 allocate arrays at the beggining of the run

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