source: branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/icestp.F90 @ 8518

Last change on this file since 8518 was 8518, checked in by clem, 3 years ago

changes in style - part6 - commits of the day

File size: 22.0 KB
Line 
1MODULE icestp
2   !!======================================================================
3   !!                       ***  MODULE  icestp  ***
4   !! Surface module :  update the ocean surface boundary condition over ice
5   !!       &           covered area using LIM sea-ice model
6   !! Sea-Ice model  :  LIM-3 Sea ice model time-stepping
7   !!=====================================================================
8   !! History :  2.0  ! 2006-12  (M. Vancoppenolle) Original code
9   !!            3.0  ! 2008-02  (C. Talandier)  Surface module from icestp.F90
10   !!             -   ! 2008-04  (G. Madec)  sltyle and ice_ctl routine
11   !!            3.3  ! 2010-11  (G. Madec) ice-ocean stress always computed at each ocean time-step
12   !!            3.4  ! 2011-01  (A Porter)  dynamical allocation
13   !!             -   ! 2012-10  (C. Rousset)  add ice_dia
14   !!            3.6  ! 2014-07  (M. Vancoppenolle, G. Madec, O. Marti) revise coupled interface
15   !!            4.0  ! 2016-06  (L. Brodeau) new unified bulk routine (based on AeroBulk)
16   !!----------------------------------------------------------------------
17#if defined key_lim3
18   !!----------------------------------------------------------------------
19   !!   'key_lim3'                                    LIM 3.0 sea-ice model
20   !!----------------------------------------------------------------------
21   !!   ice_stp       : sea-ice model time-stepping and update ocean surf. boundary cond. over ice-covered area
22   !!   ice_init      :
23   !!   ice_run_init  :
24   !!----------------------------------------------------------------------
25   USE oce            ! ocean dynamics and tracers
26   USE dom_oce        ! ocean space and time domain
27   USE c1d            ! 1D vertical configuration
28   USE ice            ! sea-ice: variables
29   USE ice1D          ! sea-ice: thermodynamical 1D variables
30   !
31   USE sbc_oce        ! Surface boundary condition: ocean fields
32   USE sbc_ice        ! Surface boundary condition: ice   fields
33   USE iceforcing     ! sea-ice: Surface boundary condition       !!gm why not icesbc module name
34   !
35   USE phycst         ! Define parameters for the routines
36   USE eosbn2         ! equation of state
37   USE icerhg         ! sea-ice: rheology
38   USE iceadv         ! sea-ice: advection
39   USE icedyn         ! sea-ice: dynamics
40   USE icethd         ! sea-ice: thermodynamics
41   USE icerdgrft      ! sea-ice: ridging/rafting
42   USE iceupdate      ! sea-ice: sea surface boundary condition update
43   USE icedia         ! sea-ice: budget diagnostics
44   USE icewri         ! sea-ice: outputs
45   USE icerst         ! sea-ice: restarts
46   USE icecor         ! sea-ice: corrections
47   USE icevar         ! sea-ice: operations
48   USE icectl         ! sea-ice: control
49   ! MV MP 2016
50   USE limmp          ! sea-ice: melt ponds
51   ! END MV MP 2016
52   USE iceistate      ! sea-ice: initial state
53   USE icethd_sal     ! sea-ice: thermodynamics and salinity
54   USE iceitd         ! sea-ice: remapping thickness distribution
55   USE icealb         ! sea-ice: albedo
56   !
57   USE bdy_oce , ONLY : ln_bdy   ! flag for bdy
58   USE bdyice         ! unstructured open boundary data for sea-ice
59# if defined key_agrif
60   USE agrif_ice
61   USE agrif_lim3_update
62   USE agrif_lim3_interp
63# endif
64   !
65   USE in_out_manager ! I/O manager
66   USE iom            ! I/O manager library
67   USE prtctl         ! Print control
68   USE lib_fortran    !
69   USE lbclnk         ! lateral boundary condition - MPP link
70   USE lib_mpp        ! MPP library
71   USE timing         ! Timing
72
73   IMPLICIT NONE
74   PRIVATE
75
76   PUBLIC   ice_stp    ! called by sbcmod.F90
77   PUBLIC   ice_init   ! called by sbcmod.F90
78
79   !! * Substitutions
80#  include "vectopt_loop_substitute.h90"
81   !!----------------------------------------------------------------------
82   !! NEMO/ICE 4.0 , NEMO Consortium (2017)
83   !! $Id: icestp.F90 8319 2017-07-11 15:00:44Z clem $
84   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
85   !!----------------------------------------------------------------------
86CONTAINS
87
88   SUBROUTINE ice_stp( kt, ksbc )
89      !!---------------------------------------------------------------------
90      !!                  ***  ROUTINE ice_stp  ***
91      !!
92      !! ** Purpose :   sea-ice model time-stepping and update ocean surface
93      !!              boundary condition over ice-covered area
94      !!
95      !! ** Method  :   ice model time stepping
96      !!              - call the ice dynamics routine
97      !!              - call the ice advection/diffusion routine
98      !!              - call the ice thermodynamics routine
99      !!              - call the routine that computes mass and
100      !!                heat fluxes at the ice/ocean interface
101      !!              - save the outputs
102      !!              - save the outputs for restart when necessary
103      !!
104      !! ** Action  : - time evolution of the LIM sea-ice model
105      !!              - update all sbc variables below sea-ice:
106      !!                utau, vtau, taum, wndm, qns , qsr, emp , sfx
107      !!---------------------------------------------------------------------
108      INTEGER, INTENT(in) ::   kt      ! ocean time step
109      INTEGER, INTENT(in) ::   ksbc    ! flux formulation (user defined, bulk, or Pure Coupled)
110      !
111      INTEGER ::   jl   ! dummy loop index
112      !!----------------------------------------------------------------------
113      !
114      IF( nn_timing == 1 )   CALL timing_start('ice_stp')
115      !
116      !                                      !-----------------------!
117      IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN   ! --- Ice time step --- !
118         !                                   !-----------------------!
119         !
120         kt_ice = kt                              ! -- Ice model time step
121         !
122# if defined key_agrif
123         IF( .NOT. Agrif_Root() )  lim_nbstep = MOD( lim_nbstep, Agrif_irhot() * Agrif_Parent(nn_fsbc) / nn_fsbc ) + 1
124# endif
125         u_oce(:,:) = ssu_m(:,:)                  ! -- mean surface ocean current
126         v_oce(:,:) = ssv_m(:,:)
127         !
128         CALL eos_fzp( sss_m(:,:) , t_bo(:,:) )   ! -- freezing temperature [Kelvin] (set to rt0 over land)
129         t_bo(:,:) = ( t_bo(:,:) + rt0 ) * tmask(:,:,1) + rt0 * ( 1._wp - tmask(:,:,1) )
130         !
131         CALL store_fields                        ! -- Store now ice values
132         !
133         !------------------------------------------------!
134         ! --- Dynamical coupling with the atmosphere --- !
135         !------------------------------------------------!
136         ! It provides the following fields used in sea ice model:
137         !    utau_ice, vtau_ice = surface ice stress [N/m2]
138         !------------------------------------------------!
139         CALL ice_forcing_tau( kt, ksbc, utau_ice, vtau_ice )
140                                     
141         !-------------------------------------!
142         ! --- ice dynamics and advection  --- !
143         !-------------------------------------!
144         CALL ice_diag0             ! set diag of mass, heat and salt fluxes to 0
145         CALL ice_rst_opn( kt )     ! Open Ice restart file (if necessary)
146         !
147         IF( ln_icedyn .AND. .NOT.lk_c1d )   CALL ice_dyn( kt )            ! -- Ice dynamics
148         !
149         !                          !==  lateral boundary conditions  ==!
150#if defined key_agrif
151         IF( .NOT. Agrif_Root()     )        CALL agrif_interp_lim3('T')   ! -- AGRIF
152#endif
153         IF( ln_icethd .AND. ln_bdy )        CALL bdy_ice( kt )            ! -- bdy ice thermo
154         !
155         !
156         !                          !==  previous lead fraction and ice volume for flux calculations
157         !
158         CALL ice_var_glo2eqv            ! ht_i and ht_s for ice albedo calculation
159         CALL ice_var_agg(1)             ! at_i for coupling
160         CALL store_fields               ! Store now ice values
161
162         !------------------------------------------------------!
163         ! --- Thermodynamical coupling with the atmosphere --- !
164         !------------------------------------------------------!
165         ! It provides the following fields used in sea ice model:
166         !    fr1_i0  , fr2_i0     = 1sr & 2nd fraction of qsr penetration in ice  [%]
167         !    emp_oce , emp_ice    = E-P over ocean and sea ice                    [Kg/m2/s]
168         !    sprecip              = solid precipitation                           [Kg/m2/s]
169         !    evap_ice             = sublimation                                   [Kg/m2/s]
170         !    qsr_tot , qns_tot    = solar & non solar heat flux (total)           [W/m2]
171         !    qsr_ice , qns_ice    = solar & non solar heat flux over ice          [W/m2]
172         !    dqns_ice             = non solar  heat sensistivity                  [W/m2]
173         !    qemp_oce, qemp_ice,  = sensible heat (associated with evap & precip) [W/m2]
174         !    qprec_ice, qevap_ice
175         !------------------------------------------------------!
176                                    CALL ice_forcing_flx( kt, ksbc )
177
178         !----------------------------!
179         ! --- ice thermodynamics --- !
180         !----------------------------!
181         IF( ln_icethd )            CALL ice_thd( kt )          ! -- Ice thermodynamics     
182
183         ! MV MP 2016
184         IF ( ln_pnd )              CALL lim_mp( kt )           ! -- Melt ponds
185         ! END MV MP 2016
186
187         IF( ln_icethd )            CALL ice_cor( kt , 2 )      ! -- Corrections
188         ! ---
189# if defined key_agrif
190         IF( .NOT. Agrif_Root() )   CALL agrif_update_lim3( kt )
191# endif
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!! clem: one should switch the calculation of the fluxes onto the parent grid but the following calls do not work
196!!       moreover it should only be called at the update frequency (as in agrif_lim3_update.F90)
197!!# if defined key_agrif
198!!         IF( .NOT. Agrif_Root() )   CALL Agrif_ChildGrid_To_ParentGrid()
199!!# endif
200                                    CALL ice_update_flx( kt )   ! -- Update ocean surface mass, heat and salt fluxes
201!!# if defined key_agrif
202!!         IF( .NOT. Agrif_Root() )   CALL Agrif_ParentGrid_To_ChildGrid()
203!!# endif
204         IF( ln_icediahsb )         CALL ice_dia( kt )        ! -- Diagnostics and outputs
205         !
206                                    CALL ice_wri( 1 )         ! -- Ice outputs
207         !
208         !
209         IF( lrst_ice )             CALL ice_rst_write( kt )  ! -- Ice restart file
210         !
211         IF( ln_icectl )            CALL ice_ctl( kt )        ! alerts in case of model crash
212         !
213      ENDIF   ! End sea-ice time step only
214
215      !-------------------------!
216      ! --- Ocean time step --- !
217      !-------------------------!
218      ! Update surface ocean stresses (only in ice-dynamic case) otherwise the atm.-ocean stresses are used everywhere
219      !    using before instantaneous surf. currents
220      IF( ln_icedyn )               CALL ice_update_tau( kt, ub(:,:,1), vb(:,:,1) )
221!!gm   remark, the ocean-ice stress is not saved in ice diag call above .....  find a solution!!!
222      !
223      IF( nn_timing == 1 ) CALL timing_stop('ice_stp')
224      !
225   END SUBROUTINE ice_stp
226
227
228   SUBROUTINE ice_init
229      !!----------------------------------------------------------------------
230      !!                  ***  ROUTINE ice_init  ***
231      !!
232      !! ** purpose :   Allocate all the dynamic arrays of the LIM-3 modules
233      !!----------------------------------------------------------------------
234      INTEGER :: ji, jj, ierr
235      !!----------------------------------------------------------------------
236      IF(lwp) WRITE(numout,*)
237      IF(lwp) WRITE(numout,*) 'ice_init: Arrays allocation & Initialization off all routines & init state' 
238      IF(lwp) WRITE(numout,*) '~~~~~~~~'
239      !
240      !                                ! Open the reference and configuration namelist files and namelist output file
241      CALL ctl_opn( numnam_ice_ref, 'namelist_ice_ref',    'OLD',     'FORMATTED', 'SEQUENTIAL', -1, numout, lwp )
242      CALL ctl_opn( numnam_ice_cfg, 'namelist_ice_cfg',    'OLD',     'FORMATTED', 'SEQUENTIAL', -1, numout, lwp )
243      IF(lwm) CALL ctl_opn( numoni, 'output.namelist.ice', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp, 1 )
244      !
245      CALL ice_run_init                ! set some ice run parameters
246      !
247      !                                ! Allocate the ice arrays (sbc_ice already allocated in sbc_init)
248      ierr =        ice_alloc        ()      ! ice variables
249      ierr = ierr + sbc_ice_alloc    ()      ! surface forcing
250      ierr = ierr + ice1D_alloc      ()      ! thermodynamics
251      !
252      IF( lk_mpp    )   CALL mpp_sum( ierr )
253      IF( ierr /= 0 )   CALL ctl_stop('STOP', 'ice_init : unable to allocate ice arrays')
254      !
255      CALL ice_itd_init                ! ice thickness distribution initialization
256      !
257      ! MV MP 2016
258      CALL lim_mp_init                 ! set melt ponds parameters (clem: important to be located here)
259      ! END MV MP 2016
260      !                                ! Initial sea-ice state
261      IF( .NOT. ln_rstart ) THEN              ! start from rest: sea-ice deduced from sst
262         CALL ice_istate_init
263         CALL ice_istate
264      ELSE                                    ! start from a restart file
265         CALL ice_rst_read
266      ENDIF
267      CALL ice_var_agg(2)
268      CALL ice_var_glo2eqv
269      !
270      IF( ln_icedyn ) THEN
271         CALL ice_dyn_init             ! set ice dynamics parameters
272         CALL ice_rdgrft_init          ! set ice ridging/rafting parameters
273         CALL ice_rhg_init             ! set ice rheology parameters
274         CALL ice_adv_init             ! set ice advection parameters
275      ENDIF
276
277      IF( ln_icethd ) THEN
278         CALL ice_thd_init             ! set ice thermodynics parameters
279         CALL ice_thd_sal_init         ! set ice salinity parameters
280      ENDIF   
281      !
282      CALL ice_update_init             ! ice surface boundary condition
283      !
284      CALL ice_alb_init                ! ice surface albedo
285      !
286      CALL ice_dia_init                ! initialization for diags
287      !
288      fr_i  (:,:)   = at_i(:,:)        ! initialisation of sea-ice fraction
289      tn_ice(:,:,:) = t_su(:,:,:)      ! initialisation of surface temp for coupled simu
290      !
291      !                                ! set max concentration in both hemispheres
292      WHERE( gphit(:,:) > 0._wp )   ;   rn_amax_2d(:,:) = rn_amax_n  ! NH
293      ELSEWHERE                     ;   rn_amax_2d(:,:) = rn_amax_s  ! SH
294      END WHERE
295
296      IF( ln_rstart )   CALL iom_close( numrir )  ! close input ice restart file
297      !
298   END SUBROUTINE ice_init
299
300
301   SUBROUTINE ice_run_init
302      !!-------------------------------------------------------------------
303      !!                  ***  ROUTINE ice_run_init ***
304      !!
305      !! ** Purpose :   Definition some run parameter for ice model
306      !!
307      !! ** Method  :   Read the namice_run namelist and check the parameter
308      !!                values called at the first timestep (nit000)
309      !!
310      !! ** input   :   Namelist namice_run
311      !!-------------------------------------------------------------------
312      INTEGER  ::   ios                 ! Local integer output status for namelist read
313      NAMELIST/namice_run/ jpl, nlay_i, nlay_s, nn_monocat, ln_icedyn, ln_icethd, rn_amax_n, rn_amax_s,  &
314         &                 cn_icerst_in, cn_icerst_indir, cn_icerst_out, cn_icerst_outdir
315      !!-------------------------------------------------------------------
316      !
317      REWIND( numnam_ice_ref )      ! Namelist namice_run in reference namelist : Parameters for ice
318      READ  ( numnam_ice_ref, namice_run, IOSTAT = ios, ERR = 901)
319901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namice_run in reference namelist', lwp )
320
321      REWIND( numnam_ice_cfg )      ! Namelist namice_run in configuration namelist : Parameters for ice
322      READ  ( numnam_ice_cfg, namice_run, IOSTAT = ios, ERR = 902 )
323902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namice_run in configuration namelist', lwp )
324      IF(lwm) WRITE ( numoni, namice_run )
325      !
326      IF(lwp) THEN                  ! control print
327         WRITE(numout,*)
328         WRITE(numout,*) 'ice_run_init : ice share parameters for dynamics/advection/thermo of sea-ice'
329         WRITE(numout,*) ' ~~~~~~'
330         WRITE(numout,*) '   Namelist namice_run : '
331         WRITE(numout,*) '      number of ice  categories                              jpl    = ', jpl
332         WRITE(numout,*) '      number of ice  layers                                  nlay_i = ', nlay_i
333         WRITE(numout,*) '      number of snow layers                                  nlay_s = ', nlay_s
334         WRITE(numout,*) '      virtual ITD mono-category param (1-4) or not (0)   nn_monocat = ', nn_monocat
335         WRITE(numout,*) '      Ice dynamics       (T) or not (F)                  ln_icedyn  = ', ln_icedyn
336         WRITE(numout,*) '      Ice thermodynamics (T) or not (F)                  ln_icethd  = ', ln_icethd
337         WRITE(numout,*) '      maximum ice concentration for NH                              = ', rn_amax_n 
338         WRITE(numout,*) '      maximum ice concentration for SH                              = ', rn_amax_s
339      ENDIF
340      !
341      !                                        !--- check consistency
342      IF ( jpl > 1 .AND. nn_monocat == 1 ) THEN
343         nn_monocat = 0
344         IF(lwp) WRITE(numout,*)
345         IF(lwp) WRITE(numout,*) '   nn_monocat forced to 0 as jpl>1, i.e. multi-category case is chosen'
346      ENDIF
347      IF ( jpl == 1 .AND. nn_monocat == 0 ) THEN
348         CALL ctl_stop( 'STOP', 'ice_run_init : if jpl=1 then nn_monocat should be between 1 and 4' )
349      ENDIF
350      !
351      IF( ln_bdy .AND. ln_icediachk )   CALL ctl_warn('ice_run_init: online conservation check does not work with BDY')
352      !
353      rdt_ice   = REAL(nn_fsbc) * rdt          !--- sea-ice timestep and inverse
354      r1_rdtice = 1._wp / rdt_ice
355      IF( lwp ) WRITE(numout,*) '   ice timestep rdt_ice = ', rdt_ice
356      !
357      r1_nlay_i = 1._wp / REAL( nlay_i, wp )   !--- inverse of nlay_i and nlay_s
358      r1_nlay_s = 1._wp / REAL( nlay_s, wp )
359      !
360   END SUBROUTINE ice_run_init
361
362
363   SUBROUTINE store_fields
364      !!----------------------------------------------------------------------
365      !!                  ***  ROUTINE store_fields  ***
366      !!
367      !! ** purpose :  store ice variables at "before" time step
368      !!----------------------------------------------------------------------
369      INTEGER  ::   ji, jj, jl      ! dummy loop index
370      !!----------------------------------------------------------------------
371      !
372      a_i_b  (:,:,:)   = a_i  (:,:,:)     ! ice area
373      v_i_b  (:,:,:)   = v_i  (:,:,:)     ! ice volume
374      v_s_b  (:,:,:)   = v_s  (:,:,:)     ! snow volume
375      smv_i_b(:,:,:)   = smv_i(:,:,:)     ! salt content
376      oa_i_b (:,:,:)   = oa_i (:,:,:)     ! areal age content
377      e_s_b  (:,:,:,:) = e_s  (:,:,:,:)   ! snow thermal energy
378      e_i_b  (:,:,:,:) = e_i  (:,:,:,:)   ! ice thermal energy
379      WHERE( a_i_b(:,:,:) >= epsi20 )
380         ht_i_b(:,:,:) = v_i_b (:,:,:) / a_i_b(:,:,:)   ! ice thickness
381         ht_s_b(:,:,:) = v_s_b (:,:,:) / a_i_b(:,:,:)   ! snw thickness
382      ELSEWHERE
383         ht_i_b(:,:,:) = 0._wp
384         ht_s_b(:,:,:) = 0._wp
385      END WHERE
386     
387      ! ice velocities & total concentration
388      at_i_b(:,:)  = SUM( a_i_b(:,:,:), dim=3 )
389      u_ice_b(:,:) = u_ice(:,:)
390      v_ice_b(:,:) = v_ice(:,:)
391      !
392   END SUBROUTINE store_fields
393
394
395   SUBROUTINE ice_diag0
396      !!----------------------------------------------------------------------
397      !!                  ***  ROUTINE ice_diag0  ***
398      !!
399      !! ** purpose :  set ice-ocean and ice-atm. fluxes to zeros at the beggining
400      !!               of the time step
401      !!----------------------------------------------------------------------
402      INTEGER  ::   ji, jj      ! dummy loop index
403      !!----------------------------------------------------------------------
404      sfx    (:,:) = 0._wp   ;
405      sfx_bri(:,:) = 0._wp   ;   sfx_lam(:,:) = 0._wp
406      sfx_sni(:,:) = 0._wp   ;   sfx_opw(:,:) = 0._wp
407      sfx_bog(:,:) = 0._wp   ;   sfx_dyn(:,:) = 0._wp
408      sfx_bom(:,:) = 0._wp   ;   sfx_sum(:,:) = 0._wp
409      sfx_res(:,:) = 0._wp   ;   sfx_sub(:,:) = 0._wp
410      !
411      wfx_snw(:,:) = 0._wp   ;   wfx_ice(:,:) = 0._wp
412      wfx_sni(:,:) = 0._wp   ;   wfx_opw(:,:) = 0._wp
413      wfx_bog(:,:) = 0._wp   ;   wfx_dyn(:,:) = 0._wp
414      wfx_bom(:,:) = 0._wp   ;   wfx_sum(:,:) = 0._wp
415      wfx_res(:,:) = 0._wp   ;   wfx_sub(:,:) = 0._wp
416      wfx_spr(:,:) = 0._wp   ;   wfx_lam(:,:) = 0._wp 
417      wfx_snw_dyn(:,:) = 0._wp ; wfx_snw_sum(:,:) = 0._wp
418      wfx_snw_sub(:,:) = 0._wp ; wfx_ice_sub(:,:) = 0._wp
419      wfx_snw_sni(:,:) = 0._wp 
420      ! MV MP 2016
421      wfx_pnd(:,:) = 0._wp
422      ! END MV MP 2016
423
424      hfx_thd(:,:) = 0._wp   ;
425      hfx_snw(:,:) = 0._wp   ;   hfx_opw(:,:) = 0._wp
426      hfx_bog(:,:) = 0._wp   ;   hfx_dyn(:,:) = 0._wp
427      hfx_bom(:,:) = 0._wp   ;   hfx_sum(:,:) = 0._wp
428      hfx_res(:,:) = 0._wp   ;   hfx_sub(:,:) = 0._wp
429      hfx_spr(:,:) = 0._wp   ;   hfx_dif(:,:) = 0._wp
430      hfx_err_rem(:,:) = 0._wp
431      hfx_err_dif(:,:) = 0._wp
432      wfx_err_sub(:,:) = 0._wp
433      !
434      afx_tot(:,:) = 0._wp   ;
435      !
436      diag_heat(:,:) = 0._wp ;   diag_smvi(:,:) = 0._wp
437      diag_vice(:,:) = 0._wp ;   diag_vsnw(:,:) = 0._wp
438
439      ! SIMIP diagnostics
440      diag_fc_bo(:,:)    = 0._wp ; diag_fc_su(:,:)    = 0._wp
441
442      tau_icebfr(:,:) = 0._wp; ! landfast ice param only (clem: important to keep the init here)
443     
444   END SUBROUTINE ice_diag0
445
446#else
447   !!----------------------------------------------------------------------
448   !!   Default option           Dummy module      NO LIM 3.0 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.