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 6051 for branches/2015/dev_CMCC_merge_2015/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_fct.F90 – NEMO

Ignore:
Timestamp:
2015-12-15T10:46:14+01:00 (8 years ago)
Author:
lovato
Message:

Merge branches/2015/dev_r5056_CMCC4_simplification (see ticket #1456)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_CMCC_merge_2015/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_fct.F90

    r5930 r6051  
    7070      INTEGER                              , INTENT(in   ) ::   kn_fct_h        ! order of the FCT scheme (=2 or 4) 
    7171      INTEGER                              , INTENT(in   ) ::   kn_fct_v        ! order of the FCT scheme (=2 or 4) 
    72       REAL(wp), DIMENSION(        jpk     ), INTENT(in   ) ::   p2dt            ! vertical profile of tracer time-step 
     72      REAL(wp)                             , INTENT(in   ) ::   p2dt            ! tracer time-step 
    7373      REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pun, pvn, pwn   ! 3 ocean velocity components 
    7474      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb, ptn        ! before and now tracer fields 
     
    7676      ! 
    7777      INTEGER  ::   ji, jj, jk, jn                           ! dummy loop indices   
    78       REAL(wp) ::   z2dtt, ztra                              ! local scalar 
     78      REAL(wp) ::   ztra                              ! local scalar 
    7979      REAL(wp) ::   zfp_ui, zfp_vj, zfp_wk, zC2t_u, zC4t_u   !   -      - 
    8080      REAL(wp) ::   zfm_ui, zfm_vj, zfm_wk, zC2t_v, zC4t_v   !   -      - 
     
    149149         !                
    150150         DO jk = 1, jpkm1     !* trend and after field with monotonic scheme 
    151             z2dtt = p2dt(jk) 
    152151            DO jj = 2, jpjm1 
    153152               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    159158!!gm why tmask added in the two following lines ???    the mask is done in tranxt ! 
    160159                  pta(ji,jj,jk,jn) =   pta(ji,jj,jk,jn)         + ztra   * tmask(ji,jj,jk) 
    161                   zwi(ji,jj,jk)    = ( ptb(ji,jj,jk,jn) + z2dtt * ztra ) * tmask(ji,jj,jk) 
     160                  zwi(ji,jj,jk)    = ( ptb(ji,jj,jk,jn) + p2dt * ztra ) * tmask(ji,jj,jk) 
    162161               END DO 
    163162            END DO 
     
    348347      INTEGER                              , INTENT(in   ) ::   kjpt            ! number of tracers 
    349348      INTEGER                              , INTENT(in   ) ::   kn_fct_zts      ! number of number of vertical sub-timesteps 
    350       REAL(wp), DIMENSION(        jpk     ), INTENT(in   ) ::   p2dt            ! vertical profile of tracer time-step 
     349      REAL(wp)                             , INTENT(in   ) ::   p2dt            ! tracer time-step 
    351350      REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pun, pvn, pwn   ! 3 ocean velocity components 
    352351      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb, ptn        ! before and now tracer fields 
     
    354353      ! 
    355354      REAL(wp), DIMENSION( jpk )                           ::   zts             ! length of sub-timestep for vertical advection 
    356       REAL(wp), DIMENSION( jpk )                           ::   zr_p2dt         ! reciprocal of tracer timestep 
     355      REAL(wp)                                             ::   zr_p2dt         ! reciprocal of tracer timestep 
    357356      INTEGER  ::   ji, jj, jk, jl, jn       ! dummy loop indices   
    358357      INTEGER  ::   jtb, jtn, jta   ! sub timestep pointers for leap-frog/euler forward steps 
    359358      INTEGER  ::   jtaken          ! toggle for collecting appropriate fluxes from sub timesteps 
    360359      REAL(wp) ::   z_rzts          ! Fractional length of Euler forward sub-timestep for vertical advection 
    361       REAL(wp) ::   z2dtt, ztra              ! local scalar 
     360      REAL(wp) ::   ztra              ! local scalar 
    362361      REAL(wp) ::   zfp_ui, zfp_vj, zfp_wk   !   -      - 
    363362      REAL(wp) ::   zfm_ui, zfm_vj, zfm_wk   !   -      - 
     
    390389      zwi(:,:,:) = 0._wp 
    391390      z_rzts = 1._wp / REAL( kn_fct_zts, wp ) 
    392       zr_p2dt(:) = 1._wp / p2dt(:) 
     391      zr_p2dt = 1._wp / p2dt 
    393392      ! 
    394393      !                                                          ! =========== 
     
    443442         ! 
    444443         DO jk = 1, jpkm1         ! total advective trend 
    445             z2dtt = p2dt(jk) 
    446444            DO jj = 2, jpjm1 
    447445               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    452450                  ! update and guess with monotonic sheme 
    453451                  pta(ji,jj,jk,jn) =   pta(ji,jj,jk,jn)         + ztra 
    454                   zwi(ji,jj,jk)    = ( ptb(ji,jj,jk,jn) + z2dtt * ztra ) * tmask(ji,jj,jk) 
     452                  zwi(ji,jj,jk)    = ( ptb(ji,jj,jk,jn) + p2dt * ztra ) * tmask(ji,jj,jk) 
    455453               END DO 
    456454            END DO 
     
    508506            IF( jl == 1 ) THEN                        ! Euler forward to kick things off 
    509507               jtb = 1   ;   jtn = 1   ;   jta = 2 
    510                zts(:) = p2dt(:) * z_rzts 
     508               zts(:) = p2dt * z_rzts 
    511509               jtaken = MOD( kn_fct_zts + 1 , 2)            ! Toggle to collect every second flux 
    512510               !                                            ! starting at jl =1 if kn_fct_zts is odd;  
     
    514512            ELSEIF( jl == 2 ) THEN                    ! First leapfrog step 
    515513               jtb = 1   ;   jtn = 2   ;   jta = 3 
    516                zts(:) = 2._wp * p2dt(:) * z_rzts 
     514               zts(:) = 2._wp * p2dt * z_rzts 
    517515            ELSE                                      ! Shuffle pointers for subsequent leapfrog steps 
    518516               jtb = MOD(jtb,3) + 1 
     
    557555            DO jj = 2, jpjm1 
    558556               DO ji = fs_2, fs_jpim1 
    559                   zwz(ji,jj,jk) = ( zwzts(ji,jj,jk) * zr_p2dt(jk) - zwz_sav(ji,jj,jk) ) * wmask(ji,jj,jk) 
     557                  zwz(ji,jj,jk) = ( zwzts(ji,jj,jk) * zr_p2dt - zwz_sav(ji,jj,jk) ) * wmask(ji,jj,jk) 
    560558               END DO 
    561559            END DO 
     
    623621      !!       in-space based differencing for fluid 
    624622      !!---------------------------------------------------------------------- 
    625       REAL(wp), DIMENSION(jpk)         , INTENT(in   ) ::   p2dt            ! vertical profile of tracer time-step 
     623      REAL(wp)                         , INTENT(in   ) ::   p2dt            ! tracer time-step 
    626624      REAL(wp), DIMENSION (jpi,jpj,jpk), INTENT(in   ) ::   pbef, paft      ! before & after field 
    627625      REAL(wp), DIMENSION (jpi,jpj,jpk), INTENT(inout) ::   paa, pbb, pcc   ! monotonic fluxes in the 3 directions 
     
    629627      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    630628      INTEGER  ::   ikm1         ! local integer 
    631       REAL(wp) ::   zpos, zneg, zbt, za, zb, zc, zbig, zrtrn, z2dtt   ! local scalars 
     629      REAL(wp) ::   zpos, zneg, zbt, za, zb, zc, zbig, zrtrn    ! local scalars 
    632630      REAL(wp) ::   zau, zbu, zcu, zav, zbv, zcv, zup, zdo            !   -      - 
    633631      REAL(wp), POINTER, DIMENSION(:,:,:) :: zbetup, zbetdo, zbup, zbdo 
     
    652650      DO jk = 1, jpkm1 
    653651         ikm1 = MAX(jk-1,1) 
    654          z2dtt = p2dt(jk) 
    655652         DO jj = 2, jpjm1 
    656653            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    679676 
    680677               ! up & down beta terms 
    681                zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) / z2dtt 
     678               zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) / p2dt 
    682679               zbetup(ji,jj,jk) = ( zup            - paft(ji,jj,jk) ) / ( zpos + zrtrn ) * zbt 
    683680               zbetdo(ji,jj,jk) = ( paft(ji,jj,jk) - zdo            ) / ( zneg + zrtrn ) * zbt 
Note: See TracChangeset for help on using the changeset viewer.