Ignore:
Timestamp:
2017-09-05T19:53:41+02:00 (3 years ago)
Author:
clem
Message:

changes in style - part2 -

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/icecor.F90

    r8491 r8498  
    2626   USE lib_mpp        ! MPP library 
    2727   USE timing         ! Timing 
     28   USE iom            ! 
    2829 
    2930   IMPLICIT NONE 
     
    5354      INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices 
    5455      REAL(wp) ::   zsal, zvi_b, zsmv_b, zei_b, zfs_b, zfw_b, zft_b, zzc 
     56      REAL(wp), DIMENSION(jpi,jpj) ::   zafx   ! concentration trends diag 
    5557      !!---------------------------------------------------------------------- 
    5658      IF( nn_timing == 1 )   CALL timing_start('icecor') 
     
    6567      ! 
    6668      ! 
    67       !                             !----------------------------------------------------- 
    68       IF( kn == 2 ) THEN            !  thickness of the smallest category above himin    ! 
     69      IF( kn == 2 ) THEN 
    6970         !                          !----------------------------------------------------- 
    70          ! 
    71          DO jj = 1, jpj  
    72             DO ji = 1, jpi 
    73 !!gm replace this 
    74                rswitch = MAX( 0._wp , SIGN( 1._wp, a_i(ji,jj,1) - epsi20 ) )   !0 if no ice and 1 if yes 
    75                ht_i(ji,jj,1) = v_i (ji,jj,1) / MAX( a_i(ji,jj,1) , epsi20 ) * rswitch 
    76 !!gm by more readable coding (not slower coding since already a IF in the loop): 
    77 !               IF( a_i(ji,jj,1) >= epsi20 )   ht_i(ji,jj,1) = v_i (ji,jj,1) / a_i(ji,jj,1) 
    78 !!gm 
    79                IF( v_i(ji,jj,1) > 0._wp .AND. ht_i(ji,jj,1) < rn_himin ) THEN 
    80                   a_i (ji,jj,1) = a_i (ji,jj,1) * ht_i(ji,jj,1) / rn_himin 
    81                ENDIF 
    82             END DO 
    83          END DO 
     71         !                          !  thickness of the smallest category above himin    ! 
     72         !                          !----------------------------------------------------- 
     73         WHERE( a_i(:,:,1) >= epsi20 )   ;   ht_i(:,:,1) = v_i (:,:,1) / a_i(:,:,1) 
     74         ELSEWHERE                       ;   ht_i(:,:,1) = 0._wp 
     75         END WHERE 
     76         WHERE( ht_i(:,:,1) < rn_himin )     a_i (:,:,1) = a_i (:,:,1) * ht_i(:,:,1) / rn_himin 
    8477         ! 
    8578      ENDIF 
    86  
    8779      !                             !----------------------------------------------------- 
    88       at_i(:,:) = a_i(:,:,1)        !  ice concentration should not exceed amax          ! 
    89       DO jl = 2, jpl                !----------------------------------------------------- 
    90          at_i(:,:) = a_i(:,:,jl) + at_i(:,:) 
     80      !                             !  ice concentration should not exceed amax          ! 
     81      !                             !----------------------------------------------------- 
     82      at_i(:,:) = SUM( a_i(:,:,:), dim=3 ) 
     83      DO jl  = 1, jpl 
     84         WHERE( at_i(:,:) > rn_amax_2d(:,:) )   a_i(:,:,jl) = a_i(:,:,jl) * rn_amax_2d(:,:) / at_i(:,:) 
    9185      END DO 
    92       ! 
    93 !!gm   Question   it seams to me that we have the following equality (dropping the "(ji,jj)": 
    94 !      ( 1. - ( 1. - rn_amax_2d / at_i ) ) =  ( 1. - ( at_i - rn_amax_2d ) / at_i ) 
    95 !                                          =  ( at_i - ( at_i - rn_amax_2d ) ) / at_i 
    96 !                                          =  ( + rn_amax_2d  ) / at_i 
    97 !                                          =  rn_amax_2d / at_i 
    98 !     No ?  if yes see "!!gm   better" juste below  
    99 !gm 
    100       DO jl  = 1, jpl 
    101          DO jj = 1, jpj 
    102             DO ji = 1, jpi 
    103                IF( at_i(ji,jj) > rn_amax_2d(ji,jj) .AND. a_i(ji,jj,jl) > 0._wp ) THEN 
    104                   a_i(ji,jj,jl) = a_i(ji,jj,jl) * ( 1._wp - ( 1._wp - rn_amax_2d(ji,jj) / at_i(ji,jj) ) ) 
    105 !!gm   better:    a_i(ji,jj,jl) = a_i(ji,jj,jl) * rn_amax_2d(ji,jj) / at_i(ji,jj)            
    106                ENDIF 
    107             END DO 
    108          END DO 
    109       END DO 
    110 !!gm  Other question:  why testing a_i(ji,jj,jl) > 0._wp ?   a_i is >=0, a multiplication by 0 does not change the results.... 
    111 !!gm  so at the end, the loop can be recoded without IF as: 
    112 !      WHERE( at_i(:,:) > rn_amax_2d(:,:) ) 
    113 !         DO jl  = 1, jpl 
    114 !            a_i(:,:,jl) = a_i(:,:,jl) * MAX( rn_amax_2d(:,:), at_i(:,:) ) / at_i(:,:) 
    115 !         END DO 
    116 !      END WHERE 
    117 !!gm  No? 
    11886     
    11987      !                             !----------------------------------------------------- 
    120       IF (  nn_icesal == 2  ) THEN  !  Ice salinity bounds                               ! 
     88      IF (  nn_icesal == 2  ) THEN  !  salinity stays in bounds [Simin,Simax]            ! 
    12189      !                             !----------------------------------------------------- 
    12290         zzc = rhoic * r1_rdtice 
    123          DO jl = 1, jpl                  ! salinity stays in bounds [Simin,Simax] 
     91         DO jl = 1, jpl 
    12492            DO jj = 1, jpj  
    12593               DO ji = 1, jpi 
    126                   IF( v_i(ji,jj,jl) > 0._wp ) THEN   ! clem: useless IF ??? 
    127                      zsal = smv_i(ji,jj,jl) 
    128                      smv_i(ji,jj,jl) = MIN(  MAX( rn_simin*v_i(ji,jj,jl) , smv_i(ji,jj,jl) ) , rn_simax*v_i(ji,jj,jl)  ) 
    129                      ! associated salt flux 
    130                      sfx_res(ji,jj) = sfx_res(ji,jj) - ( smv_i(ji,jj,jl) - zsal ) * zzc 
    131                   ENDIF 
     94                  zsal = smv_i(ji,jj,jl) 
     95                  smv_i(ji,jj,jl) = MIN(  MAX( rn_simin*v_i(ji,jj,jl) , smv_i(ji,jj,jl) ) , rn_simax*v_i(ji,jj,jl)  ) 
     96                  sfx_res(ji,jj) = sfx_res(ji,jj) - ( smv_i(ji,jj,jl) - zsal ) * zzc   ! associated salt flux 
    13297               END DO 
    13398            END DO 
     
    157122         END DO 
    158123         CALL lbc_lnk_multi( u_ice, 'U', -1., v_ice, 'V', -1. )            ! lateral boundary conditions 
    159          ! 
    160 !!gm  I think masking here is unnecessary, u_ice already masked and we only introduce zeros in the field 
    161          u_ice(:,:) = u_ice(:,:) * umask(:,:,1)                            ! mask velocities 
    162          v_ice(:,:) = v_ice(:,:) * vmask(:,:,1) 
    163124      ENDIF 
    164125 
     
    172133      !                             !----------------------------------------------------- 
    173134      CASE( 1 )                        !--- dyn trend diagnostics 
    174          DO jl  = 1, jpl 
    175             afx_dyn(:,:) = afx_dyn(:,:) + ( a_i(:,:,jl) - a_i_b(:,:,jl) ) * r1_rdtice 
    176          END DO 
    177135         ! 
    178136!!gm   here I think the number of ice cat is too small to use a SUM instruction... 
     
    188146            END DO 
    189147         END DO 
     148         !                       ! concentration tendency (dynamics) 
     149         zafx   (:,:) = SUM( a_i(:,:,:) - a_i_b(:,:,:), dim=3 ) * r1_rdtice  
     150         afx_tot(:,:) = zafx(:,:) 
     151         IF( iom_use('afxdyn') )   CALL iom_put( 'afxdyn' , zafx(:,:) ) 
    190152         ! 
    191153      CASE( 2 )                        !--- thermo trend diagnostics & ice aging 
    192154         ! 
    193          DO jl  = 1, jpl 
    194             oa_i(:,:,jl) = oa_i(:,:,jl) +   a_i(:,:,jl)                   * rdt_ice       ! ice natural aging incrementation 
    195             afx_thd(:,:) = afx_thd(:,:) + ( a_i(:,:,jl) - a_i_b(:,:,jl) ) * r1_rdtice     ! thermo tendancy 
    196          END DO 
    197          afx_tot(:,:) = afx_thd(:,:) + afx_dyn(:,:) 
     155         oa_i(:,:,:) = oa_i(:,:,:) + a_i(:,:,:) * rdt_ice   ! ice natural aging incrementation 
    198156         ! 
    199157!!gm   here I think the number of ice cat is too small to use a SUM instruction... 
     
    209167            END DO 
    210168         END DO 
     169         !                       ! concentration tendency (total + thermo) 
     170         zafx   (:,:) = SUM( a_i(:,:,:) - a_i_b(:,:,:), dim=3 ) * r1_rdtice 
     171         afx_tot(:,:) = afx_tot(:,:) + zafx(:,:) 
     172         IF( iom_use('afxthd') )   CALL iom_put( 'afxthd' , zafx(:,:) ) 
     173         IF( iom_use('afxtot') )   CALL iom_put( 'afxtot' , afx_tot(:,:) ) 
    211174         ! 
    212175      END SELECT 
Note: See TracChangeset for help on using the changeset viewer.