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/SWE/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/SWE/dynvor.F90

    r12983 r13295  
    232232      CASE ( np_RVO , np_CRV )                  !* relative vorticity at f-point is used 
    233233         DO jk = 1, jpkm1                                ! Horizontal slab 
    234             DO_2D_10_10 
     234            DO_2D( 1, 0, 1, 0 ) 
    235235               zwz(ji,jj,jk) = (  e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk)  & 
    236236                  &             - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    237237            END_2D 
    238238            IF( ln_dynvor_msk ) THEN                     ! mask relative vorticity  
    239                DO_2D_10_10 
     239               DO_2D( 1, 0, 1, 0 ) 
    240240                  zwz(ji,jj,jk) = zwz(ji,jj,jk) * fmask(ji,jj,jk) 
    241241               END_2D 
     
    255255            zwt(:,:) = ff_t(:,:) * e1e2t(:,:)*e3t(:,:,jk,Kmm) 
    256256         CASE ( np_RVO )                           !* relative vorticity 
    257             DO_2D_01_01 
     257            DO_2D( 0, 1, 0, 1 ) 
    258258               zwt(ji,jj) = r1_4 * (   zwz(ji-1,jj  ,jk) + zwz(ji,jj  ,jk)   & 
    259259                  &                  + zwz(ji-1,jj-1,jk) + zwz(ji,jj-1,jk) ) & 
     
    261261            END_2D 
    262262         CASE ( np_MET )                           !* metric term 
    263             DO_2D_01_01 
     263            DO_2D( 0, 1, 0, 1 ) 
    264264               zwt(ji,jj) = (   ( pv(ji,jj,jk) + pv(ji,jj-1,jk) ) * di_e2u_2(ji,jj)     & 
    265265                  &           - ( pu(ji,jj,jk) + pu(ji-1,jj,jk) ) * dj_e1v_2(ji,jj)   ) & 
     
    267267            END_2D 
    268268         CASE ( np_CRV )                           !* Coriolis + relative vorticity 
    269             DO_2D_01_01 
     269            DO_2D( 0, 1, 0, 1 ) 
    270270               zwt(ji,jj) = (  ff_t(ji,jj) + r1_4 * ( zwz(ji-1,jj  ,jk) + zwz(ji,jj  ,jk)      & 
    271271                  &                                 + zwz(ji-1,jj-1,jk) + zwz(ji,jj-1,jk) )  ) & 
     
    273273            END_2D 
    274274         CASE ( np_CME )                           !* Coriolis + metric 
    275             DO_2D_01_01 
     275            DO_2D( 0, 1, 0, 1 ) 
    276276               zwt(ji,jj) = (  ff_t(ji,jj) * e1e2t(ji,jj)                             & 
    277277                    &        + ( pv(ji,jj,jk) + pv(ji,jj-1,jk) ) * di_e2u_2(ji,jj)    & 
     
    284284         ! 
    285285         !                                   !==  compute and add the vorticity term trend  =! 
    286          DO_2D_00_00 
     286         DO_2D( 0, 0, 0, 0 ) 
    287287            pu_rhs(ji,jj,jk) = pu_rhs(ji,jj,jk) + r1_4 * r1_e1e2u(ji,jj) / e3u(ji,jj,jk,Kmm)                    & 
    288288               &                                * (  zwt(ji+1,jj) * ( pv(ji+1,jj,jk) + pv(ji+1,jj-1,jk) )   & 
     
    344344            zwz(:,:) = ff_f(:,:)  
    345345         CASE ( np_RVO )                           !* relative vorticity 
    346             DO_2D_10_10 
     346            DO_2D( 1, 0, 1, 0 ) 
    347347               zwz(ji,jj) = (  e2v(ji+1,jj  ) * pv(ji+1,jj  ,jk) - e2v(ji,jj) * pv(ji,jj,jk)    & 
    348348                  &          - e1u(ji  ,jj+1) * pu(ji  ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    349349            END_2D 
    350350            IF( ln_dynvor_msk ) THEN                     ! mask the relative vorticity 
    351                DO_2D_10_10 
     351               DO_2D( 1, 0, 1, 0 ) 
    352352                  zwz(ji,jj) = zwz(ji,jj) * fmask(ji,jj,jk) 
    353353               END_2D 
    354354            ENDIF 
    355355         CASE ( np_MET )                           !* metric term 
    356             DO_2D_10_10 
     356            DO_2D( 1, 0, 1, 0 ) 
    357357               zwz(ji,jj) = ( pv(ji+1,jj  ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    358358                  &       - ( pu(ji  ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 
    359359            END_2D 
    360360         CASE ( np_CRV )                           !* Coriolis + relative vorticity 
    361             DO_2D_10_10 
     361            DO_2D( 1, 0, 1, 0 ) 
    362362               zwz(ji,jj) = ff_f(ji,jj) + (  e2v(ji+1,jj) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk)      & 
    363363                  &                        - e1u(ji,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    364364            END_2D 
    365365            IF( ln_dynvor_msk ) THEN                     ! mask the relative vorticity (NOT the Coriolis term) 
    366                DO_2D_10_10 
     366               DO_2D( 1, 0, 1, 0 ) 
    367367                  zwz(ji,jj) = ( zwz(ji,jj) - ff_f(ji,jj) ) * fmask(ji,jj,jk) + ff_f(ji,jj) 
    368368               END_2D 
    369369            ENDIF 
    370370         CASE ( np_CME )                           !* Coriolis + metric 
    371             DO_2D_10_10 
     371            DO_2D( 1, 0, 1, 0 ) 
    372372               zwz(ji,jj) = ff_f(ji,jj) + ( pv(ji+1,jj  ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    373373                  &                     - ( pu(ji  ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 
     
    383383         ! 
    384384         !                                   !==  compute and add the vorticity term trend  =! 
    385          DO_2D_00_00 
     385         DO_2D( 0, 0, 0, 0 ) 
    386386            zy1 = zwy(ji,jj-1) + zwy(ji+1,jj-1) 
    387387            zy2 = zwy(ji,jj  ) + zwy(ji+1,jj  ) 
     
    441441            zwz(:,:) = ff_f(:,:)  
    442442         CASE ( np_RVO )                           !* relative vorticity 
    443             DO_2D_10_10 
     443            DO_2D( 1, 0, 1, 0 ) 
    444444               zwz(ji,jj) = (  e2v(ji+1,jj  ) * pv(ji+1,jj  ,jk) - e2v(ji,jj) * pv(ji,jj,jk)    & 
    445445                  &          - e1u(ji  ,jj+1) * pu(ji  ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    446446            END_2D 
    447447            IF( ln_dynvor_msk ) THEN                     ! mask the relative vorticity 
    448                DO_2D_10_10 
     448               DO_2D( 1, 0, 1, 0 ) 
    449449                  zwz(ji,jj) = ff_f(ji,jj) * fmask(ji,jj,jk) 
    450450               END_2D 
    451451            ENDIF 
    452452         CASE ( np_MET )                           !* metric term 
    453             DO_2D_10_10 
     453            DO_2D( 1, 0, 1, 0 ) 
    454454               zwz(ji,jj) = ( pv(ji+1,jj  ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    455455                  &       - ( pu(ji  ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 
    456456            END_2D 
    457457         CASE ( np_CRV )                           !* Coriolis + relative vorticity 
    458             DO_2D_10_10 
     458            DO_2D( 1, 0, 1, 0 ) 
    459459               zwz(ji,jj) = ff_f(ji,jj) + (  e2v(ji+1,jj  ) * pv(ji+1,jj  ,jk) - e2v(ji,jj) * pv(ji,jj,jk)  & 
    460460                  &                        - e1u(ji  ,jj+1) * pu(ji  ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) * r1_e1e2f(ji,jj) 
    461461            END_2D 
    462462            IF( ln_dynvor_msk ) THEN                     ! mask the relative vorticity (NOT the Coriolis term) 
    463                DO_2D_10_10 
     463               DO_2D( 1, 0, 1, 0 ) 
    464464                  zwz(ji,jj) = ( zwz(ji,jj) - ff_f(ji,jj) ) * fmask(ji,jj,jk) + ff_f(ji,jj) 
    465465               END_2D 
    466466            ENDIF 
    467467         CASE ( np_CME )                           !* Coriolis + metric 
    468             DO_2D_10_10 
     468            DO_2D( 1, 0, 1, 0 ) 
    469469               zwz(ji,jj) = ff_f(ji,jj) + ( pv(ji+1,jj  ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    470470                  &                     - ( pu(ji  ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 
     
    481481         ! 
    482482         !                                   !==  compute and add the vorticity term trend  =! 
    483          DO_2D_00_00 
     483         DO_2D( 0, 0, 0, 0 ) 
    484484            zuav = r1_8 * r1_e1u(ji,jj) * (  zwy(ji  ,jj-1) + zwy(ji+1,jj-1)  & 
    485485               &                           + zwy(ji  ,jj  ) + zwy(ji+1,jj  )  ) 
     
    539539         SELECT CASE( nn_een_e3f )           ! == reciprocal of e3 at F-point 
    540540         CASE ( 0 )                                   ! original formulation  (masked averaging of e3t divided by 4) 
    541             DO_2D_10_10 
     541            DO_2D( 1, 0, 1, 0 ) 
    542542               ze3f = (  e3t(ji  ,jj+1,jk,Kmm)*tmask(ji  ,jj+1,jk)   & 
    543543                  &    + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk)   & 
     
    549549            END_2D 
    550550         CASE ( 1 )                                   ! new formulation  (masked averaging of e3t divided by the sum of mask) 
    551             DO_2D_10_10 
     551            DO_2D( 1, 0, 1, 0 ) 
    552552               ze3f = (  e3t(ji  ,jj+1,jk,Kmm)*tmask(ji  ,jj+1,jk)   & 
    553553                  &    + e3t(ji+1,jj+1,jk,Kmm)*tmask(ji+1,jj+1,jk)   & 
     
    564564         SELECT CASE( kvor )                 !==  vorticity considered  ==! 
    565565         CASE ( np_COR )                           !* Coriolis (planetary vorticity) 
    566             DO_2D_10_10 
     566            DO_2D( 1, 0, 1, 0 ) 
    567567               zwz(ji,jj,jk) = ff_f(ji,jj) * z1_e3f(ji,jj) 
    568568            END_2D 
    569569         CASE ( np_RVO )                           !* relative vorticity 
    570             DO_2D_10_10 
     570            DO_2D( 1, 0, 1, 0 ) 
    571571               zwz(ji,jj,jk) = ( e2v(ji+1,jj  ) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk)  & 
    572572                  &            - e1u(ji  ,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) * r1_e1e2f(ji,jj)*z1_e3f(ji,jj) 
    573573            END_2D 
    574574         CASE ( np_MET )                           !* metric term 
    575             DO_2D_10_10 
     575            DO_2D( 1, 0, 1, 0 ) 
    576576               zwz(ji,jj,jk) = (   ( pv(ji+1,jj,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    577577                  &              - ( pu(ji,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj)   ) * z1_e3f(ji,jj) 
    578578            END_2D 
    579579         CASE ( np_CRV )                           !* Coriolis + relative vorticity 
    580             DO_2D_10_10 
     580            DO_2D( 1, 0, 1, 0 ) 
    581581               zwz(ji,jj,jk) = (  ff_f(ji,jj) + (  e2v(ji+1,jj  ) * pv(ji+1,jj,jk) - e2v(ji,jj) * pv(ji,jj,jk)      & 
    582582                  &                              - e1u(ji  ,jj+1) * pu(ji,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  )   & 
     
    584584            END_2D 
    585585         CASE ( np_CME )                           !* Coriolis + metric 
    586             DO_2D_10_10 
     586            DO_2D( 1, 0, 1, 0 ) 
    587587               zwz(ji,jj,jk) = (   ff_f(ji,jj) + ( 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) 
     
    593593         ! 
    594594         IF( ln_dynvor_msk ) THEN          !==  mask/unmask vorticity ==! 
    595             DO_2D_10_10 
     595            DO_2D( 1, 0, 1, 0 ) 
    596596               zwz(ji,jj,jk) = zwz(ji,jj,jk) * fmask(ji,jj,jk) 
    597597            END_2D 
     
    624624            END DO 
    625625         END DO 
    626          DO_2D_00_00 
     626         DO_2D( 0, 0, 0, 0 ) 
    627627            zua = + r1_12 * r1_e1u(ji,jj) * (  ztne(ji,jj  ) * zwy(ji  ,jj  ) + ztnw(ji+1,jj) * zwy(ji+1,jj  )   & 
    628628               &                             + ztse(ji,jj  ) * zwy(ji  ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) 
     
    684684         SELECT CASE( kvor )                 !==  vorticity considered  ==! 
    685685         CASE ( np_COR )                           !* Coriolis (planetary vorticity) 
    686             DO_2D_10_10 
     686            DO_2D( 1, 0, 1, 0 ) 
    687687               zwz(ji,jj,jk) = ff_f(ji,jj) 
    688688            END_2D 
    689689         CASE ( np_RVO )                           !* relative vorticity 
    690             DO_2D_10_10 
     690            DO_2D( 1, 0, 1, 0 ) 
    691691               zwz(ji,jj,jk) = (  e2v(ji+1,jj  ) * pv(ji+1,jj  ,jk) - e2v(ji,jj) * pv(ji,jj,jk)    & 
    692692                  &             - e1u(ji  ,jj+1) * pu(ji  ,jj+1,jk) + e1u(ji,jj) * pu(ji,jj,jk)  ) & 
     
    694694            END_2D 
    695695         CASE ( np_MET )                           !* metric term 
    696             DO_2D_10_10 
     696            DO_2D( 1, 0, 1, 0 ) 
    697697               zwz(ji,jj,jk) = ( pv(ji+1,jj  ,jk) + pv(ji,jj,jk) ) * di_e2v_2e1e2f(ji,jj)   & 
    698698                  &          - ( pu(ji  ,jj+1,jk) + pu(ji,jj,jk) ) * dj_e1u_2e1e2f(ji,jj) 
    699699            END_2D 
    700700         CASE ( np_CRV )                           !* Coriolis + relative vorticity 
    701             DO_2D_10_10 
     701            DO_2D( 1, 0, 1, 0 ) 
    702702               zwz(ji,jj,jk) = (  ff_f(ji,jj) + (  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_CME )                           !* Coriolis + metric 
    707             DO_2D_10_10 
     707            DO_2D( 1, 0, 1, 0 ) 
    708708               zwz(ji,jj,jk) = ff_f(ji,jj) + ( 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) 
     
    714714         ! 
    715715         IF( ln_dynvor_msk ) THEN          !==  mask/unmask vorticity ==! 
    716             DO_2D_10_10 
     716            DO_2D( 1, 0, 1, 0 ) 
    717717               zwz(ji,jj,jk) = zwz(ji,jj,jk) * fmask(ji,jj,jk) 
    718718            END_2D 
     
    747747            END DO 
    748748         END DO 
    749          DO_2D_00_00 
     749         DO_2D( 0, 0, 0, 0 ) 
    750750            zua = + r1_12 * r1_e1u(ji,jj) * (  ztne(ji,jj  ) * zwy(ji  ,jj  ) + ztnw(ji+1,jj) * zwy(ji+1,jj  )   & 
    751751               &                             + ztse(ji,jj  ) * zwy(ji  ,jj-1) + ztsw(ji+1,jj) * zwy(ji+1,jj-1) ) 
     
    807807      IF(lwp) WRITE(numout,*) '      change fmask value in the angles (T)           ln_vorlat = ', ln_vorlat 
    808808      IF( ln_vorlat .AND. ( ln_dynvor_ene .OR. ln_dynvor_ens .OR. ln_dynvor_mix ) ) THEN 
    809          DO_3D_10_10( 1, jpk ) 
     809         DO_3D( 1, 0, 1, 0, 1, jpk ) 
    810810            IF(    tmask(ji,jj+1,jk) + tmask(ji+1,jj+1,jk)              & 
    811811               & + tmask(ji,jj  ,jk) + tmask(ji+1,jj+1,jk) == 3._wp )   fmask(ji,jj,jk) = 1._wp 
     
    846846         CASE( np_ENT )                      !* T-point metric term :   pre-compute di(e2u)/2 and dj(e1v)/2 
    847847            ALLOCATE( di_e2u_2(jpi,jpj), dj_e1v_2(jpi,jpj) ) 
    848             DO_2D_00_00 
     848            DO_2D( 0, 0, 0, 0 ) 
    849849               di_e2u_2(ji,jj) = ( e2u(ji,jj) - e2u(ji-1,jj  ) ) * 0.5_wp 
    850850               dj_e1v_2(ji,jj) = ( e1v(ji,jj) - e1v(ji  ,jj-1) ) * 0.5_wp 
     
    854854         CASE DEFAULT                        !* F-point metric term :   pre-compute di(e2u)/(2*e1e2f) and dj(e1v)/(2*e1e2f) 
    855855            ALLOCATE( di_e2v_2e1e2f(jpi,jpj), dj_e1u_2e1e2f(jpi,jpj) ) 
    856             DO_2D_10_10 
     856            DO_2D( 1, 0, 1, 0 ) 
    857857               di_e2v_2e1e2f(ji,jj) = ( e2v(ji+1,jj  ) - e2v(ji,jj) )  * 0.5 * r1_e1e2f(ji,jj) 
    858858               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.