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.
limvar.F90 in branches/2012/dev_MERGE_2012/NEMOGCM/NEMO/LIM_SRC_3 – NEMO

source: branches/2012/dev_MERGE_2012/NEMOGCM/NEMO/LIM_SRC_3/limvar.F90 @ 3750

Last change on this file since 3750 was 3625, checked in by acc, 11 years ago

Branch dev_NOC_2012_r3555. #1006. Step 7. Check in code now merged with dev_r3385_NOCS04_HAMF

  • Property svn:keywords set to Id
File size: 21.8 KB
Line 
1MODULE limvar
2   !!======================================================================
3   !!                       ***  MODULE limvar ***
4   !!                 Different sets of ice model variables
5   !!                   how to switch from one to another
6   !!
7   !!                 There are three sets of variables
8   !!                 VGLO : global variables of the model
9   !!                        - v_i (jpi,jpj,jpl)
10   !!                        - v_s (jpi,jpj,jpl)
11   !!                        - a_i (jpi,jpj,jpl)
12   !!                        - t_s (jpi,jpj,jpl)
13   !!                        - e_i (jpi,jpj,nlay_i,jpl)
14   !!                        - smv_i(jpi,jpj,jpl)
15   !!                        - oa_i (jpi,jpj,jpl)
16   !!                 VEQV : equivalent variables sometimes used in the model
17   !!                        - ht_i(jpi,jpj,jpl)
18   !!                        - ht_s(jpi,jpj,jpl)
19   !!                        - t_i (jpi,jpj,nlay_i,jpl)
20   !!                        ...
21   !!                 VAGG : aggregate variables, averaged/summed over all
22   !!                        thickness categories
23   !!                        - vt_i(jpi,jpj)
24   !!                        - vt_s(jpi,jpj)
25   !!                        - at_i(jpi,jpj)
26   !!                        - et_s(jpi,jpj)  !total snow heat content
27   !!                        - et_i(jpi,jpj)  !total ice thermal content
28   !!                        - smt_i(jpi,jpj) !mean ice salinity
29   !!                        - ot_i(jpi,jpj)  !average ice age
30   !!======================================================================
31   !! History :   -   ! 2006-01 (M. Vancoppenolle) Original code
32   !!            4.0  ! 2011-02 (G. Madec) dynamical allocation
33   !!----------------------------------------------------------------------
34#if defined key_lim3
35   !!----------------------------------------------------------------------
36   !!   'key_lim3'                                      LIM3 sea-ice model
37   !!----------------------------------------------------------------------
38   !!   lim_var_agg       :
39   !!   lim_var_glo2eqv   :
40   !!   lim_var_eqv2glo   :
41   !!   lim_var_salprof   :
42   !!   lim_var_salprof1d :
43   !!   lim_var_bv        :
44   !!----------------------------------------------------------------------
45   USE par_oce        ! ocean parameters
46   USE phycst         ! physical constants (ocean directory)
47   USE sbc_oce        ! Surface boundary condition: ocean fields
48   USE ice            ! ice variables
49   USE par_ice        ! ice parameters
50   USE thd_ice        ! ice variables (thermodynamics)
51   USE dom_ice        ! ice domain
52   USE in_out_manager ! I/O manager
53   USE lib_mpp        ! MPP library
54   USE wrk_nemo       ! work arrays
55   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 
56
57   IMPLICIT NONE
58   PRIVATE
59
60   PUBLIC   lim_var_agg          !
61   PUBLIC   lim_var_glo2eqv      !
62   PUBLIC   lim_var_eqv2glo      !
63   PUBLIC   lim_var_salprof      !
64   PUBLIC   lim_var_bv           !
65   PUBLIC   lim_var_salprof1d    !
66
67   REAL(wp) ::   eps20 = 1.e-20_wp   ! module constants
68   REAL(wp) ::   eps16 = 1.e-16_wp   !    -       -
69   REAL(wp) ::   eps13 = 1.e-13_wp   !    -       -
70   REAL(wp) ::   eps10 = 1.e-10_wp   !    -       -
71   REAL(wp) ::   eps06 = 1.e-06_wp   !    -       -
72   REAL(wp) ::   zzero = 0.e0        !    -       -
73   REAL(wp) ::   zone  = 1.e0        !    -       -
74
75   !!----------------------------------------------------------------------
76   !! NEMO/LIM3 3.4 , UCL - NEMO Consortium (2011)
77   !! $Id$
78   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
79   !!----------------------------------------------------------------------
80CONTAINS
81
82   SUBROUTINE lim_var_agg( kn )
83      !!------------------------------------------------------------------
84      !!                ***  ROUTINE lim_var_agg  ***
85      !!
86      !! ** Purpose :   aggregates ice-thickness-category variables to all-ice variables
87      !!              i.e. it turns VGLO into VAGG
88      !! ** Method  :
89      !!
90      !! ** Arguments : n = 1, at_i vt_i only
91      !!                n = 2 everything
92      !!
93      !! note : you could add an argument when you need only at_i, vt_i
94      !!        and when you need everything
95      !!------------------------------------------------------------------
96      INTEGER, INTENT( in ) ::   kn     ! =1 at_i & vt only ; = what is needed
97      !
98      INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices
99      REAL(wp) ::   zinda
100      !!------------------------------------------------------------------
101
102      !--------------------
103      ! Compute variables
104      !--------------------
105      vt_i (:,:) = 0._wp
106      vt_s (:,:) = 0._wp
107      at_i (:,:) = 0._wp
108      ato_i(:,:) = 1._wp
109      !
110      DO jl = 1, jpl
111         DO jj = 1, jpj
112            DO ji = 1, jpi
113               !
114               vt_i(ji,jj) = vt_i(ji,jj) + v_i(ji,jj,jl) ! ice volume
115               vt_s(ji,jj) = vt_s(ji,jj) + v_s(ji,jj,jl) ! snow volume
116               at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) ! ice concentration
117               !
118               zinda = MAX( zzero , SIGN( zone , at_i(ji,jj) - 0.10 ) ) 
119               icethi(ji,jj) = vt_i(ji,jj) / MAX( at_i(ji,jj) , eps16 ) * zinda  ! ice thickness
120            END DO
121         END DO
122      END DO
123
124      DO jj = 1, jpj
125         DO ji = 1, jpi
126            ato_i(ji,jj) = MAX( 1._wp - at_i(ji,jj), 0._wp )   ! open water fraction
127         END DO
128      END DO
129
130      IF( kn > 1 ) THEN
131         et_s (:,:) = 0._wp
132         ot_i (:,:) = 0._wp
133         smt_i(:,:) = 0._wp
134         et_i (:,:) = 0._wp
135         !
136         DO jl = 1, jpl
137            DO jj = 1, jpj
138               DO ji = 1, jpi
139                  et_s(ji,jj)  = et_s(ji,jj)  + e_s(ji,jj,1,jl)                                       ! snow heat content
140                  zinda = MAX( zzero , SIGN( zone , vt_i(ji,jj) - 0.10 ) ) 
141                  smt_i(ji,jj) = smt_i(ji,jj) + smv_i(ji,jj,jl) / MAX( vt_i(ji,jj) , eps13 ) * zinda   ! ice salinity
142                  zinda = MAX( zzero , SIGN( zone , at_i(ji,jj) - 0.10 ) ) 
143                  ot_i(ji,jj)  = ot_i(ji,jj)  + oa_i(ji,jj,jl)  / MAX( at_i(ji,jj) , eps13 ) * zinda   ! ice age
144               END DO
145            END DO
146         END DO
147         !
148         DO jl = 1, jpl
149            DO jk = 1, nlay_i
150               et_i(:,:) = et_i(:,:) + e_i(:,:,jk,jl)       ! ice heat content
151            END DO
152         END DO
153         !
154      ENDIF
155      !
156   END SUBROUTINE lim_var_agg
157
158
159   SUBROUTINE lim_var_glo2eqv
160      !!------------------------------------------------------------------
161      !!                ***  ROUTINE lim_var_glo2eqv ***
162      !!
163      !! ** Purpose :   computes equivalent variables as function of global variables
164      !!              i.e. it turns VGLO into VEQV
165      !!------------------------------------------------------------------
166      INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices
167      REAL(wp) ::   zq_i, zaaa, zbbb, zccc, zdiscrim     ! local scalars
168      REAL(wp) ::   ztmelts, zindb, zq_s, zfac1, zfac2   !   -      -
169      !!------------------------------------------------------------------
170
171      !-------------------------------------------------------
172      ! Ice thickness, snow thickness, ice salinity, ice age
173      !-------------------------------------------------------
174      DO jl = 1, jpl
175         DO jj = 1, jpj
176            DO ji = 1, jpi
177               zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp,- a_i(ji,jj,jl) ) )   !0 if no ice and 1 if yes
178               ht_i(ji,jj,jl) = v_i (ji,jj,jl) / MAX( a_i(ji,jj,jl) , eps10 ) * zindb
179               ht_s(ji,jj,jl) = v_s (ji,jj,jl) / MAX( a_i(ji,jj,jl) , eps10 ) * zindb
180               o_i(ji,jj,jl)  = oa_i(ji,jj,jl) / MAX( a_i(ji,jj,jl) , eps10 ) * zindb
181            END DO
182         END DO
183      END DO
184
185      IF(  num_sal == 2  )THEN
186         DO jl = 1, jpl
187            DO jj = 1, jpj
188               DO ji = 1, jpi
189                  zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp,- a_i(ji,jj,jl) ) )   !0 if no ice and 1 if yes
190                  sm_i(ji,jj,jl) = smv_i(ji,jj,jl) / MAX( v_i(ji,jj,jl) , eps10 ) * zindb
191               END DO
192            END DO
193         END DO
194      ENDIF
195
196      CALL lim_var_salprof      ! salinity profile
197
198      !-------------------
199      ! Ice temperatures
200      !-------------------
201!CDIR NOVERRCHK
202      DO jl = 1, jpl
203!CDIR NOVERRCHK
204         DO jk = 1, nlay_i
205!CDIR NOVERRCHK
206            DO jj = 1, jpj
207!CDIR NOVERRCHK
208               DO ji = 1, jpi
209                  !                                                              ! Energy of melting q(S,T) [J.m-3]
210                  zq_i    = e_i(ji,jj,jk,jl) / area(ji,jj) / MAX( v_i(ji,jj,jl) , eps06 ) * REAL(nlay_i,wp) 
211                  zindb   = 1.0 - MAX( 0.0 , SIGN( 1.0 , - v_i(ji,jj,jl) ) )     ! zindb = 0 if no ice and 1 if yes
212                  zq_i    = zq_i * unit_fac * zindb                              !convert units
213                  ztmelts = -tmut * s_i(ji,jj,jk,jl) + rtt                       ! Ice layer melt temperature
214                  !
215                  zaaa       =  cpic                  ! Conversion q(S,T) -> T (second order equation)
216                  zbbb       =  ( rcp - cpic ) * ( ztmelts - rtt ) + zq_i / rhoic - lfus
217                  zccc       =  lfus * (ztmelts-rtt)
218                  zdiscrim   =  SQRT( MAX(zbbb*zbbb - 4._wp*zaaa*zccc , 0._wp) )
219                  t_i(ji,jj,jk,jl) = rtt + zindb *( - zbbb - zdiscrim ) / ( 2.0 *zaaa )
220                  t_i(ji,jj,jk,jl) = MIN( rtt, MAX( 173.15_wp, t_i(ji,jj,jk,jl) ) )       ! 100-rtt < t_i < rtt
221               END DO
222            END DO
223         END DO
224      END DO
225
226      !--------------------
227      ! Snow temperatures
228      !--------------------
229      zfac1 = 1._wp / ( rhosn * cpic )
230      zfac2 = lfus / cpic 
231      DO jl = 1, jpl
232         DO jk = 1, nlay_s
233            DO jj = 1, jpj
234               DO ji = 1, jpi
235                  !Energy of melting q(S,T) [J.m-3]
236                  zq_s  = e_s(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_s(ji,jj,jl) , eps06 ) ) * REAL(nlay_s,wp)
237                  zindb = 1._wp - MAX( 0._wp , SIGN( 1._wp , - v_s(ji,jj,jl) ) )     ! zindb = 0 if no ice and 1 if yes
238                  zq_s  = zq_s * unit_fac * zindb                                    ! convert units
239                  !
240                  t_s(ji,jj,jk,jl) = rtt + zindb * ( - zfac1 * zq_s + zfac2 )
241                  t_s(ji,jj,jk,jl) = MIN( rtt, MAX( 173.15, t_s(ji,jj,jk,jl) ) )     ! 100-rtt < t_i < rtt
242               END DO
243            END DO
244         END DO
245      END DO
246
247      !-------------------
248      ! Mean temperature
249      !-------------------
250      tm_i(:,:) = 0._wp
251      DO jl = 1, jpl
252         DO jk = 1, nlay_i
253            DO jj = 1, jpj
254               DO ji = 1, jpi
255                  zindb = (  1._wp - MAX( 0._wp , SIGN( 1._wp , -a_i(ji,jj,jl) ) )  )   &
256                     &  * (  1._wp - MAX( 0._wp , SIGN( 1._wp , -v_i(ji,jj,jl) ) )  )
257                  tm_i(ji,jj) = tm_i(ji,jj) + t_i(ji,jj,jk,jl) * v_i(ji,jj,jl)   &
258                     &                      / (  REAL(nlay_i,wp) * MAX( vt_i(ji,jj) , eps10 )  )
259               END DO
260            END DO
261         END DO
262      END DO
263      !
264   END SUBROUTINE lim_var_glo2eqv
265
266
267   SUBROUTINE lim_var_eqv2glo
268      !!------------------------------------------------------------------
269      !!                ***  ROUTINE lim_var_eqv2glo ***
270      !!
271      !! ** Purpose :   computes global variables as function of equivalent variables
272      !!                i.e. it turns VEQV into VGLO
273      !! ** Method  :
274      !!
275      !! ** History :  (01-2006) Martin Vancoppenolle, UCL-ASTR
276      !!------------------------------------------------------------------
277      !
278      v_i(:,:,:)   = ht_i(:,:,:) * a_i(:,:,:)
279      v_s(:,:,:)   = ht_s(:,:,:) * a_i(:,:,:)
280      smv_i(:,:,:) = sm_i(:,:,:) * v_i(:,:,:)
281      oa_i (:,:,:) = o_i (:,:,:) * a_i(:,:,:)
282      !
283   END SUBROUTINE lim_var_eqv2glo
284
285
286   SUBROUTINE lim_var_salprof
287      !!------------------------------------------------------------------
288      !!                ***  ROUTINE lim_var_salprof ***
289      !!
290      !! ** Purpose :   computes salinity profile in function of bulk salinity     
291      !!
292      !! ** Method  : If bulk salinity greater than s_i_1,
293      !!              the profile is assumed to be constant (S_inf)
294      !!              If bulk salinity lower than s_i_0,
295      !!              the profile is linear with 0 at the surface (S_zero)
296      !!              If it is between s_i_0 and s_i_1, it is a
297      !!              alpha-weighted linear combination of s_inf and s_zero
298      !!
299      !! ** References : Vancoppenolle et al., 2007 (in preparation)
300      !!------------------------------------------------------------------
301      INTEGER  ::   ji, jj, jk, jl   ! dummy loop index
302      REAL(wp) ::   dummy_fac0, dummy_fac1, dummy_fac, zsal      ! local scalar
303      REAL(wp) ::   zind0, zind01, zindbal, zargtemp , zs_zero   !   -      -
304      REAL(wp), POINTER, DIMENSION(:,:,:) ::   z_slope_s, zalpha   ! 3D pointer
305      !!------------------------------------------------------------------
306
307      CALL wrk_alloc( jpi, jpj, jpl, z_slope_s, zalpha )
308
309      !---------------------------------------
310      ! Vertically constant, constant in time
311      !---------------------------------------
312      IF(  num_sal == 1  )   s_i(:,:,:,:) = bulk_sal
313
314      !-----------------------------------
315      ! Salinity profile, varying in time
316      !-----------------------------------
317      IF(  num_sal == 2  ) THEN
318         !
319         DO jk = 1, nlay_i
320            s_i(:,:,jk,:)  = sm_i(:,:,:)
321         END DO
322         !
323         DO jl = 1, jpl                               ! Slope of the linear profile
324            DO jj = 1, jpj
325               DO ji = 1, jpi
326                  z_slope_s(ji,jj,jl) = 2._wp * sm_i(ji,jj,jl) / MAX( 0.01 , ht_i(ji,jj,jl) )
327               END DO
328            END DO
329         END DO
330         !
331         dummy_fac0 = 1._wp / ( s_i_0 - s_i_1 )       ! Weighting factor between zs_zero and zs_inf
332         dummy_fac1 = s_i_1 / ( s_i_1 - s_i_0 )
333         !
334         zalpha(:,:,:) = 0._wp
335         DO jl = 1, jpl
336            DO jj = 1, jpj
337               DO ji = 1, jpi
338                  ! zind0 = 1 if sm_i le s_i_0 and 0 otherwise
339                  zind0  = MAX( 0.0   , SIGN( 1.0  , s_i_0 - sm_i(ji,jj,jl) ) ) 
340                  ! zind01 = 1 if sm_i is between s_i_0 and s_i_1 and 0 othws
341                  zind01 = ( 1.0 - zind0 ) * MAX( 0.0   , SIGN( 1.0  , s_i_1 - sm_i(ji,jj,jl) ) ) 
342                  ! If 2.sm_i GE sss_m then zindbal = 1
343                  zindbal = MAX( 0.0 , SIGN( 1.0 , 2. * sm_i(ji,jj,jl) - sss_m(ji,jj) ) )
344                  zalpha(ji,jj,jl) = zind0  * 1.0 + zind01 * ( sm_i(ji,jj,jl) * dummy_fac0 + dummy_fac1 )
345                  zalpha(ji,jj,jl) = zalpha(ji,jj,jl) * ( 1.0 - zindbal )
346               END DO
347            END DO
348         END DO
349         !
350         dummy_fac = 1._wp / nlay_i                   ! Computation of the profile
351         DO jl = 1, jpl
352            DO jk = 1, nlay_i
353               DO jj = 1, jpj
354                  DO ji = 1, jpi
355                     !                                      ! linear profile with 0 at the surface
356                     zs_zero = z_slope_s(ji,jj,jl) * ( REAL(jk,wp) - 0.5_wp ) * ht_i(ji,jj,jl) * dummy_fac
357                     !                                      ! weighting the profile
358                     s_i(ji,jj,jk,jl) = zalpha(ji,jj,jl) * zs_zero + ( 1._wp - zalpha(ji,jj,jl) ) * sm_i(ji,jj,jl)
359                  END DO ! ji
360               END DO ! jj
361            END DO ! jk
362         END DO ! jl
363         !
364      ENDIF ! num_sal
365
366      !-------------------------------------------------------
367      ! Vertically varying salinity profile, constant in time
368      !-------------------------------------------------------
369
370      IF(  num_sal == 3  ) THEN      ! Schwarzacher (1959) multiyear salinity profile (mean = 2.30)
371         !
372         sm_i(:,:,:) = 2.30_wp
373         !
374         DO jl = 1, jpl
375!CDIR NOVERRCHK
376            DO jk = 1, nlay_i
377               zargtemp  = ( REAL(jk,wp) - 0.5_wp ) / REAL(nlay_i,wp)
378               zsal =  1.6_wp * (  1._wp - COS( rpi * zargtemp**(0.407_wp/(0.573_wp+zargtemp)) )  )
379               s_i(:,:,jk,jl) =  zsal
380            END DO
381         END DO
382         !
383      ENDIF ! num_sal
384      !
385      CALL wrk_dealloc( jpi, jpj, jpl, z_slope_s, zalpha )
386      !
387   END SUBROUTINE lim_var_salprof
388
389
390   SUBROUTINE lim_var_bv
391      !!------------------------------------------------------------------
392      !!                ***  ROUTINE lim_var_bv ***
393      !!
394      !! ** Purpose :   computes mean brine volume (%) in sea ice
395      !!
396      !! ** Method  : e = - 0.054 * S (ppt) / T (C)
397      !!
398      !! References : Vancoppenolle et al., JGR, 2007
399      !!------------------------------------------------------------------
400      INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices
401      REAL(wp) ::   zbvi, zindb      ! local scalars
402      !!------------------------------------------------------------------
403      !
404      bv_i(:,:) = 0._wp
405      DO jl = 1, jpl
406         DO jk = 1, nlay_i
407            DO jj = 1, jpj
408               DO ji = 1, jpi
409                  zindb = 1.0-MAX(0.0,SIGN(1.0,-a_i(ji,jj,jl))) !0 if no ice and 1 if yes
410                  zbvi  = - zindb * tmut * s_i(ji,jj,jk,jl) / MIN( t_i(ji,jj,jk,jl) - 273.15 , eps13 )   &
411                     &                   * v_i(ji,jj,jl)    / REAL(nlay_i,wp)
412                  bv_i(ji,jj) = bv_i(ji,jj) + zbvi  / MAX( vt_i(ji,jj) , eps13 )
413               END DO
414            END DO
415         END DO
416      END DO
417      !
418   END SUBROUTINE lim_var_bv
419
420
421   SUBROUTINE lim_var_salprof1d( kideb, kiut )
422      !!-------------------------------------------------------------------
423      !!                  ***  ROUTINE lim_thd_salprof1d  ***
424      !!
425      !! ** Purpose :   1d computation of the sea ice salinity profile
426      !!                Works with 1d vectors and is used by thermodynamic modules
427      !!-------------------------------------------------------------------
428      INTEGER, INTENT(in) ::   kideb, kiut   ! thickness category index
429      !
430      INTEGER  ::   ji, jk    ! dummy loop indices
431      INTEGER  ::   zji, zjj  ! local integers
432      REAL(wp) ::   dummy_fac0, dummy_fac1, dummy_fac2, zargtemp, zsal   ! local scalars
433      REAL(wp) ::   zalpha, zind0, zind01, zindbal, zs_zero              !   -      -
434      !
435      REAL(wp), POINTER, DIMENSION(:) ::   z_slope_s
436      !!---------------------------------------------------------------------
437
438      CALL wrk_alloc( jpij, z_slope_s )
439
440      !---------------------------------------
441      ! Vertically constant, constant in time
442      !---------------------------------------
443      IF( num_sal == 1 )   s_i_b(:,:) = bulk_sal
444
445      !------------------------------------------------------
446      ! Vertically varying salinity profile, varying in time
447      !------------------------------------------------------
448
449      IF(  num_sal == 2  ) THEN
450         !
451         DO ji = kideb, kiut          ! Slope of the linear profile zs_zero
452            z_slope_s(ji) = 2._wp * sm_i_b(ji) / MAX( 0.01 , ht_i_b(ji) )
453         END DO
454
455         ! Weighting factor between zs_zero and zs_inf
456         !---------------------------------------------
457         dummy_fac0 = 1._wp / ( s_i_0 - s_i_1 )
458         dummy_fac1 = s_i_1 / ( s_i_1 - s_i_0 )
459         dummy_fac2 = 1._wp / REAL(nlay_i,wp)
460
461!CDIR NOVERRCHK
462         DO jk = 1, nlay_i
463!CDIR NOVERRCHK
464            DO ji = kideb, kiut
465               zji =  MOD( npb(ji) - 1 , jpi ) + 1
466               zjj =     ( npb(ji) - 1 ) / jpi + 1
467               ! zind0 = 1 if sm_i le s_i_0 and 0 otherwise
468               zind0  = MAX( 0._wp , SIGN( 1._wp  , s_i_0 - sm_i_b(ji) ) ) 
469               ! zind01 = 1 if sm_i is between s_i_0 and s_i_1 and 0 othws
470               zind01 = ( 1._wp - zind0 ) * MAX( 0._wp , SIGN( 1._wp , s_i_1 - sm_i_b(ji) ) ) 
471               ! if 2.sm_i GE sss_m then zindbal = 1
472               zindbal = MAX( 0._wp , SIGN( 1._wp , 2._wp * sm_i_b(ji) - sss_m(zji,zjj) ) )
473               !
474               zalpha = (  zind0 + zind01 * ( sm_i_b(ji) * dummy_fac0 + dummy_fac1 )  ) * ( 1.0 - zindbal )
475               !
476               zs_zero = z_slope_s(ji) * ( REAL(jk,wp) - 0.5_wp ) * ht_i_b(ji) * dummy_fac2
477               ! weighting the profile
478               s_i_b(ji,jk) = zalpha * zs_zero + ( 1._wp - zalpha ) * sm_i_b(ji)
479            END DO ! ji
480         END DO ! jk
481
482      ENDIF ! num_sal
483
484      !-------------------------------------------------------
485      ! Vertically varying salinity profile, constant in time
486      !-------------------------------------------------------
487
488      IF( num_sal == 3 ) THEN      ! Schwarzacher (1959) multiyear salinity profile (mean = 2.30)
489         !
490         sm_i_b(:) = 2.30_wp
491         !
492!CDIR NOVERRCHK
493         DO jk = 1, nlay_i
494            zargtemp  = ( REAL(jk,wp) - 0.5_wp ) / REAL(nlay_i,wp)
495            zsal =  1.6_wp * (  1._wp - COS( rpi * zargtemp**(0.407_wp/(0.573_wp+zargtemp)) )  )
496            DO ji = kideb, kiut
497               s_i_b(ji,jk) = zsal
498            END DO
499         END DO
500         !
501      ENDIF
502      !
503      CALL wrk_dealloc( jpij, z_slope_s )
504      !
505   END SUBROUTINE lim_var_salprof1d
506
507#else
508   !!----------------------------------------------------------------------
509   !!   Default option         Dummy module          NO  LIM3 sea-ice model
510   !!----------------------------------------------------------------------
511CONTAINS
512   SUBROUTINE lim_var_agg          ! Empty routines
513   END SUBROUTINE lim_var_agg
514   SUBROUTINE lim_var_glo2eqv      ! Empty routines
515   END SUBROUTINE lim_var_glo2eqv
516   SUBROUTINE lim_var_eqv2glo      ! Empty routines
517   END SUBROUTINE lim_var_eqv2glo
518   SUBROUTINE lim_var_salprof      ! Empty routines
519   END SUBROUTINE lim_var_salprof
520   SUBROUTINE lim_var_bv           ! Emtpy routines
521   END SUBROUTINE lim_var_bv
522   SUBROUTINE lim_var_salprof1d    ! Emtpy routines
523   END SUBROUTINE lim_var_salprof1d
524#endif
525
526   !!======================================================================
527END MODULE limvar
Note: See TracBrowser for help on using the repository browser.