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.
limthd_lac.F90 in trunk/NEMO/LIM_SRC – NEMO

source: trunk/NEMO/LIM_SRC/limthd_lac.F90 @ 3

Last change on this file since 3 was 3, checked in by opalod, 20 years ago

Initial revision

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 11.9 KB
Line 
1MODULE limthd_lac
2#if defined key_ice_lim
3   !!======================================================================
4   !!                       ***  MODULE limthd_lac   ***
5   !!                lateral thermodynamic growth of the ice
6   !!======================================================================
7
8   !!----------------------------------------------------------------------
9   !!   lim_lat_acr    : lateral accretion of ice
10   !! * Modules used
11   USE phycst
12   USE ice_oce         ! ice variables
13   USE thd_ice
14   USE iceini
15   USE limistate 
16     
17   IMPLICIT NONE
18   PRIVATE
19
20   !! * Routine accessibility
21   PUBLIC lim_thd_lac     ! called by lim_thd
22
23  !! * Module variables
24     REAL(wp)  ::            &  ! constant values
25         epsi20 = 1e-20   ,  &
26         epsi13 = 1e-13   ,  &
27         zzero  = 0.0     ,  &
28         zone   = 1.0
29   !!----------------------------------------------------------------------
30   !!   LIM 2.0 , UCL-LODYC-IPSL  (2003)
31   !!----------------------------------------------------------------------
32CONTAINS
33   
34    SUBROUTINE lim_thd_lac( kideb , kiut)
35      !!-------------------------------------------------------------------
36      !!               ***   ROUTINE lim_thd_lac  ***
37      !! 
38      !! ** Purpose : Computation of the evolution of the ice thickness and
39      !!      concentration as a function of the heat balance in the leads.
40      !!      It is only used for lateral accretion
41      !!       
42      !! ** Method  : Ice is formed in the open water when ocean lose heat
43      !!      (heat budget of open water Bl is negative) .
44      !!      Computation of the increase of 1-A (ice concentration) fol-
45      !!      lowing the law :
46      !!      (dA/dt)acc = F[ (1-A)/(1-a) ] * [ Bl / (Li*h0) ]
47      !!       where - h0 is the thickness of ice created in the lead
48      !!             - a is a minimum fraction for leads
49      !!             - F is a monotonic non-increasing function defined as:
50      !!                  F(X)=( 1 - X**exld )**(1.0/exld)
51      !!             - exld is the exponent closure rate (=2 default val.)
52      !!
53      !! ** Action : - Adjustment of snow and ice thicknesses and heat
54      !!                content in brine pockets
55      !!             - Updating ice internal temperature
56      !!             - Computation of variation of ice volume and mass
57      !!             - Computation of frldb after lateral accretion and
58      !!               update h_snow_1d, h_ice_1d and tbif_1d(:,:)     
59      !!
60      !! ** References :
61      !!      M. Maqueda, 1995, PhD Thesis, Univesidad Complutense Madrid
62      !!      Fichefet T. and M. Maqueda 1997, J. Geo. Res., 102(C6),
63      !!                                                12609 -12646   
64      !!
65      !! History :
66      !!   1.0  !  01-04 (LIM)  original code
67      !!   2.0  !  02-08 (C. Ethe, G. Madec)  F90, mpp
68      !!-------------------------------------------------------------------
69      !! * Arguments
70      INTEGER , INTENT(IN)::  &
71         kideb          ,   &  ! start point on which the the computation is applied
72         kiut                  ! end point on which the the computation is applied
73
74      !! * Local variables
75      INTEGER ::            &
76         ji             ,   &  !  dummy loop indices
77         iicefr         ,   &  !  1 = existing ice ; 0 = no ice
78         iiceform       ,   &  !  1 = ice formed   ; 0 = no ice formed
79         ihemis                !  dummy indice
80      REAL(wp), DIMENSION(jpij) :: &
81         zqbgow           ,  &  !  heat budget of the open water (negative)
82         zfrl_old         ,  &  !  previous sea/ice fraction
83         zhice_old        ,  &  !  previous ice thickness
84         zhice0           ,  &  !  thickness of newly formed ice in leads
85         zfrlmin          ,  &  !  minimum fraction for leads
86         zdhicbot               !  part of thickness of newly formed ice in leads which
87                                !  has been already used in transport for example
88      REAL(wp)  ::  &
89         zhemis           ,  &  !  hemisphere (0 = North, 1 = South)
90         zhicenew         ,  &  !  new ice thickness
91         zholds2          ,  &  !  ratio of previous ice thickness and 2
92         zhnews2          ,  &  !  ratio of new ice thickness and 2
93         zfrlnew          ,  &  !  new sea/ice fraction
94         zfrld            ,  &  !  ratio of sea/ice fraction and minimum fraction for leads
95         zfrrate          ,  &  !  leads-closure rate
96         zdfrl                  !  sea-ice fraction increment
97      REAL(wp)  ::  &
98         zdh1 , zdh2 , zdh3 , zdh4, zdh5   , &   ! tempory scalars
99         ztint , zta1 , zta2 , zta3 , zta4 , &
100         zah, zalpha , zbeta
101      !!---------------------------------------------------------------------     
102                   
103      !--------------------------------------------------------------
104      !   Computation of the heat budget of the open water (negative)
105      !--------------------------------------------------------------
106     
107      DO ji = kideb , kiut     
108         zqbgow(ji) = qldif_1d(ji) - qcmif_1d(ji)
109      END DO
110     
111      !-----------------------------------------------------------------
112      !   Taking the appropriate values for the corresponding hemisphere
113      !-----------------------------------------------------------------
114      DO ji = kideb , kiut
115         zhemis       = MAX( zzero , SIGN( zone , frld_1d(ji) - 2.0 ) ) 
116         ihemis       = INT( 1 + zhemis )
117         zhice0  (ji) = hiccrit( ihemis ) 
118         zfrlmin (ji) = acrit  ( ihemis )   
119         frld_1d (ji) = frld_1d(ji) - 2.0 * zhemis
120         zfrl_old(ji) = frld_1d(ji)
121      END DO
122     
123      !-------------------------------------------------------------------
124      !     Lateral Accretion (modification of the fraction of open water)
125      !     The ice formed in the leads has always a thickness zhice0, but
126      !     only a fraction zfrrate of the ice formed contributes to the
127      !     increase of the ice fraction. The remaining part (1-zfrrate)
128      !     is rather assumed to lead to an increase in the thickness of the
129      !     pre-existing ice (transport for example).
130      !     Morales Maqueda, 1995 - Fichefet and Morales Maqueda, 1997
131      !---------------------------------------------------------------------
132     
133      !CDIR NOVERRCHK
134      DO ji = kideb , kiut
135         iicefr       = 1 - MAX( 0, INT( SIGN( 1.5 * zone , zfrl_old(ji) - 1.0 + epsi13 ) ) )
136         !---computation of the leads-closure rate
137         zfrld        = MIN( zone , ( 1.0 - frld_1d(ji) ) / ( 1.0 - zfrlmin(ji) ) )
138         zfrrate      = ( 1.0 - zfrld**exld )**( 1.0 / exld )
139         !--computation of the sea-ice fraction increment and the new fraction
140         zdfrl        = ( zfrrate / zhice0(ji) )  * ( zqbgow(ji) / xlic )
141         zfrlnew      = zfrl_old(ji) + zdfrl
142         !--update the sea-ice fraction
143         frld_1d   (ji) = MAX( zfrlnew , zfrlmin(ji) )
144         !--computation of the remaining part of ice thickness which has been already used
145         zdhicbot(ji) =  ( frld_1d(ji) - zfrlnew ) * zhice0(ji) / ( 1.0 - zfrlmin(ji) ) & 
146                      -  (  ( 1.0 - zfrrate ) / ( 1.0 - frld_1d(ji) ) )  * ( zqbgow(ji) / xlic ) 
147      END DO
148 
149      !----------------------------------------------------------------------------------------
150      !      Ajustement of snow and ice thicknesses and updating the total heat stored in brine pockets 
151      !      The thickness of newly formed ice is averaged with that of the pre-existing
152      !         (1-Anew) * hinew = (1-Aold) * hiold + ((1-Anew)-(1-Aold)) * h0
153      !      Snow is distributed over the new ice-covered area
154      !         (1-Anew) * hsnew = (1-Aold) * hsold           
155      !--------------------------------------------------------------------------------------------
156     
157      DO ji = kideb , kiut
158         iicefr       = 1 - MAX( 0, INT( SIGN( 1.5 * zone , zfrl_old(ji) - 1.0 + epsi13 ) ) )
159         zhice_old(ji) = h_ice_1d(ji)
160         zhicenew      = iicefr * zhice_old(ji) + ( 1 - iicefr ) * zhice0(ji)
161         zalpha        = ( 1. - zfrl_old(ji) ) / ( 1.- frld_1d(ji) )
162         h_snow_1d(ji) = zalpha * h_snow_1d(ji)
163         h_ice_1d (ji) = zalpha * zhicenew + ( 1.0 - zalpha ) * zhice0(ji)
164         qstbif_1d(ji) = zalpha * qstbif_1d(ji) 
165      END DO
166     
167      !-------------------------------------------------------
168      !   Ajustement of ice internal temperatures
169      !-------------------------------------------------------
170     
171      DO ji = kideb , kiut
172         iicefr      = 1 - MAX( 0, INT( SIGN( 1.5 * zone , zfrl_old(ji) - 1.0 + epsi13 ) ) )
173         iiceform    = 1 - MAX( 0 ,INT( SIGN( 1.5 * zone , zhice0(ji) - h_ice_1d(ji) ) ) )
174         zholds2     = zhice_old(ji)/ 2.
175         zhnews2     = h_ice_1d(ji) / 2.
176         zdh1        = MAX( zzero ,  zhice_old(ji)   - zhnews2 )
177         zdh2        = MAX( zzero , -zhice_old(ji)   + zhnews2 )
178         zdh3        = MAX( zzero ,  h_ice_1d(ji) - zholds2 )
179         zdh4        = MAX( zzero , -h_ice_1d(ji) + zholds2 )
180         zdh5        = MAX( zzero , zhice0(ji)      - zholds2 )
181         ztint       =       iiceform   * (  ( zholds2 - zdh3 ) * tbif_1d(ji,3) + zdh4 * tbif_1d(ji,2) )      &
182            &                           / MAX( epsi20 , h_ice_1d(ji) - zhice0(ji) )                           &
183            &                 + ( 1 - iiceform ) * tfu_1d(ji)
184         zta1        = iicefr * ( 1.  - zfrl_old(ji) ) * tbif_1d(ji,2) 
185         zta2        = iicefr * ( 1.  - zfrl_old(ji) ) * tbif_1d(ji,3)
186         zta3        = iicefr * ( 1.  - zfrl_old(ji) ) * ztint
187         zta4        = ( zfrl_old(ji) - frld_1d   (ji) ) * tfu_1d(ji)
188         zah         = ( 1. - frld_1d(ji) ) * zhnews2 
189
190         tbif_1d(ji,2) = (  MIN( zhnews2 , zholds2 )                                              * zta1   &
191            &          + ( 1 - iiceform ) * ( zholds2 - zdh1 )                                    * zta2   &
192            &          + ( iiceform * ( zhnews2 - zhice0(ji) + zdh5 ) + ( 1 - iiceform ) * zdh2 ) * zta3   & 
193            &          + MIN ( zhnews2 , zhice0(ji) )                                             * zta4   &
194            &          ) / zah
195         
196         tbif_1d(ji,3) =     (  iiceform * ( zhnews2 - zdh3 )                                          * zta1  &
197            &              + ( iiceform * zdh3 + ( 1 - iiceform ) * zdh1 )                             * zta2  &
198            &              + ( iiceform * ( zhnews2 - zdh5 ) + ( 1 - iiceform ) * ( zhnews2 - zdh1 ) ) * zta3  & 
199            &              + ( iiceform * zdh5 + ( 1 - iiceform ) * zhnews2 )                          * zta4  &
200            &            ) / zah
201         !---removing the remaining part of ice formed which has been already used
202         zbeta         = h_ice_1d(ji) / ( h_ice_1d(ji) + zdhicbot(ji) )
203         h_ice_1d(ji)  = h_ice_1d(ji) + zdhicbot(ji)
204         tbif_1d (ji,2)= zbeta * tbif_1d(ji,2) + ( 1.0 - zbeta ) * tbif_1d(ji,3)
205         tbif_1d (ji,3)= ( 2. * zbeta - 1.0 ) * tbif_1d(ji,3) + ( 2. * zdhicbot(ji) / h_ice_1d(ji) ) * tfu_1d(ji)
206         
207      END DO
208     
209      !-------------------------------------------------------------
210      !    Computation of variation of ice volume and ice mass
211      !           Vold = (1-Aold) * hiold ; Vnew = (1-Anew) * hinew
212      !           dV = Vnew - Vold
213      !-------------------------------------------------------------
214     
215      DO ji = kideb , kiut
216         dvlbq_1d  (ji) = ( 1. - frld_1d(ji) ) * h_ice_1d(ji) - ( 1. - zfrl_old(ji) ) * zhice_old(ji)
217         rdmicif_1d(ji) = rdmicif_1d(ji) + rhoic * dvlbq_1d(ji)
218      END DO
219     
220   END SUBROUTINE lim_thd_lac
221#else
222   !!======================================================================
223   !!                       ***  MODULE limthd_lac   ***
224   !!                           no sea ice model
225   !!======================================================================
226CONTAINS
227   SUBROUTINE lim_thd_lac           ! Empty routine
228   END SUBROUTINE lim_thd_lac
229#endif
230END MODULE limthd_lac
Note: See TracBrowser for help on using the repository browser.