Ignore:
Timestamp:
2012-11-21T14:19:18+01:00 (8 years ago)
Author:
acc
Message:

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2012/dev_NOC_2012_rev3555/NEMOGCM/NEMO/LIM_SRC_3/limthd_sal.F90

    r3294 r3625  
    1212   !!   'key_lim3'                                      LIM-3 sea-ice model 
    1313   !!---------------------------------------------------------------------- 
    14    !!   lim_thd_sal : salinity variations in the ice 
    15    !!---------------------------------------------------------------------- 
    16    USE par_oce          ! ocean parameters 
    17    USE phycst           ! physical constants (ocean directory) 
    18    USE sbc_oce          ! Surface boundary condition: ocean fields 
    19    USE ice              ! LIM variables 
    20    USE par_ice          ! LIM parameters 
    21    USE thd_ice          ! LIM thermodynamics 
    22    USE limvar           ! LIM variables 
    23    USE in_out_manager   ! I/O manager 
    24    USE lib_mpp          ! MPP library 
    25    USE wrk_nemo         ! work arrays 
     14   !!   lim_thd_sal   : salinity variations in the ice 
     15   !!---------------------------------------------------------------------- 
     16   USE par_oce        ! ocean parameters 
     17   USE phycst         ! physical constants (ocean directory) 
     18   USE sbc_oce        ! Surface boundary condition: ocean fields 
     19   USE ice            ! LIM variables 
     20   USE par_ice        ! LIM parameters 
     21   USE thd_ice        ! LIM thermodynamics 
     22   USE limvar         ! LIM variables 
     23   USE in_out_manager ! I/O manager 
     24   USE lib_mpp        ! MPP library 
     25   USE wrk_nemo       ! work arrays 
     26   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
    2627 
    2728   IMPLICIT NONE 
     
    3233 
    3334   !!---------------------------------------------------------------------- 
    34    !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2011) 
     35   !! NEMO/LIM3 3.4 , UCL - NEMO Consortium (2011) 
    3536   !! $Id$ 
    3637   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    4445      !! ** Purpose :   computes new salinities in the ice 
    4546      !! 
    46       !! ** Method  :  4 possibilities 
    47       !!               -> num_sal = 1 -> constant salinity for z,t 
    48       !!               -> num_sal = 2 -> S = S(z,t) [simple Vancoppenolle et al 2005] 
    49       !!               -> num_sal = 3 -> S = S(z)   [multiyear ice] 
    50       !!               -> num_sal = 4 -> S = S(h)   [Cox and Weeks 74] 
     47      !! ** Method  :  3 possibilities 
     48      !!               -> num_sal = 1 -> Sice = cst    [ice salinity constant in both time & space]  
     49      !!               -> num_sal = 2 -> Sice = S(z,t) [Vancoppenolle et al. 2005] 
     50      !!               -> num_sal = 3 -> Sice = S(z)   [multiyear ice] 
    5151      !!--------------------------------------------------------------------- 
    52       INTEGER, INTENT(in) ::  kideb, kiut   ! thickness category index 
     52      INTEGER, INTENT(in) ::   kideb, kiut   ! thickness category index 
    5353      ! 
    5454      INTEGER  ::   ji, jk     ! dummy loop indices  
    55       INTEGER  ::   zji, zjj   ! local integers 
    5655      REAL(wp) ::   zsold, iflush, iaccrbo, igravdr, isnowic, i_ice_switch,  ztmelts   ! local scalars 
    5756      REAL(wp) ::   zaaa, zbbb, zccc, zdiscrim   ! local scalars 
     
    6463      ! 1) Constant salinity, constant in time                                       | 
    6564      !------------------------------------------------------------------------------| 
    66 !!gm comment: if num_sal = 1 s_i_b and sm_i_b can be set to bulk_sal one for all in the initialisation phase !! 
    67       IF( num_sal == 1 ) THEN 
    68          ! 
    69          DO jk = 1, nlay_i 
    70             DO ji = kideb, kiut 
    71                s_i_b(ji,jk) =  bulk_sal 
    72             END DO ! ji 
    73          END DO ! jk 
    74          ! 
    75          DO ji = kideb, kiut 
    76             sm_i_b(ji)      =  bulk_sal  
    77          END DO ! ji 
    78          ! 
     65!!gm comment: if num_sal = 1 s_i_new, s_i_b and sm_i_b can be set to bulk_sal one for all in the initialisation phase !! 
     66!!gm           ===>>>   simplification of almost all test on num_sal value 
     67      IF(  num_sal == 1  ) THEN 
     68            s_i_b  (kideb:kiut,1:nlay_i) =  bulk_sal 
     69            sm_i_b (kideb:kiut)          =  bulk_sal  
     70            s_i_new(kideb:kiut)          =  bulk_sal 
    7971      ENDIF 
    8072 
     
    8375      !------------------------------------------------------------------------------| 
    8476 
    85       IF(  num_sal == 2  .OR.  num_sal == 4  ) THEN 
     77      IF(  num_sal == 2  ) THEN 
    8678 
    8779         !--------------------------------- 
     
    118110            dsm_i_gd_1d(ji) = - igravdr * MAX( sm_i_b(ji) - sal_G , 0._wp ) / time_G * rdt_ice  
    119111            !                                   ! drainage by flushing   
    120             dsm_i_fl_1d(ji) = - iflush * MAX( sm_i_b(ji) - sal_F , 0._wp ) / time_F * rdt_ice 
     112            dsm_i_fl_1d(ji) = - iflush  * MAX( sm_i_b(ji) - sal_F , 0._wp ) / time_F * rdt_ice 
    121113 
    122114            !----------------- 
     
    133125         END DO ! ji 
    134126 
    135          ! Salinity profile 
    136          CALL lim_var_salprof1d( kideb, kiut ) 
     127         CALL lim_var_salprof1d( kideb, kiut )         ! Salinity profile 
     128 
    137129 
    138130         !---------------------------- 
     
    143135!!gm useless 
    144136            ! iflush  : 1 if summer  
    145             iflush  =  MAX( 0._wp , SIGN ( 1._wp , t_su_b(ji) - rtt ) )  
     137            iflush  =  MAX( 0._wp , SIGN( 1._wp , t_su_b(ji) - rtt        ) )  
    146138            ! igravdr : 1 if t_su lt t_bo 
    147             igravdr =  MAX( 0._wp , SIGN ( 1._wp , t_bo_b(ji) - t_su_b(ji) ) )  
     139            igravdr =  MAX( 0._wp , SIGN( 1._wp , t_bo_b(ji) - t_su_b(ji) ) )  
    148140            ! iaccrbo : 1 if bottom accretion 
    149             iaccrbo =  MAX( 0._wp , SIGN ( 1._wp , dh_i_bott(ji) ) ) 
     141            iaccrbo =  MAX( 0._wp , SIGN( 1._wp , dh_i_bott(ji)           ) ) 
    150142!!gm end useless 
    151143            ! 
     
    157149         !---------------------------- 
    158150         DO ji = kideb, kiut 
    159             i_ice_switch = 1._wp - MAX ( 0._wp, SIGN( 1._wp , - ht_i_b(ji) ) ) 
    160             fsbri_1d(ji) = fsbri_1d(ji) - i_ice_switch * rhoic * a_i_b(ji) * ht_i_b(ji)         & 
    161                &         * ( MAX(dsm_i_gd_1d(ji) + dsm_i_fl_1d(ji), sm_i_b(ji) - zsiold(ji) ) ) / rdt_ice 
    162             IF( num_sal == 4 ) fsbri_1d(ji) = 0._wp 
    163          END DO ! ji 
     151            i_ice_switch = 1._wp - MAX(  0._wp, SIGN( 1._wp , - ht_i_b(ji) )  ) 
     152            sfx_bri_1d(ji) = sfx_bri_1d(ji) - i_ice_switch * rhoic * a_i_b(ji) * ht_i_b(ji)         & 
     153               &           * ( MAX( dsm_i_gd_1d(ji) + dsm_i_fl_1d(ji) , sm_i_b(ji) - zsiold(ji) ) ) * r1_rdtice 
     154         END DO 
    164155 
    165156         ! Only necessary for conservation check since salinity is modified 
     
    179170         END DO 
    180171         ! 
    181       ENDIF ! num_sal .EQ. 2 
     172      ENDIF  
    182173 
    183174      !------------------------------------------------------------------------------| 
     
    185176      !------------------------------------------------------------------------------| 
    186177 
    187       IF( num_sal == 3 )   CALL lim_var_salprof1d( kideb, kiut ) 
    188  
    189       !------------------------------------------------------------------------------| 
    190       !  Module 4 : Constant salinity varying in time                                | 
    191       !------------------------------------------------------------------------------| 
    192  
    193       IF( num_sal == 5 ) THEN      ! Cox and Weeks, 1974 
    194          ! 
    195          DO ji = kideb, kiut 
    196             zsold = sm_i_b(ji) 
    197             IF( ht_i_b(ji) < 0.4 ) THEN 
    198                sm_i_b(ji) = 14.24 - 19.39 * ht_i_b(ji)  
    199             ELSE 
    200                sm_i_b(ji) =  7.88 - 1.59 * ht_i_b(ji) 
    201                sm_i_b(ji) = MIN( sm_i_b(ji) , zsold )   
    202             ENDIF 
    203             IF( ht_i_b(ji) > 3.06918239 ) THEN  
    204                sm_i_b(ji) = 3._wp 
    205             ENDIF 
    206             DO jk = 1, nlay_i 
    207                s_i_b(ji,jk)   = sm_i_b(ji) 
    208             END DO 
    209          END DO 
    210          ! 
    211       ENDIF ! num_sal 
     178      IF(  num_sal == 3  )   CALL lim_var_salprof1d( kideb, kiut ) 
     179 
    212180 
    213181      !------------------------------------------------------------------------------| 
    214182      ! 5) Computation of salt flux due to Bottom growth 
    215183      !------------------------------------------------------------------------------| 
    216  
    217       IF ( num_sal == 4 ) THEN 
    218          DO ji = kideb, kiut 
    219             zji = MOD( npb(ji) - 1 , jpi ) + 1 
    220             zjj =    ( npb(ji) - 1 ) / jpi + 1 
    221             fseqv_1d(ji) = fseqv_1d(ji) + ( sss_m(zji,zjj) - bulk_sal    )               & 
    222                &                        * rhoic * a_i_b(ji) * MAX( dh_i_bott(ji) , 0.0 ) / rdt_ice 
    223          END DO 
    224       ELSE 
    225          DO ji = kideb, kiut 
    226             zji = MOD( npb(ji) - 1 , jpi ) + 1 
    227             zjj =    ( npb(ji) - 1 ) / jpi + 1 
    228             fseqv_1d(ji) = fseqv_1d(ji) + ( sss_m(zji,zjj) - s_i_new(ji) )               & 
    229                &                        * rhoic * a_i_b(ji) * MAX( dh_i_bott(ji) , 0.0 ) / rdt_ice 
    230          END DO 
    231       ENDIF 
     184      ! note: s_i_new = bulk_sal in constant salinity case 
     185      DO ji = kideb, kiut 
     186         sfx_thd_1d(ji) = sfx_thd_1d(ji) - s_i_new(ji) * rhoic * a_i_b(ji) * MAX( dh_i_bott(ji) , 0._wp ) * r1_rdtice 
     187      END DO 
    232188      ! 
    233189      CALL wrk_dealloc( jpij, ze_init, zhiold, zsiold ) 
Note: See TracChangeset for help on using the changeset viewer.