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.
icestp.F90 in NEMO/trunk/src/ICE – NEMO

source: NEMO/trunk/src/ICE/icestp.F90 @ 12377

Last change on this file since 12377 was 12377, checked in by acc, 4 years ago

The big one. Merging all 2019 developments from the option 1 branch back onto the trunk.

This changeset reproduces 2019/dev_r11943_MERGE_2019 on the trunk using a 2-URL merge
onto a working copy of the trunk. I.e.:

svn merge --ignore-ancestry \

svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/trunk \
svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/branches/2019/dev_r11943_MERGE_2019 ./

The --ignore-ancestry flag avoids problems that may otherwise arise from the fact that
the merge history been trunk and branch may have been applied in a different order but
care has been taken before this step to ensure that all applicable fixes and updates
are present in the merge branch.

The trunk state just before this step has been branched to releases/release-4.0-HEAD
and that branch has been immediately tagged as releases/release-4.0.2. Any fixes
or additions in response to tickets on 4.0, 4.0.1 or 4.0.2 should be done on
releases/release-4.0-HEAD. From now on future 'point' releases (e.g. 4.0.2) will
remain unchanged with periodic releases as needs demand. Note release-4.0-HEAD is a
transitional naming convention. Future full releases, say 4.2, will have a release-4.2
branch which fulfills this role and the first point release (e.g. 4.2.0) will be made
immediately following the release branch creation.

2020 developments can be started from any trunk revision later than this one.

  • Property svn:keywords set to Id
File size: 22.7 KB
Line 
1MODULE icestp
2   !!======================================================================
3   !!                       ***  MODULE  icestp  ***
4   !! sea ice : Master routine for all the sea ice model
5   !!=====================================================================
6   !!
7   !! The sea ice model SI3 (Sea Ice modelling Integrated Initiative),
8   !!                        aka Sea Ice cube for its nickname
9   !!
10   !!    is originally based on LIM3, developed in Louvain-la-Neuve by:
11   !!       * Martin Vancoppenolle (UCL-ASTR, Belgium)
12   !!       * Sylvain Bouillon (UCL-ASTR, Belgium)
13   !!       * Miguel Angel Morales Maqueda (NOC-L, UK)
14   !!      thanks to valuable earlier work by
15   !!       * Thierry Fichefet
16   !!       * Hugues Goosse
17   !!      thanks also to the following persons who contributed
18   !!       * Gurvan Madec, Claude Talandier, Christian Ethe (LOCEAN, France)
19   !!       * Xavier Fettweis (UCL-ASTR), Ralph Timmermann (AWI, Germany)
20   !!       * Bill Lipscomb (LANL), Cecilia Bitz (UWa) and Elisabeth Hunke (LANL), USA.
21   !!
22   !! SI3 has been made possible by a handful of persons who met as working group
23   !!      (from France, Belgium, UK and Italy)
24   !!    * Clement Rousset, Martin Vancoppenolle & Gurvan Madec (LOCEAN, France)
25   !!    * Matthieu Chevalier & David Salas (Meteo France, France)
26   !!    * Gilles Garric (Mercator Ocean, France)
27   !!    * Thierry Fichefet & Francois Massonnet (UCL, Belgium)
28   !!    * Ed Blockley & Jeff Ridley (Met Office, UK)
29   !!    * Danny Feltham & David Schroeder (CPOM, UK)
30   !!    * Yevgeny Aksenov (NOC, UK)
31   !!    * Paul Holland (BAS, UK)
32   !!    * Dorotea Iovino (CMCC, Italy)
33   !!======================================================================
34   !! History :  4.0  !  2018     (C. Rousset)      Original code SI3
35   !!----------------------------------------------------------------------
36#if defined key_si3
37   !!----------------------------------------------------------------------
38   !!   'key_si3'                                       SI3 sea-ice model
39   !!----------------------------------------------------------------------
40   !!   ice_stp       : sea-ice model time-stepping and update ocean SBC over ice-covered area
41   !!   ice_init      : initialize sea-ice
42   !!----------------------------------------------------------------------
43   USE oce            ! ocean dynamics and tracers
44   USE dom_oce        ! ocean space and time domain
45   USE c1d            ! 1D vertical configuration
46   USE ice            ! sea-ice: variables
47   USE ice1D          ! sea-ice: thermodynamical 1D variables
48   !
49   USE phycst         ! Define parameters for the routines
50   USE eosbn2         ! equation of state
51   USE sbc_oce        ! Surface boundary condition: ocean fields
52   USE sbc_ice        ! Surface boundary condition: ice   fields
53   !
54   USE icesbc         ! sea-ice: Surface boundary conditions
55   USE icedyn         ! sea-ice: dynamics
56   USE icethd         ! sea-ice: thermodynamics
57   USE icecor         ! sea-ice: corrections
58   USE iceupdate      ! sea-ice: sea surface boundary condition update
59   USE icedia         ! sea-ice: budget diagnostics
60   USE icewri         ! sea-ice: outputs
61   USE icerst         ! sea-ice: restarts
62   USE icevar         ! sea-ice: operations
63   USE icectl         ! sea-ice: control
64   USE iceistate      ! sea-ice: initial state
65   USE iceitd         ! sea-ice: remapping thickness distribution
66   USE icealb         ! sea-ice: albedo
67   !
68   USE bdy_oce , ONLY : ln_bdy   ! flag for bdy
69   USE bdyice         ! unstructured open boundary data for sea-ice
70# if defined key_agrif
71   USE agrif_ice
72   USE agrif_ice_interp
73# endif
74   !
75   USE in_out_manager ! I/O manager
76   USE iom            ! I/O manager library
77   USE lib_mpp        ! MPP library
78   USE lib_fortran    ! fortran utilities (glob_sum + no signed zero)
79   USE timing         ! Timing
80   USE prtctl         ! Print control
81
82   IMPLICIT NONE
83   PRIVATE
84
85   PUBLIC   ice_stp    ! called by sbcmod.F90
86   PUBLIC   ice_init   ! called by sbcmod.F90
87
88   !!----------------------------------------------------------------------
89   !! NEMO/ICE 4.0 , NEMO Consortium (2018)
90   !! $Id$
91   !! Software governed by the CeCILL license (see ./LICENSE)
92   !!----------------------------------------------------------------------
93CONTAINS
94
95   SUBROUTINE ice_stp( kt, Kbb, Kmm, ksbc )
96      !!---------------------------------------------------------------------
97      !!                  ***  ROUTINE ice_stp  ***
98      !!
99      !! ** Purpose :   sea-ice model time-stepping and update ocean surface
100      !!              boundary condition over ice-covered area
101      !!
102      !! ** Method  :   ice model time stepping
103      !!              - call the ice dynamics routine
104      !!              - call the ice advection/diffusion routine
105      !!              - call the ice thermodynamics routine
106      !!              - call the routine that computes mass and
107      !!                heat fluxes at the ice/ocean interface
108      !!              - save the outputs
109      !!              - save the outputs for restart when necessary
110      !!
111      !! ** Action  : - time evolution of the LIM sea-ice model
112      !!              - update all sbc variables below sea-ice:
113      !!                utau, vtau, taum, wndm, qns , qsr, emp , sfx
114      !!---------------------------------------------------------------------
115      INTEGER, INTENT(in) ::   kt       ! ocean time step
116      INTEGER, INTENT(in) ::   Kbb, Kmm ! ocean time level indices
117      INTEGER, INTENT(in) ::   ksbc     ! flux formulation (user defined, bulk, or Pure Coupled)
118      !
119      INTEGER ::   jl   ! dummy loop index
120      !!----------------------------------------------------------------------
121      !
122      IF( ln_timing )   CALL timing_start('ice_stp')
123      !
124      !                                      !-----------------------!
125      IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN   ! --- Ice time step --- !
126         !                                   !-----------------------!
127         !
128         kt_ice = kt                              ! -- Ice model time step
129         !
130         u_oce(:,:) = ssu_m(:,:)                  ! -- mean surface ocean current
131         v_oce(:,:) = ssv_m(:,:)
132         !
133         CALL eos_fzp( sss_m(:,:) , t_bo(:,:) )   ! -- freezing temperature [Kelvin] (set to rt0 over land)
134         t_bo(:,:) = ( t_bo(:,:) + rt0 ) * tmask(:,:,1) + rt0 * ( 1._wp - tmask(:,:,1) )
135         !
136         !                          !==  AGRIF Parent to Child  ==!
137#if defined key_agrif
138         !                              ! nbstep_ice ranges from 1 to the nb of child ocean steps inside one parent ice step
139         IF( .NOT. Agrif_Root() )       nbstep_ice = MOD( nbstep_ice, Agrif_irhot() * Agrif_Parent(nn_fsbc) / nn_fsbc ) + 1
140         !                              ! these calls must remain here for restartability purposes
141                                        CALL agrif_interp_ice( 'T' ) 
142                                        CALL agrif_interp_ice( 'U' )
143                                        CALL agrif_interp_ice( 'V' )
144#endif
145                                        CALL store_fields             ! Store now ice values
146         !
147         !------------------------------------------------!
148         ! --- Dynamical coupling with the atmosphere --- !
149         !------------------------------------------------!
150         ! It provides the following fields used in sea ice model:
151         !    utau_ice, vtau_ice = surface ice stress [N/m2]
152         !------------------------------------------------!
153                                        CALL ice_sbc_tau( kt, ksbc, utau_ice, vtau_ice )         
154         !-------------------------------------!
155         ! --- ice dynamics and advection  --- !
156         !-------------------------------------!
157                                        CALL diag_set0                ! set diag of mass, heat and salt fluxes to 0
158                                        CALL ice_rst_opn( kt )        ! Open Ice restart file (if necessary)
159         !
160         IF( ln_icedyn .AND. .NOT.lk_c1d )   &
161            &                           CALL ice_dyn( kt, Kmm )       ! -- Ice dynamics
162         !
163         !                          !==  lateral boundary conditions  ==!
164         IF( ln_icethd .AND. ln_bdy )   CALL bdy_ice( kt )            ! -- bdy ice thermo
165         !
166         !                          !==  previous lead fraction and ice volume for flux calculations
167                                        CALL ice_var_glo2eqv          ! h_i and h_s for ice albedo calculation
168                                        CALL ice_var_agg(1)           ! at_i for coupling
169                                        CALL store_fields             ! Store now ice values
170         !
171         !------------------------------------------------------!
172         ! --- Thermodynamical coupling with the atmosphere --- !
173         !------------------------------------------------------!
174         ! It provides the following fields used in sea ice model:
175         !    emp_oce , emp_ice    = E-P over ocean and sea ice                    [Kg/m2/s]
176         !    sprecip              = solid precipitation                           [Kg/m2/s]
177         !    evap_ice             = sublimation                                   [Kg/m2/s]
178         !    qsr_tot , qns_tot    = solar & non solar heat flux (total)           [W/m2]
179         !    qsr_ice , qns_ice    = solar & non solar heat flux over ice          [W/m2]
180         !    dqns_ice             = non solar  heat sensistivity                  [W/m2]
181         !    qemp_oce, qemp_ice,  = sensible heat (associated with evap & precip) [W/m2]
182         !    qprec_ice, qevap_ice
183         !------------------------------------------------------!
184                                        CALL ice_sbc_flx( kt, ksbc )
185         !----------------------------!
186         ! --- ice thermodynamics --- !
187         !----------------------------!
188         IF( ln_icethd )                CALL ice_thd( kt )            ! -- Ice thermodynamics     
189         !
190                                        CALL ice_cor( kt , 2 )        ! -- Corrections
191         !
192                                        CALL ice_var_glo2eqv          ! necessary calls (at least for coupling)
193                                        CALL ice_var_agg( 2 )         ! necessary calls (at least for coupling)
194         !
195                                        CALL ice_update_flx( kt )     ! -- Update ocean surface mass, heat and salt fluxes
196         !
197         IF( ln_icediahsb )             CALL ice_dia( kt )            ! -- Diagnostics outputs
198         !
199                                        CALL ice_wri( kt )            ! -- Ice outputs
200         !
201         IF( lrst_ice )                 CALL ice_rst_write( kt )      ! -- Ice restart file
202         !
203         IF( ln_icectl )                CALL ice_ctl( kt )            ! -- alerts in case of model crash
204         !
205      ENDIF   ! End sea-ice time step only
206
207      !-------------------------!
208      ! --- Ocean time step --- !
209      !-------------------------!
210      IF( ln_icedyn )                   CALL ice_update_tau( kt, uu(:,:,1,Kbb), vv(:,:,1,Kbb) )   ! -- update surface ocean stresses
211!!gm   remark, the ocean-ice stress is not saved in ice diag call above .....  find a solution!!!
212      !
213      IF( ln_timing )   CALL timing_stop('ice_stp')
214      !
215   END SUBROUTINE ice_stp
216
217
218   SUBROUTINE ice_init( Kbb, Kmm, Kaa )
219      !!----------------------------------------------------------------------
220      !!                  ***  ROUTINE ice_init  ***
221      !!
222      !! ** purpose :   Initialize sea-ice parameters
223      !!----------------------------------------------------------------------
224      INTEGER, INTENT(in) :: Kbb, Kmm, Kaa
225      !
226      INTEGER :: ji, jj, ierr
227      !!----------------------------------------------------------------------
228      IF(lwp) WRITE(numout,*)
229      IF(lwp) WRITE(numout,*) 'Sea Ice Model: SI3 (Sea Ice modelling Integrated Initiative)' 
230      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~'
231      IF(lwp) WRITE(numout,*)
232      IF(lwp) WRITE(numout,*) 'ice_init: Arrays allocation & Initialization of all routines & init state' 
233      IF(lwp) WRITE(numout,*) '~~~~~~~~'
234      !
235      !                                ! Load the reference and configuration namelist files and open namelist output file
236      CALL load_nml( numnam_ice_ref, 'namelist_ice_ref',    numout, lwm )
237      CALL load_nml( numnam_ice_cfg, 'namelist_ice_cfg',    numout, lwm )
238      IF(lwm) CALL ctl_opn( numoni , 'output.namelist.ice', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp, 1 )
239      !
240      CALL par_init                ! set some ice run parameters
241      !
242      !                                ! Allocate the ice arrays (sbc_ice already allocated in sbc_init)
243      ierr =        ice_alloc        ()      ! ice variables
244      ierr = ierr + sbc_ice_alloc    ()      ! surface boundary conditions
245      ierr = ierr + ice1D_alloc      ()      ! thermodynamics
246      !
247      CALL mpp_sum( 'icestp', ierr )
248      IF( ierr /= 0 )   CALL ctl_stop('STOP', 'ice_init : unable to allocate ice arrays')
249      !
250      CALL ice_itd_init                ! ice thickness distribution initialization
251      !
252      CALL ice_thd_init                ! set ice thermodynics parameters (clem: important to call it first for melt ponds)
253      !
254      !                                ! Initial sea-ice state
255      IF( .NOT. ln_rstart ) THEN              ! start from rest: sea-ice deduced from sst
256         CALL ice_istate_init
257         CALL ice_istate( nit000, Kbb, Kmm, Kaa )
258      ELSE                                    ! start from a restart file
259         CALL ice_rst_read( Kbb, Kmm, Kaa )
260      ENDIF
261      CALL ice_var_glo2eqv
262      CALL ice_var_agg(1)
263      !
264      CALL ice_sbc_init                ! set ice-ocean and ice-atm. coupling parameters
265      !
266      CALL ice_dyn_init                ! set ice dynamics parameters
267      !
268      CALL ice_update_init             ! ice surface boundary condition
269      !
270      CALL ice_alb_init                ! ice surface albedo
271      !
272      CALL ice_dia_init                ! initialization for diags
273      !
274      fr_i  (:,:)   = at_i(:,:)        ! initialisation of sea-ice fraction
275      tn_ice(:,:,:) = t_su(:,:,:)      ! initialisation of surface temp for coupled simu
276      !
277      !                                ! set max concentration in both hemispheres
278      WHERE( gphit(:,:) > 0._wp )   ;   rn_amax_2d(:,:) = rn_amax_n  ! NH
279      ELSEWHERE                     ;   rn_amax_2d(:,:) = rn_amax_s  ! SH
280      END WHERE
281
282      IF( ln_rstart )   CALL iom_close( numrir )  ! close input ice restart file
283      !
284   END SUBROUTINE ice_init
285
286
287   SUBROUTINE par_init
288      !!-------------------------------------------------------------------
289      !!                  ***  ROUTINE par_init ***
290      !!
291      !! ** Purpose :   Definition generic parameters for ice model
292      !!
293      !! ** Method  :   Read namelist and check the parameter
294      !!                values called at the first timestep (nit000)
295      !!
296      !! ** input   :   Namelist nampar
297      !!-------------------------------------------------------------------
298      INTEGER  ::   ios                 ! Local integer
299      !!
300      NAMELIST/nampar/ jpl, nlay_i, nlay_s, ln_virtual_itd, ln_icedyn, ln_icethd, rn_amax_n, rn_amax_s,  &
301         &             cn_icerst_in, cn_icerst_indir, cn_icerst_out, cn_icerst_outdir
302      !!-------------------------------------------------------------------
303      !
304      READ  ( numnam_ice_ref, nampar, IOSTAT = ios, ERR = 901)
305901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'nampar in reference namelist' )
306      READ  ( numnam_ice_cfg, nampar, IOSTAT = ios, ERR = 902 )
307902   IF( ios > 0 )   CALL ctl_nam ( ios , 'nampar in configuration namelist' )
308      IF(lwm) WRITE( numoni, nampar )
309      !
310      IF(lwp) THEN                  ! control print
311         WRITE(numout,*)
312         WRITE(numout,*) '   par_init: ice parameters shared among all the routines'
313         WRITE(numout,*) '   ~~~~~~~~'
314         WRITE(numout,*) '      Namelist nampar: '
315         WRITE(numout,*) '         number of ice  categories                           jpl       = ', jpl
316         WRITE(numout,*) '         number of ice  layers                               nlay_i    = ', nlay_i
317         WRITE(numout,*) '         number of snow layers                               nlay_s    = ', nlay_s
318         WRITE(numout,*) '         virtual ITD param for jpl=1 (T) or not (F)     ln_virtual_itd = ', ln_virtual_itd
319         WRITE(numout,*) '         Ice dynamics       (T) or not (F)                   ln_icedyn = ', ln_icedyn
320         WRITE(numout,*) '         Ice thermodynamics (T) or not (F)                   ln_icethd = ', ln_icethd
321         WRITE(numout,*) '         maximum ice concentration for NH                              = ', rn_amax_n 
322         WRITE(numout,*) '         maximum ice concentration for SH                              = ', rn_amax_s
323      ENDIF
324      !                                        !--- change max ice concentration for roundoff errors
325      rn_amax_n = MIN( rn_amax_n, 1._wp - epsi10 )
326      rn_amax_s = MIN( rn_amax_s, 1._wp - epsi10 )
327      !                                        !--- check consistency
328      IF ( jpl > 1 .AND. ln_virtual_itd ) THEN
329         ln_virtual_itd = .FALSE.
330         IF(lwp) WRITE(numout,*)
331         IF(lwp) WRITE(numout,*) '   ln_virtual_itd forced to false as jpl>1, no need with multiple categories to emulate them'
332      ENDIF
333      !
334      IF( ln_cpl .AND. nn_cats_cpl /= 1 .AND. nn_cats_cpl /= jpl ) THEN
335         CALL ctl_stop( 'STOP', 'par_init: in coupled mode, nn_cats_cpl should be either 1 or jpl' )
336      ENDIF
337      !
338      IF( ln_bdy .AND. ln_icediachk )   CALL ctl_warn('par_init: online conservation check does not work with BDY')
339      !
340      rdt_ice   = REAL(nn_fsbc) * rdt          !--- sea-ice timestep and its inverse
341      r1_rdtice = 1._wp / rdt_ice
342      IF(lwp) WRITE(numout,*)
343      IF(lwp) WRITE(numout,*) '      ice timestep rdt_ice = nn_fsbc*rdt = ', rdt_ice
344      !
345      r1_nlay_i = 1._wp / REAL( nlay_i, wp )   !--- inverse of nlay_i and nlay_s
346      r1_nlay_s = 1._wp / REAL( nlay_s, wp )
347      !
348   END SUBROUTINE par_init
349
350
351   SUBROUTINE store_fields
352      !!----------------------------------------------------------------------
353      !!                  ***  ROUTINE store_fields  ***
354      !!
355      !! ** purpose :  store ice variables at "before" time step
356      !!----------------------------------------------------------------------
357      INTEGER  ::   ji, jj, jl      ! dummy loop index
358      !!----------------------------------------------------------------------
359      !
360      a_i_b (:,:,:)   = a_i (:,:,:)     ! ice area
361      v_i_b (:,:,:)   = v_i (:,:,:)     ! ice volume
362      v_s_b (:,:,:)   = v_s (:,:,:)     ! snow volume
363      sv_i_b(:,:,:)   = sv_i(:,:,:)     ! salt content
364      oa_i_b(:,:,:)   = oa_i(:,:,:)     ! areal age content
365      e_s_b (:,:,:,:) = e_s (:,:,:,:)   ! snow thermal energy
366      e_i_b (:,:,:,:) = e_i (:,:,:,:)   ! ice thermal energy
367      WHERE( a_i_b(:,:,:) >= epsi20 )
368         h_i_b(:,:,:) = v_i_b(:,:,:) / a_i_b(:,:,:)   ! ice thickness
369         h_s_b(:,:,:) = v_s_b(:,:,:) / a_i_b(:,:,:)   ! snw thickness
370      ELSEWHERE
371         h_i_b(:,:,:) = 0._wp
372         h_s_b(:,:,:) = 0._wp
373      END WHERE
374     
375      WHERE( a_ip(:,:,:) >= epsi20 )
376         h_ip_b(:,:,:) = v_ip(:,:,:) / a_ip(:,:,:)   ! ice pond thickness
377      ELSEWHERE
378         h_ip_b(:,:,:) = 0._wp
379      END WHERE
380      !
381      ! ice velocities & total concentration
382      at_i_b(:,:)  = SUM( a_i_b(:,:,:), dim=3 )
383      u_ice_b(:,:) = u_ice(:,:)
384      v_ice_b(:,:) = v_ice(:,:)
385      !
386   END SUBROUTINE store_fields
387
388
389   SUBROUTINE diag_set0
390      !!----------------------------------------------------------------------
391      !!                  ***  ROUTINE diag_set0  ***
392      !!
393      !! ** purpose :  set ice-ocean and ice-atm. fluxes to zeros at the beggining
394      !!               of the time step
395      !!----------------------------------------------------------------------
396      INTEGER  ::   ji, jj      ! dummy loop index
397      !!----------------------------------------------------------------------
398      sfx    (:,:) = 0._wp   ;
399      sfx_bri(:,:) = 0._wp   ;   sfx_lam(:,:) = 0._wp
400      sfx_sni(:,:) = 0._wp   ;   sfx_opw(:,:) = 0._wp
401      sfx_bog(:,:) = 0._wp   ;   sfx_dyn(:,:) = 0._wp
402      sfx_bom(:,:) = 0._wp   ;   sfx_sum(:,:) = 0._wp
403      sfx_res(:,:) = 0._wp   ;   sfx_sub(:,:) = 0._wp
404      !
405      wfx_snw(:,:) = 0._wp   ;   wfx_ice(:,:) = 0._wp
406      wfx_sni(:,:) = 0._wp   ;   wfx_opw(:,:) = 0._wp
407      wfx_bog(:,:) = 0._wp   ;   wfx_dyn(:,:) = 0._wp
408      wfx_bom(:,:) = 0._wp   ;   wfx_sum(:,:) = 0._wp
409      wfx_res(:,:) = 0._wp   ;   wfx_sub(:,:) = 0._wp
410      wfx_spr(:,:) = 0._wp   ;   wfx_lam(:,:) = 0._wp 
411      wfx_snw_dyn(:,:) = 0._wp ; wfx_snw_sum(:,:) = 0._wp
412      wfx_snw_sub(:,:) = 0._wp ; wfx_ice_sub(:,:) = 0._wp
413      wfx_snw_sni(:,:) = 0._wp 
414      wfx_pnd(:,:) = 0._wp
415
416      hfx_thd(:,:) = 0._wp   ;
417      hfx_snw(:,:) = 0._wp   ;   hfx_opw(:,:) = 0._wp
418      hfx_bog(:,:) = 0._wp   ;   hfx_dyn(:,:) = 0._wp
419      hfx_bom(:,:) = 0._wp   ;   hfx_sum(:,:) = 0._wp
420      hfx_res(:,:) = 0._wp   ;   hfx_sub(:,:) = 0._wp
421      hfx_spr(:,:) = 0._wp   ;   hfx_dif(:,:) = 0._wp
422      hfx_err_rem(:,:) = 0._wp
423      hfx_err_dif(:,:) = 0._wp
424      wfx_err_sub(:,:) = 0._wp
425      !
426      diag_heat(:,:) = 0._wp ;   diag_sice(:,:) = 0._wp
427      diag_vice(:,:) = 0._wp ;   diag_vsnw(:,:) = 0._wp
428
429      ! SIMIP diagnostics
430      qcn_ice_bot(:,:,:) = 0._wp ; qcn_ice_top(:,:,:) = 0._wp ! conductive fluxes
431      t_si       (:,:,:) = rt0   ! temp at the ice-snow interface
432
433      tau_icebfr (:,:)   = 0._wp   ! landfast ice param only (clem: important to keep the init here)
434      cnd_ice    (:,:,:) = 0._wp   ! initialisation: effective conductivity at the top of ice/snow (ln_cndflx=T)
435      qcn_ice    (:,:,:) = 0._wp   ! initialisation: conductive flux (ln_cndflx=T & ln_cndemule=T)
436      qtr_ice_bot(:,:,:) = 0._wp   ! initialization: part of solar radiation transmitted through the ice needed at least for outputs
437      qsb_ice_bot(:,:)   = 0._wp   ! (needed if ln_icethd=F)
438      !
439      ! for control checks (ln_icediachk)
440      diag_trp_vi(:,:) = 0._wp   ;   diag_trp_vs(:,:) = 0._wp
441      diag_trp_ei(:,:) = 0._wp   ;   diag_trp_es(:,:) = 0._wp
442      diag_trp_sv(:,:) = 0._wp
443
444   END SUBROUTINE diag_set0
445
446#else
447   !!----------------------------------------------------------------------
448   !!   Default option           Dummy module         NO SI3 sea-ice model
449   !!----------------------------------------------------------------------
450CONTAINS
451   SUBROUTINE ice_stp ( kt, ksbc )     ! Dummy routine
452      INTEGER, INTENT(in) ::   kt, ksbc
453      WRITE(*,*) 'ice_stp: You should not have seen this print! error?', kt
454   END SUBROUTINE ice_stp
455   SUBROUTINE ice_init                 ! Dummy routine
456   END SUBROUTINE ice_init
457#endif
458
459   !!======================================================================
460END MODULE icestp
Note: See TracBrowser for help on using the repository browser.