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.
Changeset 4332 for branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limitd_th.F90 – NEMO

Ignore:
Timestamp:
2013-12-11T15:38:42+01:00 (11 years ago)
Author:
clem
Message:

update LIM3 to fix remaining bugs. Now working in global and regional config.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limitd_th.F90

    r4155 r4332  
    4545   PUBLIC   lim_itd_shiftice 
    4646 
    47    REAL(wp) ::   epsi20 = 1.e-20_wp   ! constant values 
    48    REAL(wp) ::   epsi13 = 1.e-13_wp   ! 
    4947   REAL(wp) ::   epsi10 = 1.e-10_wp   ! 
     48   REAL(wp) ::   epsi06 = 1.e-6_wp   ! 
    5049 
    5150   !!---------------------------------------------------------------------- 
     
    110109      CALL lim_var_glo2eqv    ! only for info 
    111110 
    112       !---------------------------------------------------------------------------------------- 
    113       !  4) Computation of trend terms and get back to old values       
    114       !---------------------------------------------------------------------------------------- 
    115  
    116       !- Trend terms 
    117       d_a_i_thd(:,:,:)   = a_i(:,:,:)   - old_a_i(:,:,:)  
    118       d_v_s_thd(:,:,:)   = v_s(:,:,:)   - old_v_s(:,:,:) 
    119       d_v_i_thd(:,:,:)   = v_i(:,:,:)   - old_v_i(:,:,:)   
    120       d_e_s_thd(:,:,:,:) = e_s(:,:,:,:) - old_e_s(:,:,:,:)  
    121       d_e_i_thd(:,:,:,:) = e_i(:,:,:,:) - old_e_i(:,:,:,:) 
    122       !?? d_oa_i_thd(:,:,:)  = oa_i (:,:,:) - old_oa_i (:,:,:) 
    123       d_smv_i_thd(:,:,:) = 0._wp 
    124       IF( num_sal == 2 )   d_smv_i_thd(:,:,:) = smv_i(:,:,:) - old_smv_i(:,:,:) 
    125  
    126       ! diag only (clem) 
    127       dv_dt_thd(:,:,:) = d_v_i_thd(:,:,:) * r1_rdtice * rday 
    128  
    129       IF(ln_ctl) THEN   ! Control print 
     111     IF(ln_ctl) THEN   ! Control print 
    130112         CALL prt_ctl_info(' ') 
    131113         CALL prt_ctl_info(' - Cell values : ') 
     
    183165      ! ------------------------------- 
    184166      ! 
    185       !- Recover Old values 
    186       a_i(:,:,:)   = old_a_i (:,:,:) 
    187       v_s(:,:,:)   = old_v_s (:,:,:) 
    188       v_i(:,:,:)   = old_v_i (:,:,:) 
    189       e_s(:,:,:,:) = old_e_s (:,:,:,:) 
    190       e_i(:,:,:,:) = old_e_i (:,:,:,:) 
    191       !?? oa_i(:,:,:)  = old_oa_i(:,:,:) 
    192       IF( num_sal == 2 )   smv_i(:,:,:) = old_smv_i(:,:,:) 
    193       ! 
    194       IF( nn_timing == 1 )  CALL timing_stop('limitd_th') 
     167     IF( nn_timing == 1 )  CALL timing_stop('limitd_th') 
    195168   END SUBROUTINE lim_itd_th 
    196169   ! 
     
    281254         DO jj = 1, jpj 
    282255            DO ji = 1, jpi 
    283                zindb             = 1.0-MAX(0.0,SIGN(1.0,-a_i(ji,jj,jl)+epsi10))     !0 if no ice and 1 if yes 
    284                ht_i(ji,jj,jl)    = v_i(ji,jj,jl) / MAX(a_i(ji,jj,jl),epsi10) * zindb 
    285                zindb             = 1.0-MAX(0.0,SIGN(1.0,-old_a_i(ji,jj,jl)+epsi10)) !0 if no ice and 1 if yes 
    286                zht_i_o(ji,jj,jl) = old_v_i(ji,jj,jl) / MAX(old_a_i(ji,jj,jl),epsi10) * zindb 
    287                IF( a_i(ji,jj,jl) > 1e-6 )   zdhice(ji,jj,jl) = ht_i(ji,jj,jl) - zht_i_o(ji,jj,jl)  
     256               zindb             = 1.0 - MAX( 0.0, SIGN( 1.0, - a_i(ji,jj,jl) + epsi10 ) )     !0 if no ice and 1 if yes 
     257               ht_i(ji,jj,jl)    = v_i(ji,jj,jl) / MAX( a_i(ji,jj,jl), epsi10 ) * zindb 
     258               zindb             = 1.0 - MAX( 0.0, SIGN( 1.0, - old_a_i(ji,jj,jl) + epsi10) ) !0 if no ice and 1 if yes 
     259               zht_i_o(ji,jj,jl) = old_v_i(ji,jj,jl) / MAX( old_a_i(ji,jj,jl), epsi10 ) * zindb 
     260               IF( a_i(ji,jj,jl) > epsi06 )   zdhice(ji,jj,jl) = ht_i(ji,jj,jl) - zht_i_o(ji,jj,jl)  
    288261            END DO 
    289262         END DO 
     
    321294      ! Tricky trick see limitd_me.F90 
    322295      ! will be soon removed, CT 
    323       ! hi_max(kubnd) = 999.99 
     296      ! hi_max(kubnd) = 99. 
    324297      zhbnew(:,:,:) = 0._wp 
    325298 
     
    329302            ij = nind_j(ji) 
    330303            ! 
    331             IF ( ( zht_i_o(ii,ij,jl)  .GT.epsi10 ) .AND. &  
    332                ( zht_i_o(ii,ij,jl+1).GT.epsi10 ) ) THEN 
     304            IF ( ( zht_i_o(ii,ij,jl) .GT. epsi10 ) .AND. &  
     305               ( zht_i_o(ii,ij,jl+1) .GT. epsi10 ) ) THEN 
    333306               !interpolate between adjacent category growth rates 
    334307               zslope = ( zdhice(ii,ij,jl+1)     - zdhice(ii,ij,jl) ) / & 
     
    402375               zhbnew(ji,jj,kubnd) = 3._wp * ht_i(ji,jj,kubnd) - 2._wp * zhbnew(ji,jj,kubnd-1) 
    403376            ELSE 
    404                zhbnew(ji,jj,kubnd) = hi_max(kubnd) 
     377               zhbnew(ji,jj,kubnd) = hi_max(kubnd)   
     378               !!? clem bug: since hi_max(jpl)=99, this limit is very high  
     379               !!? but I think it is erased in fitline subroutine  
    405380            ENDIF 
    406381 
     
    447422                     * a_i(ii,ij,klbnd) / ( a_i(ii,ij,klbnd) - zda0 ) 
    448423                  a_i(ii,ij,klbnd)  = a_i(ii,ij,klbnd) - zda0 
    449                   v_i(ii,ij,klbnd)  = a_i(ii,ij,klbnd)*ht_i(ii,ij,klbnd) ! clem@useless ? 
     424                  v_i(ii,ij,klbnd)  = a_i(ii,ij,klbnd)*ht_i(ii,ij,klbnd) ! clem-useless ? 
    450425               ENDIF     ! zetamax > 0 
    451426               ! ji, a_i > epsi10 
     
    539514            a_i(ii,ij,1)  = a_i(ii,ij,1) * ht_i(ii,ij,1) / hiclim  
    540515            ht_i(ii,ij,1) = hiclim 
    541             v_i(ii,ij,1)  = a_i(ii,ij,1) * ht_i(ii,ij,1) !clem@useless 
     516            v_i(ii,ij,1)  = a_i(ii,ij,1) * ht_i(ii,ij,1) !clem-useless 
    542517         ENDIF 
    543518      END DO !ji 
     
    602577      REAL(wp) ::   zdhr         ! 1 / (hR - hL) 
    603578      REAL(wp) ::   zwk1, zwk2   ! temporary variables 
    604       REAL(wp) ::   zacrith      ! critical minimum concentration in an ice category 
    605       !!------------------------------------------------------------------ 
    606       ! 
    607       zacrith       = 1.0e-6 
     579      !!------------------------------------------------------------------ 
     580      ! 
    608581      ! 
    609582      DO jj = 1, jpj 
    610583         DO ji = 1, jpi 
    611584            ! 
    612             IF( zremap_flag(ji,jj) == 1 .AND. a_i(ji,jj,num_cat) > zacrith   & 
     585            IF( zremap_flag(ji,jj) == 1 .AND. a_i(ji,jj,num_cat) > epsi10   & 
    613586               &                        .AND. hice(ji,jj)        > 0._wp     ) THEN 
    614587 
     
    1009982                  !zdaice(ji,jj,jl)  = a_i(ji,jj,jl) 
    1010983                  !zdvice(ji,jj,jl)  = v_i(ji,jj,jl) 
    1011                   zdaice(ji,jj,jl)  = a_i(ji,jj,jl)/2 
    1012                   zdvice(ji,jj,jl)  = v_i(ji,jj,jl)-zdaice(ji,jj,jl)*(hi_max(jl)+hi_max(jl-1))/2 
     984                  !zdaice(ji,jj,jl)  = a_i(ji,jj,jl) * 0.5_wp 
     985                  !zdvice(ji,jj,jl)  = v_i(ji,jj,jl)-zdaice(ji,jj,jl)*(hi_max(jl)+hi_max(jl-1)) * 0.5_wp 
    1013986                  ! end TECLIM change  
     987                  ! clem: how much of a_i you send in cat sup is somewhat arbitrary 
     988                  zdaice(ji,jj,jl)  = a_i(ji,jj,jl) * ( ht_i(ji,jj,jl) - hi_max(jl) + epsi10 ) / ht_i(ji,jj,jl)   
     989                  zdvice(ji,jj,jl)  = v_i(ji,jj,jl) - ( a_i(ji,jj,jl) - zdaice(ji,jj,jl) ) * ( hi_max(jl) - epsi10 ) 
    1014990               ENDIF 
    1015991            END DO                 ! ji 
     
    10381014         zshiftflag = 0 
    10391015 
     1016!clem-change 
     1017!         DO jj = 1, jpj 
     1018!            DO ji = 1, jpi 
     1019!               IF( a_i(ji,jj,jl+1) >  epsi10 .AND.   & 
     1020!                  ht_i(ji,jj,jl+1) <= hi_max(jl) ) THEN 
     1021!                  ! 
     1022!                  zshiftflag = 1 
     1023!                  zdonor(ji,jj,jl) = jl + 1 
     1024!                  zdaice(ji,jj,jl) = a_i(ji,jj,jl+1)  
     1025!                  zdvice(ji,jj,jl) = v_i(ji,jj,jl+1) 
     1026!               ENDIF 
     1027!            END DO                 ! ji 
     1028!         END DO                 ! jj 
     1029! 
     1030!         IF(lk_mpp)   CALL mpp_max( zshiftflag ) 
     1031!          
     1032!         IF( zshiftflag == 1 ) THEN            ! Shift ice between categories 
     1033!            CALL lim_itd_shiftice( klbnd, kubnd, zdonor, zdaice, zdvice ) 
     1034!            ! Reset shift parameters 
     1035!            zdonor(:,:,jl) = 0 
     1036!            zdaice(:,:,jl) = 0._wp 
     1037!            zdvice(:,:,jl) = 0._wp 
     1038!         ENDIF 
     1039!clem-change 
     1040 
     1041         ! clem-change begin: why not doing that? 
    10401042         DO jj = 1, jpj 
    10411043            DO ji = 1, jpi 
    10421044               IF( a_i(ji,jj,jl+1) >  epsi10 .AND.   & 
    10431045                  ht_i(ji,jj,jl+1) <= hi_max(jl) ) THEN 
    1044                   ! 
    1045                   zshiftflag = 1 
    1046                   zdonor(ji,jj,jl) = jl + 1 
    1047                   zdaice(ji,jj,jl) = a_i(ji,jj,jl+1)  
    1048                   zdvice(ji,jj,jl) = v_i(ji,jj,jl+1) 
     1046                  ht_i(ji,jj,jl+1) = hi_max(jl) + epsi10 
     1047                  a_i (ji,jj,jl+1) = v_i(ji,jj,jl+1) / ht_i(ji,jj,jl+1)  
    10491048               ENDIF 
    10501049            END DO                 ! ji 
    10511050         END DO                 ! jj 
    1052  
    1053          IF(lk_mpp)   CALL mpp_max( zshiftflag ) 
    1054           
    1055          IF( zshiftflag == 1 ) THEN            ! Shift ice between categories 
    1056             CALL lim_itd_shiftice( klbnd, kubnd, zdonor, zdaice, zdvice ) 
    1057             ! Reset shift parameters 
    1058             zdonor(:,:,jl) = 0 
    1059             zdaice(:,:,jl) = 0._wp 
    1060             zdvice(:,:,jl) = 0._wp 
    1061          ENDIF 
     1051         ! clem-change end 
    10621052 
    10631053      END DO                    ! jl 
Note: See TracChangeset for help on using the changeset viewer.