source: CONFIG/UNIFORM/v6/IPSLCM6/SOURCES/NEMO/iceini_2.F90 @ 2217

Last change on this file since 2217 was 2217, checked in by aclsce, 10 years ago
  • Removed key_nosignedzero cpp key for NEMO : bad performances obtained with the use of this key (20% more in real time).
  • Removed the writing of ice_evolu file : pb in parallel mode.


File size: 7.8 KB
Line 
1MODULE iceini_2
2   !!======================================================================
3   !!                       ***  MODULE iceini   ***
4   !!   Sea-ice model : LIM 2.0 Sea ice model Initialization
5   !!======================================================================
6   !! History :  1.0  ! 2002-08  (G. Madec)  F90: Free form and modules
7   !!            2.0  ! 2003-08  (C. Ethe)  add ice_run
8   !!            3.3  ! 2009-05  (G. Garric, C. Bricaud) addition of the lim2_evp case
9   !!            4.0  ! 2011-02  (G. Madec) dynamical allocation
10   !!----------------------------------------------------------------------
11#if defined key_lim2
12   !!----------------------------------------------------------------------
13   !!   'key_lim2' :                                  LIM 2.0 sea-ice model
14   !!----------------------------------------------------------------------
15   !!   ice_init_2    : sea-ice model initialization
16   !!   ice_run_2     : Definition some run parameter for ice model
17   !!----------------------------------------------------------------------
18   USE phycst         ! physical constants
19   USE dom_oce        ! ocean domain
20   USE sbc_oce        ! surface boundary condition: ocean
21   USE sbc_ice        ! LIM2 surface boundary condition
22   USE dom_ice_2      ! LIM2 ice domain
23   USE par_ice_2      ! LIM2 parameters
24   USE thd_ice_2      ! LIM2 thermodynamical variables
25   USE ice_2          ! LIM2 ice variable
26   USE limmsh_2       ! LIM2 mesh
27   USE limistate_2    ! LIM2 initial state
28   USE limrst_2       ! LIM2 restart
29   USE limsbc_2       ! LIM2 surface boundary condition
30   USE limdia_2
31   USE in_out_manager ! I/O manager
32   USE lib_mpp        ! MPP library
33   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 
34
35   IMPLICIT NONE
36   PRIVATE
37
38   PUBLIC   ice_init_2               ! called by sbcice_lim_2.F90
39
40   !!----------------------------------------------------------------------
41   !! NEMO/LIM2 4.0 , UCL - NEMO Consortium (2011)
42   !! $Id: iceini_2.F90 4325 2013-11-29 15:27:48Z cbricaud $
43   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
44   !!----------------------------------------------------------------------
45CONTAINS
46
47   SUBROUTINE ice_init_2
48      !!----------------------------------------------------------------------
49      !!                  ***  ROUTINE ice_init_2  ***
50      !!
51      !! ** purpose :   initialisation of LIM-2 domain and variables 
52      !!----------------------------------------------------------------------
53      INTEGER :: ierr
54      !!----------------------------------------------------------------------
55      !
56      IF(lwp) THEN
57         WRITE(numout,*)
58         WRITE(numout,*) 'ice_init_2 : LIM-2 sea-ice - initialization'
59         WRITE(numout,*) '~~~~~~~~~~~   '
60      ENDIF
61      !                                ! Allocate the ice arrays
62      ierr =        ice_alloc_2    ()       ! ice variables
63      ierr = ierr + dom_ice_alloc_2()       ! domain
64      ierr = ierr + sbc_ice_alloc  ()       ! surface forcing
65      ierr = ierr + thd_ice_alloc_2()       ! thermodynamics
66
67      IF( lk_mpp    )   CALL mpp_sum( ierr )
68      IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'ice_init_2 : unable to allocate ice arrays' )
69
70      !                                ! adequation jpk versus ice/snow layers
71      IF( jpl > jpk  .OR.  jplayersp1 > jpk  )   CALL ctl_stop( 'STOP',           &
72         &     'ice_init: the 3rd dimension of workspace arrays is too small.',   &
73         &     'use more ocean levels or less ice layers/categories.' )
74
75      !                                ! Open the reference and configuration namelist files and namelist output file
76      CALL ctl_opn( numnam_ice_ref, 'namelist_ice_ref',    'OLD',     'FORMATTED', 'SEQUENTIAL', -1, numout, lwp ) 
77      CALL ctl_opn( numnam_ice_cfg, 'namelist_ice_cfg',    'OLD',     'FORMATTED', 'SEQUENTIAL', -1, numout, lwp )
78      CALL ctl_opn( numoni,         'output.namelist.ice', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp, 1 )
79
80      ! When Diurnal cycle, core bulk and LIM2  are activated,
81      ! a daily mean qsr is computed for tracer/biogeochemistery model                                 !
82      IF( ltrcdm2dc ) ltrcdm2dc_ice = .TRUE.
83
84      !                                ! Open the namelist file
85      !   
86      CALL ice_run_2                   ! read in namelist some run parameters
87      !         
88      rdt_ice = nn_fsbc * rdttra(1)    ! sea-ice time step
89      numit   = nit000 - 1
90      !
91      CALL lim_msh_2                   ! ice mesh initialization
92      !
93      !                                ! Initial sea-ice state
94      IF( .NOT.ln_rstart ) THEN   ;   CALL lim_istate_2     ! start from rest: sea-ice deduced from sst
95      ELSE                        ;   CALL lim_rst_read_2   ! start from a restart file
96      ENDIF
97      !
98!      CALL lim_dia_init_2
99      !
100      tn_ice(:,:,1) = sist(:,:)        ! ice temperature  known by the ocean
101      fr_i  (:,:)   = 1.0 - frld(:,:)  ! sea-ice fraction known by the ocean
102      !
103      CALL lim_sbc_init_2              ! ice surface boundary condition   
104      !
105      IF( lk_lim2_vp )   THEN   ;   IF(lwp) WRITE(numout,*) '                VP  rheology - B-grid case'
106      ELSE                      ;   IF(lwp) WRITE(numout,*) '                EVP rheology - C-grid case'
107      ENDIF
108      !
109   END SUBROUTINE ice_init_2
110
111
112   SUBROUTINE ice_run_2
113      !!-------------------------------------------------------------------
114      !!                  ***  ROUTINE ice_run_2 ***
115      !!                 
116      !! ** Purpose :   Definition some run parameter for ice model
117      !!
118      !! ** Method  :   Read the namicerun namelist and check the parameter
119      !!       values called at the first timestep (nit000)
120      !!
121      !! ** input   :   Namelist namicerun
122      !!-------------------------------------------------------------------
123      NAMELIST/namicerun/ cn_icerst_in, cn_icerst_out, ln_limdyn, ln_limdmp, acrit, hsndif, hicdif
124      INTEGER  ::   ios                 ! Local integer output status for namelist read
125      !!-------------------------------------------------------------------
126      !                   
127      REWIND( numnam_ice_ref )              ! Namelist namicerun in reference namelist : Parameters for ice
128      READ  ( numnam_ice_ref, namicerun, IOSTAT = ios, ERR = 901)
129901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namicerun in reference namelist', lwp )
130
131      REWIND( numnam_ice_cfg )              ! Namelist namicerun in configuration namelist : Parameters for ice
132      READ  ( numnam_ice_cfg, namicerun, IOSTAT = ios, ERR = 902 )
133902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namicerun in configuration namelist', lwp )
134      WRITE ( numoni, namicerun )
135      !
136      IF(lwp) THEN                              ! control print
137         WRITE(numout,*)
138         WRITE(numout,*) 'ice_run : ice share parameters for dynamics/advection/thermo of sea-ice'
139         WRITE(numout,*) ' ~~~~~~'
140         WRITE(numout,*) '   switch for ice dynamics (1) or not (0)      ln_limdyn   = ', ln_limdyn
141         WRITE(numout,*) '   Ice damping                                 ln_limdmp   = ', ln_limdmp
142         WRITE(numout,*) '   minimum fraction for leads in the NH (SH)  acrit(1/2)   = ', acrit(:)
143         WRITE(numout,*) '   computation of temp. in snow (=0) or not (=9999) hsndif = ', hsndif
144         WRITE(numout,*) '   computation of temp. in ice  (=0) or not (=9999) hicdif = ', hicdif
145      ENDIF
146      !
147   END SUBROUTINE ice_run_2
148
149#else
150   !!----------------------------------------------------------------------
151   !!   Default option :        Empty module       NO LIM 2.0 sea-ice model
152   !!----------------------------------------------------------------------
153CONTAINS
154   SUBROUTINE ice_init_2      ! Empty routine
155   END SUBROUTINE ice_init_2
156#endif
157
158   !!======================================================================
159END MODULE iceini_2
Note: See TracBrowser for help on using the repository browser.