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 14200 for NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/TRP/trcatf.F90 – NEMO

Ignore:
Timestamp:
2020-12-17T15:36:44+01:00 (4 years ago)
Author:
mcastril
Message:

Merging r14117 through r14199 into dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/TRP/trcatf.F90

    r14086 r14200  
    2525   !!   'key_top'                                                TOP models 
    2626   !!---------------------------------------------------------------------- 
    27    !!   trc_atf     : time stepping on passive tracers 
     27   !!   trc_atf       : time stepping on passive tracers 
    2828   !!---------------------------------------------------------------------- 
    2929   USE par_trc        ! need jptra, number of passive tracers 
    30    USE oce_trc         ! ocean dynamics and tracers variables 
    31    USE trc             ! ocean passive tracers variables 
     30   USE oce_trc        ! ocean dynamics and tracers variables 
     31   USE trc            ! ocean passive tracers variables 
    3232   USE trd_oce 
    3333   USE trdtra 
    34 # if defined key_qco 
    35    USE traatf_qco 
     34# if defined key_qco   ||   defined key_linssh 
     35   USE traatf_qco     ! tracer : Asselin filter (qco) 
    3636# else 
    37    USE traatf 
     37   USE traatf         ! tracer : Asselin filter (vvl) 
    3838# endif 
    3939   USE bdy_oce   , ONLY: ln_bdy 
    40    USE trcbdy          ! BDY open boundaries 
     40   USE trcbdy         ! BDY open boundaries 
    4141# if defined key_agrif 
    4242   USE agrif_top_interp 
    4343# endif 
    4444   ! 
    45    USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    46    USE prtctl          ! Print control for debbuging 
     45   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
     46   USE prtctl         ! Print control for debbuging 
    4747 
    4848   IMPLICIT NONE 
     
    103103#endif 
    104104      ! Update after tracer on domain lateral boundaries 
    105       CALL lbc_lnk( 'trcatf', ptr(:,:,:,:,Kaa), 'T', 1. )    
     105      CALL lbc_lnk( 'trcatf', ptr(:,:,:,:,Kaa), 'T', 1._wp )    
    106106 
    107107      IF( ln_bdy )  CALL trc_bdy( kt, Kbb, Kmm, Kaa ) 
     
    157157      ELSE      
    158158         IF( .NOT. l_offline ) THEN ! Leap-Frog + Asselin filter time stepping 
    159 # if defined key_qco 
     159# if defined key_qco   ||   defined key_linssh 
    160160            IF( ln_linssh ) THEN   ;   CALL tra_atf_fix_lf( kt, Kbb, Kmm, Kaa, nittrc000,        'TRC', ptr, jptra )                     !     linear ssh 
    161161            ELSE                   ;   CALL tra_atf_qco_lf( kt, Kbb, Kmm, Kaa, nittrc000, rn_Dt, 'TRC', ptr, sbc_trc, sbc_trc_b, jptra ) ! non-linear ssh 
    162162# else 
    163             IF( ln_linssh ) THEN   ;   CALL tra_atf_fix( kt, Kbb, Kmm, Kaa, nittrc000,         'TRC', ptr, jptra )                     !     linear ssh 
    164             ELSE                   ;   CALL tra_atf_vvl( kt, Kbb, Kmm, Kaa, nittrc000, rn_Dt, 'TRC', ptr, sbc_trc, sbc_trc_b, jptra ) ! non-linear ssh 
     163            IF( ln_linssh ) THEN   ;   CALL tra_atf_fix( kt, Kbb, Kmm, Kaa, nittrc000,         'TRC', ptr, jptra )                       !     linear ssh 
     164            ELSE                   ;   CALL tra_atf_vvl( kt, Kbb, Kmm, Kaa, nittrc000, rn_Dt, 'TRC', ptr, sbc_trc, sbc_trc_b, jptra )    ! non-linear ssh 
    165165# endif 
    166166            ENDIF 
     
    169169         ENDIF 
    170170         ! 
    171          CALL lbc_lnk_multi( 'trcatf', ptr(:,:,:,:,Kmm), 'T', 1._wp, ptr(:,:,:,:,Kaa), 'T', 1._wp, ptr(:,:,:,:,Kaa), 'T', 1._wp ) 
     171         CALL lbc_lnk( 'trcatf', ptr(:,:,:,:,Kmm), 'T', 1._wp ) 
    172172      ENDIF 
    173173      ! 
     
    193193   END SUBROUTINE trc_atf 
    194194 
    195 # if ! defined key_qco 
     195# if defined key_qco   ||   defined key_linssh 
    196196   SUBROUTINE trc_atf_off( kt, Kbb, Kmm, Kaa, ptr ) 
    197197      !!---------------------------------------------------------------------- 
     
    225225      INTEGER  ::   ji, jj, jk, jn              ! dummy loop indices 
    226226      REAL(wp) ::   ztc_a , ztc_n , ztc_b , ztc_f , ztc_d    ! local scalar 
    227       REAL(wp) ::   ze3t_b, ze3t_n, ze3t_a, ze3t_f, ze3t_d   !   -      - 
     227      REAL(wp) ::   ze3t_b, ze3t_n, ze3t_a, ze3t_f           !   -      - 
    228228      !!---------------------------------------------------------------------- 
    229229      ! 
     
    241241      DO jn = 1, jptra       
    242242         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    243             ze3t_b = e3t(ji,jj,jk,Kbb) 
    244             ze3t_n = e3t(ji,jj,jk,Kmm) 
    245             ze3t_a = e3t(ji,jj,jk,Kaa) 
     243            ze3t_b = 1._wp + r3t(ji,jj,Kbb) * tmask(ji,jj,jk) 
     244            ze3t_n = 1._wp + r3t(ji,jj,Kmm) * tmask(ji,jj,jk) 
     245            ze3t_a = 1._wp + r3t(ji,jj,Kaa) * tmask(ji,jj,jk) 
    246246            !                                         ! tracer content at Before, now and after 
    247             ztc_b  = ptr(ji,jj,jk,jn,Kbb)  * ze3t_b 
    248             ztc_n  = ptr(ji,jj,jk,jn,Kmm)  * ze3t_n 
     247            ztc_b  = ptr(ji,jj,jk,jn,Kbb) * ze3t_b 
     248            ztc_n  = ptr(ji,jj,jk,jn,Kmm) * ze3t_n 
    249249            ztc_a  = ptr(ji,jj,jk,jn,Kaa) * ze3t_a 
    250250            ! 
    251             ze3t_d = ze3t_a - 2. * ze3t_n + ze3t_b 
    252251            ztc_d  = ztc_a  - 2. * ztc_n  + ztc_b 
    253252            ! 
    254             ze3t_f = ze3t_n + rn_atfp * ze3t_d 
     253            ze3t_f = 1._wp + r3t_f(ji,jj)*tmask(ji,jj,jk) 
    255254            ztc_f  = ztc_n  + rn_atfp * ztc_d 
    256255            ! 
    257256            IF( .NOT. ln_linssh .AND. jk == mikt(ji,jj) ) THEN           ! first level  
    258                ze3t_f = ze3t_f - rfact2 * ( emp_b(ji,jj)      - emp(ji,jj)   )  
    259257               ztc_f  = ztc_f  - rfact1 * ( sbc_trc(ji,jj,jn) - sbc_trc_b(ji,jj,jn) ) 
    260258            ENDIF 
     
    300298      INTEGER  ::   ji, jj, jk, jn              ! dummy loop indices 
    301299      REAL(wp) ::   ztc_a , ztc_n , ztc_b , ztc_f , ztc_d    ! local scalar 
    302       REAL(wp) ::   ze3t_b, ze3t_n, ze3t_a, ze3t_f           !   -      - 
     300      REAL(wp) ::   ze3t_b, ze3t_n, ze3t_a, ze3t_f, ze3t_d   !   -      - 
    303301      !!---------------------------------------------------------------------- 
    304302      ! 
     
    316314      DO jn = 1, jptra       
    317315         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    318             ze3t_b = 1._wp + r3t(ji,jj,Kbb) * tmask(ji,jj,jk) 
    319             ze3t_n = 1._wp + r3t(ji,jj,Kmm) * tmask(ji,jj,jk) 
    320             ze3t_a = 1._wp + r3t(ji,jj,Kaa) * tmask(ji,jj,jk) 
     316            ze3t_b = e3t(ji,jj,jk,Kbb) 
     317            ze3t_n = e3t(ji,jj,jk,Kmm) 
     318            ze3t_a = e3t(ji,jj,jk,Kaa) 
    321319            !                                         ! tracer content at Before, now and after 
    322             ztc_b  = ptr(ji,jj,jk,jn,Kbb) * ze3t_b 
    323             ztc_n  = ptr(ji,jj,jk,jn,Kmm) * ze3t_n 
     320            ztc_b  = ptr(ji,jj,jk,jn,Kbb)  * ze3t_b 
     321            ztc_n  = ptr(ji,jj,jk,jn,Kmm)  * ze3t_n 
    324322            ztc_a  = ptr(ji,jj,jk,jn,Kaa) * ze3t_a 
    325323            ! 
     324            ze3t_d = ze3t_a - 2. * ze3t_n + ze3t_b 
    326325            ztc_d  = ztc_a  - 2. * ztc_n  + ztc_b 
    327326            ! 
    328             ze3t_f = 1._wp + r3t_f(ji,jj)*tmask(ji,jj,jk) 
     327            ze3t_f = ze3t_n + rn_atfp * ze3t_d 
    329328            ztc_f  = ztc_n  + rn_atfp * ztc_d 
    330329            ! 
    331330            IF( .NOT. ln_linssh .AND. jk == mikt(ji,jj) ) THEN           ! first level  
     331               ze3t_f = ze3t_f - rfact2 * ( emp_b(ji,jj)      - emp(ji,jj)   )  
    332332               ztc_f  = ztc_f  - rfact1 * ( sbc_trc(ji,jj,jn) - sbc_trc_b(ji,jj,jn) ) 
    333333            ENDIF 
Note: See TracChangeset for help on using the changeset viewer.