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.
limistate_2.F90 in trunk/NEMO/LIM_SRC_2 – NEMO

source: trunk/NEMO/LIM_SRC_2/limistate_2.F90 @ 1074

Last change on this file since 1074 was 1045, checked in by ctlod, 16 years ago

remove useless declarations, see ticket: #177

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.6 KB
RevLine 
[821]1MODULE limistate_2
[3]2   !!======================================================================
[821]3   !!                     ***  MODULE  limistate_2  ***
[3]4   !!              Initialisation of diagnostics ice variables
5   !!======================================================================
[888]6   !! History :   1.0  !  01-04  (C. Ethe, G. Madec)  Original code
7   !!             2.0  !  03-08  (G. Madec)  add lim_istate_init
[508]8   !!                  !  04-04  (S. Theetten) initialization from a file
9   !!                  !  06-07  (S. Masson)  IOM to read the restart
[888]10   !!                  !  07-10  (G. Madec)  surface module
[508]11   !!--------------------------------------------------------------------
[821]12#if defined key_lim2
[3]13   !!----------------------------------------------------------------------
[821]14   !!   'key_lim2' :                                  LIM 2.0 sea-ice model
[3]15   !!----------------------------------------------------------------------
[508]16   !!----------------------------------------------------------------------
[821]17   !!   lim_istate_2      :  Initialisation of diagnostics ice variables
18   !!   lim_istate_init_2 :  initialization of ice state and namelist read
[3]19   !!----------------------------------------------------------------------
20   USE phycst
[821]21   USE par_ice_2       ! ice parameters
[3]22   USE ice_oce         ! ice variables
[821]23   USE dom_ice_2
[1037]24   USE eosbn2          ! equation of state
[508]25   USE lbclnk
[888]26   USE oce
[821]27   USE ice_2
[508]28   USE iom
29   USE in_out_manager
[3]30
31   IMPLICIT NONE
32   PRIVATE
33
[821]34   PUBLIC lim_istate_2      ! routine called by lim_init_2.F90
[3]35
[719]36   REAL(wp) ::           &  !!! ** init namelist (namiceini) **
[3]37      ttest  = 2.0  ,    &  ! threshold water temperature for initial sea ice
38      hninn  = 0.5  ,    &  ! initial snow thickness in the north
39      hginn  = 3.0  ,    &  ! initial ice thickness in the north
40      alinn  = 0.05 ,    &  ! initial leads area in the north
41      hnins  = 0.1  ,    &  ! initial snow thickness in the south
42      hgins  = 1.0  ,    &  ! initial ice thickness in the south
43      alins  = 0.1          ! initial leads area in the south
44
[77]45   REAL(wp)  ::          &  ! constant values
46      zzero   = 0.e0  ,  &
47      zone    = 1.e0
[3]48   !!----------------------------------------------------------------------
[508]49   !!   LIM 2.0,  UCL-LOCEAN-IPSL (2006)
[888]50   !! $ Id: $
[508]51   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
[3]52   !!----------------------------------------------------------------------
53
54CONTAINS
55
[821]56   SUBROUTINE lim_istate_2
[3]57      !!-------------------------------------------------------------------
[821]58      !!                    ***  ROUTINE lim_istate_2  ***
[3]59      !!
[77]60      !! ** Purpose :   defined the sea-ice initial state
61      !!
62      !! ** Method  :   restart from a state defined in a binary file
63      !!                or from arbitrary sea-ice conditions
[3]64      !!--------------------------------------------------------------------
[508]65      INTEGER  ::   ji, jj, jk                ! dummy loop indices
[1045]66      REAL(wp) ::   zidto                     ! temporary scalar
[3]67      !--------------------------------------------------------------------
[888]68 
69      CALL lim_istate_init_2     !  reading the initials parameters of the ice
[3]70
[888]71      IF( .NOT. ln_limini ) THEN 
[419]72         
[1037]73         tfu(:,:) = tfreez( sn(:,:,1) ) * tmask(:,:,1)       ! freezing/melting point of sea water [Celcius]
74
[419]75         DO jj = 1, jpj
76            DO ji = 1, jpi
[1037]77               !                     ! ice if sst <= t-freez + ttest
78               IF( tn(ji,jj,1)  - tfu(ji,jj) >= ttest ) THEN   ;   zidto = 0.e0      ! no ice
79               ELSE                                            ;   zidto = 1.e0      !    ice
80               ENDIF
81               !
[419]82               IF( fcor(ji,jj) >= 0.e0 ) THEN     !--  Northern hemisphere.
83                  hicif(ji,jj)   = zidto * hginn
84                  frld(ji,jj)    = zidto * alinn + ( 1.0 - zidto ) * 1.0
85                  hsnif(ji,jj)   = zidto * hninn
86               ELSE                               !---  Southern hemisphere.
87                  hicif(ji,jj)   = zidto * hgins
88                  frld(ji,jj)    = zidto * alins + ( 1.0 - zidto ) * 1.0
89                  hsnif(ji,jj)   = zidto * hnins
90               ENDIF
91            END DO
92         END DO
[1037]93
94         tfu(:,:) = tfu(:,:) + rt0       ! ftu converted from Celsius to Kelvin (rt0 over land)
[419]95         
96         sist  (:,:)   = tfu(:,:)
97         tbif  (:,:,1) = tfu(:,:)
98         tbif  (:,:,2) = tfu(:,:)
99         tbif  (:,:,3) = tfu(:,:)
[888]100
[419]101      ENDIF
[888]102     
[3]103      fsbbq (:,:)   = 0.e0
104      qstoif(:,:)   = 0.e0
[888]105      ui_ice(:,:)   = 0.e0
106      vi_ice(:,:)   = 0.e0
[3]107# if defined key_coupled
108      albege(:,:)   = 0.8 * tms(:,:)
109# endif
110
[77]111      !---  Moments for advection.             
[3]112
[77]113      sxice (:,:)  = 0.e0   ;   sxsn (:,:)  = 0.e0   ;   sxa  (:,:)  = 0.e0
114      syice (:,:)  = 0.e0   ;   sysn (:,:)  = 0.e0   ;   sya  (:,:)  = 0.e0
115      sxxice(:,:)  = 0.e0   ;   sxxsn(:,:)  = 0.e0   ;   sxxa (:,:)  = 0.e0
116      syyice(:,:)  = 0.e0   ;   syysn(:,:)  = 0.e0   ;   syya (:,:)  = 0.e0
117      sxyice(:,:)  = 0.e0   ;   sxysn(:,:)  = 0.e0   ;   sxya (:,:)  = 0.e0
[3]118
[77]119      sxc0  (:,:)  = 0.e0   ;   sxc1 (:,:)  = 0.e0   ;   sxc2 (:,:)  = 0.e0
120      syc0  (:,:)  = 0.e0   ;   syc1 (:,:)  = 0.e0   ;   syc2 (:,:)  = 0.e0
121      sxxc0 (:,:)  = 0.e0   ;   sxxc1(:,:)  = 0.e0   ;   sxxc2(:,:)  = 0.e0
122      syyc0 (:,:)  = 0.e0   ;   syyc1(:,:)  = 0.e0   ;   syyc2(:,:)  = 0.e0
123      sxyc0 (:,:)  = 0.e0   ;   sxyc1(:,:)  = 0.e0   ;   sxyc2(:,:)  = 0.e0
[3]124
[77]125      sxst  (:,:)  = 0.e0
126      syst  (:,:)  = 0.e0
127      sxxst (:,:)  = 0.e0
128      syyst (:,:)  = 0.e0
129      sxyst (:,:)  = 0.e0
[3]130
[77]131      !-- lateral boundary conditions
132      CALL lbc_lnk( hicif, 'T', 1. )
133      CALL lbc_lnk( frld , 'T', 1. )
[299]134
135      ! C A U T I O N  frld = 1 over land and lbc_lnk put zero along
136      ! *************  closed boundaries herefore we force to one over land
137      frld(:,:) = tms(:,:) * frld(:,:) + ( 1. - tms(:,:) )   
138
[77]139      CALL lbc_lnk( hsnif, 'T', 1. )
[888]140      CALL lbc_lnk( sist , 'T', 1. , pval = rt0 )      ! set rt0 on closed boundary (required by bulk formulation)
[77]141      DO jk = 1, jplayersp1
142         CALL lbc_lnk(tbif(:,:,jk), 'T', 1. )
143      END DO
144      CALL lbc_lnk( fsbbq  , 'T', 1. )
145      CALL lbc_lnk( qstoif , 'T', 1. )
[888]146
[821]147   END SUBROUTINE lim_istate_2
[3]148
149   
[821]150   SUBROUTINE lim_istate_init_2
[3]151      !!-------------------------------------------------------------------
[821]152      !!                   ***  ROUTINE lim_istate_init_2  ***
[3]153      !!       
[77]154      !! ** Purpose :   Definition of initial state of the ice
[3]155      !!
[77]156      !! ** Method  :   Read the namiceini namelist and check the parameter
[888]157      !!       values called at the first timestep (nit000)
[3]158      !!
[77]159      !! ** input   :   Namelist namiceini
[3]160      !!-------------------------------------------------------------------
[508]161      INTEGER :: inum_ice
[673]162      INTEGER :: ji,jj
[419]163
[675]164      NAMELIST/namiceini/ ln_limini, ttest, hninn, hginn, alinn, &
[419]165         &                hnins, hgins, alins
[3]166      !!-------------------------------------------------------------------
[888]167      !
168      REWIND ( numnam_ice )               ! Read Namelist namiceini
[3]169      READ   ( numnam_ice , namiceini )
[888]170      !
171      IF(lwp) THEN
172         WRITE(numout,*)
173         WRITE(numout,*) 'lim_istate_init_2 : ice parameters inititialisation '
174         WRITE(numout,*) '~~~~~~~~~~~~~~~~~'
175         WRITE(numout,*) '         threshold water temp. for initial sea-ice    ttest      = ', ttest
176         WRITE(numout,*) '         initial snow thickness in the north          hninn      = ', hninn
177         WRITE(numout,*) '         initial ice thickness in the north           hginn      = ', hginn 
178         WRITE(numout,*) '         initial leads area in the north              alinn      = ', alinn           
179         WRITE(numout,*) '         initial snow thickness in the south          hnins      = ', hnins 
180         WRITE(numout,*) '         initial ice thickness in the south           hgins      = ', hgins
181         WRITE(numout,*) '         initial leads area in the south              alins      = ', alins
182         WRITE(numout,*) '         Ice state initialization using input file    ln_limini  = ', ln_limini
[3]183      ENDIF
[419]184
185      IF( ln_limini ) THEN                      ! Ice initialization using input file
[888]186         !
[508]187         CALL iom_open( 'Ice_initialization.nc', inum_ice )
[888]188         !
[508]189         IF( inum_ice > 0 ) THEN
[888]190            IF(lwp) WRITE(numout,*)
191            IF(lwp) WRITE(numout,*) '                  ice state initialization with : Ice_initialization.nc'
[3]192           
[888]193            CALL iom_get( inum_ice, jpdom_data, 'hicif', hicif )     
194            CALL iom_get( inum_ice, jpdom_data, 'hsnif', hsnif )     
195            CALL iom_get( inum_ice, jpdom_data, 'frld' , frld  )     
196            CALL iom_get( inum_ice, jpdom_data, 'ts'   , sist  )
[673]197            CALL iom_get( inum_ice, jpdom_unknown, 'tbif', tbif(1:nlci,1:nlcj,:),   &
[508]198                 &        kstart = (/ mig(1),mjg(1),1 /), kcount = (/ nlci,nlcj,jplayersp1 /) )
[673]199            ! put some values in the extra-halo...
200            DO jj = nlcj+1, jpj   ;   tbif(1:nlci,jj,:) = tbif(1:nlci,nlej,:)   ;   END DO
201            DO ji = nlci+1, jpi   ;   tbif(ji    ,: ,:) = tbif(nlei  ,:   ,:)   ;   END DO
[508]202
203            CALL iom_close( inum_ice)
[888]204            !
[419]205         ENDIF
206      ENDIF
[888]207      !     
[821]208   END SUBROUTINE lim_istate_init_2
[3]209
210#else
211   !!----------------------------------------------------------------------
[821]212   !!   Default option :         Empty module      NO LIM 2.0 sea-ice model
[3]213   !!----------------------------------------------------------------------
214CONTAINS
[821]215   SUBROUTINE lim_istate_2        ! Empty routine
216   END SUBROUTINE lim_istate_2
[3]217#endif
218
219   !!======================================================================
[821]220END MODULE limistate_2
Note: See TracBrowser for help on using the repository browser.