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 13295 for NEMO/trunk/src/OCE/DYN/dynvor.F90 – NEMO

Ignore:
Timestamp:
2020-07-10T20:24:21+02:00 (4 years ago)
Author:
acc
Message:

Replace do-loop macros in the trunk with alternative forms with greater flexibility for extra halo applications. This alters a lot of routines but does not change any behaviour or results. do_loop_substitute.h90 is greatly simplified by this change. SETTE results are identical to those with the previous revision

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/OCE/DYN/dynvor.F90

    r13286 r13295  
    231231      CASE ( np_RVO )                           !* relative vorticity 
    232232         DO jk = 1, jpkm1                                 ! Horizontal slab 
    233             DO_2D_10_10 
     233            DO_2D( 1, 0, 1, 0 ) 
    234234               zwz(ji,jj,jk) = (  e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk)  & 
    235235                  &             - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    236236            END_2D 
    237237            IF( ln_dynvor_msk ) THEN                     ! mask/unmask relative vorticity  
    238                DO_2D_10_10 
     238               DO_2D( 1, 0, 1, 0 ) 
    239239                  zwz(ji,jj,jk) = zwz(ji,jj,jk) * fmask(ji,jj,jk) 
    240240               END_2D 
     
    246246      CASE ( np_CRV )                           !* Coriolis + relative vorticity 
    247247         DO jk = 1, jpkm1                                 ! Horizontal slab 
    248             DO_2D_10_10 
     248            DO_2D( 1, 0, 1, 0 ) 
    249249               zwz(ji,jj,jk) = (   e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk)   & 
    250250                  &              - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)   ) * r1_e1e2f(ji,jj) 
    251251            END_2D 
    252252            IF( ln_dynvor_msk ) THEN                     ! mask/unmask relative vorticity  
    253                DO_2D_10_10 
     253               DO_2D( 1, 0, 1, 0 ) 
    254254                  zwz(ji,jj,jk) = zwz(ji,jj,jk) * fmask(ji,jj,jk) 
    255255               END_2D 
     
    269269            zwt(:,:) = ff_t(:,:) * e1e2t(:,:)*e3t(:,:,jk,Kmm) 
    270270         CASE ( np_RVO )                           !* relative vorticity 
    271             DO_2D_01_01 
     271            DO_2D( 0, 1, 0, 1 ) 
    272272               zwt(ji,jj) = r1_4 * (   zwz(ji-1,jj  ,jk) + zwz(ji,jj  ,jk)   & 
    273273                  &                  + zwz(ji-1,jj-1,jk) + zwz(ji,jj-1,jk) ) & 
     
    275275            END_2D 
    276276         CASE ( np_MET )                           !* metric term 
    277             DO_2D_01_01 
     277            DO_2D( 0, 1, 0, 1 ) 
    278278               zwt(ji,jj) = (   ( pv(ji,jj,jk) + pv(ji,jj-1,jk) ) * di_e2u_2(ji,jj)   & 
    279279                  &           - ( pu(ji,jj,jk) + pu(ji-1,jj,jk) ) * dj_e1v_2(ji,jj)   ) & 
     
    281281            END_2D 
    282282         CASE ( np_CRV )                           !* Coriolis + relative vorticity 
    283             DO_2D_01_01 
     283            DO_2D( 0, 1, 0, 1 ) 
    284284               zwt(ji,jj) = (  ff_t(ji,jj) + r1_4 * ( zwz(ji-1,jj  ,jk) + zwz(ji,jj  ,jk)    & 
    285285                  &                                 + zwz(ji-1,jj-1,jk) + zwz(ji,jj-1,jk) )  ) & 
     
    287287            END_2D 
    288288         CASE ( np_CME )                           !* Coriolis + metric 
    289             DO_2D_01_01 
     289            DO_2D( 0, 1, 0, 1 ) 
    290290               zwt(ji,jj) = (  ff_t(ji,jj) * e1e2t(ji,jj)                           & 
    291291                    &        + ( pv(ji,jj,jk) + pv(ji,jj-1,jk) ) * di_e2u_2(ji,jj)  & 
     
    298298         ! 
    299299         !                                   !==  compute and add the vorticity term trend  =! 
    300          DO_2D_00_00 
     300         DO_2D( 0, 0, 0, 0 ) 
    301301            pu_rhs(ji,jj,jk) = pu_rhs(ji,jj,jk) + r1_4 * r1_e1e2u(ji,jj) / e3u(ji,jj,jk,Kmm)                    & 
    302302               &                                * (  zwt(ji+1,jj) * ( pv(ji+1,jj,jk) + pv(ji+1,jj-1,jk) )   & 
     
    358358            zwz(:,:) = ff_f(:,:)  
    359359         CASE ( np_RVO )                           !* relative vorticity 
    360             DO_2D_10_10 
     360            DO_2D( 1, 0, 1, 0 ) 
    361361               zwz(ji,jj) = (  e2v(ji+1,jj  ) * pv(ji+1,jj  ,jk) - e2v(ji,jj) * pv(ji,jj,jk)    & 
    362362                  &          - e1u(ji  ,jj+1) * pu(ji  ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    363363            END_2D 
    364364         CASE ( np_MET )                           !* metric term 
    365             DO_2D_10_10 
     365            DO_2D( 1, 0, 1, 0 ) 
    366366               zwz(ji,jj) = ( pv(ji+1,jj  ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    367367                  &       - ( pu(ji  ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 
    368368            END_2D 
    369369         CASE ( np_CRV )                           !* Coriolis + relative vorticity 
    370             DO_2D_10_10 
     370            DO_2D( 1, 0, 1, 0 ) 
    371371               zwz(ji,jj) = ff_f(ji,jj) + (  e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk)      & 
    372372                  &                        - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    373373            END_2D 
    374374         CASE ( np_CME )                           !* Coriolis + metric 
    375             DO_2D_10_10 
     375            DO_2D( 1, 0, 1, 0 ) 
    376376               zwz(ji,jj) = ff_f(ji,jj) + ( pv(ji+1,jj  ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    377377                  &                     - ( pu(ji  ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 
     
    382382         ! 
    383383         IF( ln_dynvor_msk ) THEN          !==  mask/unmask vorticity ==! 
    384             DO_2D_10_10 
     384            DO_2D( 1, 0, 1, 0 ) 
    385385               zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 
    386386            END_2D 
     
    396396         ENDIF 
    397397         !                                   !==  compute and add the vorticity term trend  =! 
    398          DO_2D_00_00 
     398         DO_2D( 0, 0, 0, 0 ) 
    399399            zy1 = zwy(ji,jj-1) + zwy(ji+1,jj-1) 
    400400            zy2 = zwy(ji,jj  ) + zwy(ji+1,jj  ) 
     
    454454            zwz(:,:) = ff_f(:,:)  
    455455         CASE ( np_RVO )                           !* relative vorticity 
    456             DO_2D_10_10 
     456            DO_2D( 1, 0, 1, 0 ) 
    457457               zwz(ji,jj) = (  e2v(ji+1,jj  ) * pv(ji+1,jj  ,jk) - e2v(ji,jj) * pv(ji,jj,jk)    & 
    458458                  &          - e1u(ji  ,jj+1) * pu(ji  ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    459459            END_2D 
    460460         CASE ( np_MET )                           !* metric term 
    461             DO_2D_10_10 
     461            DO_2D( 1, 0, 1, 0 ) 
    462462               zwz(ji,jj) = ( pv(ji+1,jj  ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    463463                  &       - ( pu(ji  ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 
    464464            END_2D 
    465465         CASE ( np_CRV )                           !* Coriolis + relative vorticity 
    466             DO_2D_10_10 
     466            DO_2D( 1, 0, 1, 0 ) 
    467467               zwz(ji,jj) = ff_f(ji,jj) + (  e2v(ji+1,jj  ) * pv(ji+1,jj  ,jk) - e2v(ji,jj) * pv(ji,jj,jk)  & 
    468468                  &                        - e1u(ji  ,jj+1) * pu(ji  ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    469469            END_2D 
    470470         CASE ( np_CME )                           !* Coriolis + metric 
    471             DO_2D_10_10 
     471            DO_2D( 1, 0, 1, 0 ) 
    472472               zwz(ji,jj) = ff_f(ji,jj) + ( pv(ji+1,jj  ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    473473                  &                     - ( pu(ji  ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 
     
    478478         ! 
    479479         IF( ln_dynvor_msk ) THEN           !==  mask/unmask vorticity ==! 
    480             DO_2D_10_10 
     480            DO_2D( 1, 0, 1, 0 ) 
    481481               zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 
    482482            END_2D 
     
    492492         ENDIF 
    493493         !                                   !==  compute and add the vorticity term trend  =! 
    494          DO_2D_00_00 
     494         DO_2D( 0, 0, 0, 0 ) 
    495495            zuav = r1_8 * r1_e1u(ji,jj) * (  zwy(ji  ,jj-1) + zwy(ji+1,jj-1)  & 
    496496               &                           + zwy(ji  ,jj  ) + zwy(ji+1,jj  )  ) 
     
    550550         SELECT CASE( nn_een_e3f )           ! == reciprocal of e3 at F-point 
    551551         CASE ( 0 )                                   ! original formulation  (masked averaging of e3t divided by 4) 
    552             DO_2D_10_10 
     552            DO_2D( 1, 0, 1, 0 ) 
    553553               ze3f = (  e3t(ji  ,jj+1,jk,Kmm)*tmask(ji  ,jj+1,jk)   & 
    554554                  &    + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk)   & 
     
    560560            END_2D 
    561561         CASE ( 1 )                                   ! new formulation  (masked averaging of e3t divided by the sum of mask) 
    562             DO_2D_10_10 
     562            DO_2D( 1, 0, 1, 0 ) 
    563563               ze3f = (  e3t(ji  ,jj+1,jk,Kmm)*tmask(ji  ,jj+1,jk)   & 
    564564                  &    + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk)   & 
     
    575575         SELECT CASE( kvor )                 !==  vorticity considered  ==! 
    576576         CASE ( np_COR )                           !* Coriolis (planetary vorticity) 
    577             DO_2D_10_10 
     577            DO_2D( 1, 0, 1, 0 ) 
    578578               zwz(ji,jj,jk) = ff_f(ji,jj) * z1_e3f(ji,jj) 
    579579            END_2D 
    580580         CASE ( np_RVO )                           !* relative vorticity 
    581             DO_2D_10_10 
     581            DO_2D( 1, 0, 1, 0 ) 
    582582               zwz(ji,jj,jk) = ( e2v(ji+1,jj  ) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk)  & 
    583583                  &            - e1u(ji  ,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) * r1_e1e2f(ji,jj)*z1_e3f(ji,jj) 
    584584            END_2D 
    585585         CASE ( np_MET )                           !* metric term 
    586             DO_2D_10_10 
     586            DO_2D( 1, 0, 1, 0 ) 
    587587               zwz(ji,jj,jk) = (   ( pv(ji+1,jj,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    588588                  &              - ( pu(ji,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj)   ) * z1_e3f(ji,jj) 
    589589            END_2D 
    590590         CASE ( np_CRV )                           !* Coriolis + relative vorticity 
    591             DO_2D_10_10 
     591            DO_2D( 1, 0, 1, 0 ) 
    592592               zwz(ji,jj,jk) = (  ff_f(ji,jj) + (  e2v(ji+1,jj  ) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk)      & 
    593593                  &                              - e1u(ji  ,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  )   & 
     
    595595            END_2D 
    596596         CASE ( np_CME )                           !* Coriolis + metric 
    597             DO_2D_10_10 
     597            DO_2D( 1, 0, 1, 0 ) 
    598598               zwz(ji,jj,jk) = (   ff_f(ji,jj) + ( pv(ji+1,jj  ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    599599                  &                            - ( pu(ji  ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj)   ) * z1_e3f(ji,jj) 
     
    604604         ! 
    605605         IF( ln_dynvor_msk ) THEN          !==  mask/unmask vorticity ==! 
    606             DO_2D_10_10 
     606            DO_2D( 1, 0, 1, 0 ) 
    607607               zwz(ji,jj,jk) = zwz(ji,jj,jk) * fmask(ji,jj,jk) 
    608608            END_2D 
     
    635635            END DO 
    636636         END DO 
    637          DO_2D_00_00 
     637         DO_2D( 0, 0, 0, 0 ) 
    638638            zua = + r1_12 * r1_e1u(ji,jj) * (  ztne(ji,jj  ) * zwy(ji  ,jj  ) + ztnw(ji+1,jj) * zwy(ji+1,jj  )   & 
    639639               &                             + ztse(ji,jj  ) * zwy(ji  ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) 
     
    695695         SELECT CASE( kvor )                 !==  vorticity considered  ==! 
    696696         CASE ( np_COR )                           !* Coriolis (planetary vorticity) 
    697             DO_2D_10_10 
     697            DO_2D( 1, 0, 1, 0 ) 
    698698               zwz(ji,jj,jk) = ff_f(ji,jj) 
    699699            END_2D 
    700700         CASE ( np_RVO )                           !* relative vorticity 
    701             DO_2D_10_10 
     701            DO_2D( 1, 0, 1, 0 ) 
    702702               zwz(ji,jj,jk) = (  e2v(ji+1,jj  ) * pv(ji+1,jj  ,jk) - e2v(ji,jj) * pv(ji,jj,jk)    & 
    703703                  &             - e1u(ji  ,jj+1) * pu(ji  ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) & 
     
    705705            END_2D 
    706706         CASE ( np_MET )                           !* metric term 
    707             DO_2D_10_10 
     707            DO_2D( 1, 0, 1, 0 ) 
    708708               zwz(ji,jj,jk) = ( pv(ji+1,jj  ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    709709                  &          - ( pu(ji  ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 
    710710            END_2D 
    711711         CASE ( np_CRV )                           !* Coriolis + relative vorticity 
    712             DO_2D_10_10 
     712            DO_2D( 1, 0, 1, 0 ) 
    713713               zwz(ji,jj,jk) = (  ff_f(ji,jj) + (  e2v(ji+1,jj  ) * pv(ji+1,jj  ,jk) - e2v(ji,jj) * pv(ji,jj,jk)    & 
    714714                  &                              - e1u(ji  ,jj+1) * pu(ji  ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) & 
     
    716716            END_2D 
    717717         CASE ( np_CME )                           !* Coriolis + metric 
    718             DO_2D_10_10 
     718            DO_2D( 1, 0, 1, 0 ) 
    719719               zwz(ji,jj,jk) = ff_f(ji,jj) + ( pv(ji+1,jj  ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    720720                  &                        - ( pu(ji  ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 
     
    725725         ! 
    726726         IF( ln_dynvor_msk ) THEN          !==  mask/unmask vorticity ==! 
    727             DO_2D_10_10 
     727            DO_2D( 1, 0, 1, 0 ) 
    728728               zwz(ji,jj,jk) = zwz(ji,jj,jk) * fmask(ji,jj,jk) 
    729729            END_2D 
     
    758758            END DO 
    759759         END DO 
    760          DO_2D_00_00 
     760         DO_2D( 0, 0, 0, 0 ) 
    761761            zua = + r1_12 * r1_e1u(ji,jj) * (  ztne(ji,jj  ) * zwy(ji  ,jj  ) + ztnw(ji+1,jj) * zwy(ji+1,jj  )   & 
    762762               &                             + ztse(ji,jj  ) * zwy(ji  ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) 
     
    818818      IF(lwp) WRITE(numout,*) '      change fmask value in the angles (T)           ln_vorlat = ', ln_vorlat 
    819819      IF( ln_vorlat .AND. ( ln_dynvor_ene .OR. ln_dynvor_ens .OR. ln_dynvor_mix ) ) THEN 
    820          DO_3D_10_10( 1, jpk ) 
     820         DO_3D( 1, 0, 1, 0, 1, jpk ) 
    821821            IF(    tmask(ji,jj+1,jk) + tmask(ji+1,jj+1,jk)              & 
    822822               & + tmask(ji,jj  ,jk) + tmask(ji+1,jj  ,jk) == 3._wp )   fmask(ji,jj,jk) = 1._wp 
     
    857857         CASE( np_ENT )                      !* T-point metric term :   pre-compute di(e2u)/2 and dj(e1v)/2 
    858858            ALLOCATE( di_e2u_2(jpi,jpj), dj_e1v_2(jpi,jpj) ) 
    859             DO_2D_00_00 
     859            DO_2D( 0, 0, 0, 0 ) 
    860860               di_e2u_2(ji,jj) = ( e2u(ji,jj) - e2u(ji-1,jj  ) ) * 0.5_wp 
    861861               dj_e1v_2(ji,jj) = ( e1v(ji,jj) - e1v(ji  ,jj-1) ) * 0.5_wp 
     
    865865         CASE DEFAULT                        !* F-point metric term :   pre-compute di(e2u)/(2*e1e2f) and dj(e1v)/(2*e1e2f) 
    866866            ALLOCATE( di_e2v_2e1e2f(jpi,jpj), dj_e1u_2e1e2f(jpi,jpj) ) 
    867             DO_2D_10_10 
     867            DO_2D( 1, 0, 1, 0 ) 
    868868               di_e2v_2e1e2f(ji,jj) = ( e2v(ji+1,jj  ) - e2v(ji,jj) )  * 0.5 * r1_e1e2f(ji,jj) 
    869869               dj_e1u_2e1e2f(ji,jj) = ( e1u(ji  ,jj+1) - e1u(ji,jj) )  * 0.5 * r1_e1e2f(ji,jj) 
Note: See TracChangeset for help on using the changeset viewer.