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 branches/2017/dev_merge_2017/NEMOGCM/NEMO/LIM_SRC_3 – NEMO

source: branches/2017/dev_merge_2017/NEMOGCM/NEMO/LIM_SRC_3/icestp.F90 @ 9485

Last change on this file since 9485 was 9485, checked in by clem, 6 years ago

make sure that the double zoom configuration agrif_nordic is restartable. One must have moved the call to sea ice update at the end of step (after integrate_childgrids)

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