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 12353 for NEMO/branches/2019/dev_r11943_MERGE_2019/src/OCE/ISF – NEMO

Ignore:
Timestamp:
2020-01-29T17:15:37+01:00 (4 years ago)
Author:
acc
Message:

Branch 2019/dev_r11943_MERGE_2019. Additions to the do loop macro implementation: converted a few loops previously missed because they used jpi-1 instead of jpim1 etc.; changed internal macro names in do_loop_substitute.h90 to strings that are much more unlikely to appear in any future code elsewhere and removed the key_vectopt_loop option (and all related code) since the do loop macros have suppressed this option. These changes have been fully SETTE-tested and this branch should now be ready to go back to the trunk.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11943_MERGE_2019/src/OCE/ISF/isfcpl.F90

    r12343 r12353  
    177177         ! 
    178178         zdssmask(:,:) = ssmask(:,:) - zssmask0(:,:) 
    179          DO jj = 2,jpj-1 
    180             DO ji = 2,jpi-1 
    181                jip1=ji+1; jim1=ji-1; 
    182                jjp1=jj+1; jjm1=jj-1; 
    183                ! 
    184                zsummsk = zssmask0(jip1,jj) + zssmask0(jim1,jj) + zssmask0(ji,jjp1) + zssmask0(ji,jjm1) 
    185                ! 
    186                IF (zdssmask(ji,jj) == 1._wp .AND. zsummsk /= 0._wp) THEN 
    187                   ssh(ji,jj,Kmm)=( zssh(jip1,jj)*zssmask0(jip1,jj)     & 
    188                   &           + zssh(jim1,jj)*zssmask0(jim1,jj)     & 
    189                   &           + zssh(ji,jjp1)*zssmask0(ji,jjp1)     & 
    190                   &           + zssh(ji,jjm1)*zssmask0(ji,jjm1)) / zsummsk 
    191                   zssmask_b(ji,jj) = 1._wp 
    192                ENDIF 
    193             END DO 
    194          END DO 
     179         DO_2D_00_00 
     180            jip1=ji+1; jim1=ji-1; 
     181            jjp1=jj+1; jjm1=jj-1; 
     182            ! 
     183            zsummsk = zssmask0(jip1,jj) + zssmask0(jim1,jj) + zssmask0(ji,jjp1) + zssmask0(ji,jjm1) 
     184            ! 
     185            IF (zdssmask(ji,jj) == 1._wp .AND. zsummsk /= 0._wp) THEN 
     186               ssh(ji,jj,Kmm)=( zssh(jip1,jj)*zssmask0(jip1,jj)     & 
     187               &           + zssh(jim1,jj)*zssmask0(jim1,jj)     & 
     188               &           + zssh(ji,jjp1)*zssmask0(ji,jjp1)     & 
     189               &           + zssh(ji,jjm1)*zssmask0(ji,jjm1)) / zsummsk 
     190               zssmask_b(ji,jj) = 1._wp 
     191            ENDIF 
     192         END_2D 
    195193         ! 
    196194         zssh(:,:) = ssh(:,:,Kmm) 
     
    300298            zdmask(:,:) = tmask(:,:,jk) - ztmask0(:,:,jk); 
    301299            ! 
    302             DO jj = 2,jpj-1 
    303                DO ji = 2,jpi-1 
    304                   jip1=ji+1; jim1=ji-1; 
    305                   jjp1=jj+1; jjm1=jj-1; 
     300            DO_2D_00_00 
     301               jip1=ji+1; jim1=ji-1; 
     302               jjp1=jj+1; jjm1=jj-1; 
     303               ! 
     304               ! check if a wet neigbourg cell is present 
     305               zsummsk = ztmask0(jip1,jj  ,jk) + ztmask0(jim1,jj  ,jk) & 
     306                       + ztmask0(ji  ,jjp1,jk) + ztmask0(ji  ,jjm1,jk) 
     307               ! 
     308               ! if neigbourg wet cell available at the same level 
     309               IF ( zdmask(ji,jj) == 1._wp  .AND. zsummsk /= 0._wp ) THEN 
     310                  ! 
     311                  ! horizontal basic extrapolation 
     312                  ts(ji,jj,jk,1,Kmm)=( zts0(jip1,jj  ,jk,1) * ztmask0(jip1,jj  ,jk) & 
     313                  &               + zts0(jim1,jj  ,jk,1) * ztmask0(jim1,jj  ,jk) & 
     314                  &               + zts0(ji  ,jjp1,jk,1) * ztmask0(ji  ,jjp1,jk) & 
     315                  &               + zts0(ji  ,jjm1,jk,1) * ztmask0(ji  ,jjm1,jk) ) / zsummsk 
     316                  ts(ji,jj,jk,2,Kmm)=( zts0(jip1,jj  ,jk,2) * ztmask0(jip1,jj  ,jk) & 
     317                  &               + zts0(jim1,jj  ,jk,2) * ztmask0(jim1,jj  ,jk) & 
     318                  &               + zts0(ji  ,jjp1,jk,2) * ztmask0(ji  ,jjp1,jk) & 
     319                  &               + zts0(ji  ,jjm1,jk,2) * ztmask0(ji  ,jjm1,jk) ) / zsummsk 
     320                  ! 
     321                  ! update mask for next pass 
     322                  ztmask1(ji,jj,jk)=1 
     323                  ! 
     324               ! in case no neigbourg wet cell available at the same level 
     325               ! check if a wet cell is available below 
     326               ELSEIF (zdmask(ji,jj) == 1._wp .AND. zsummsk == 0._wp) THEN 
     327                  ! 
     328                  ! vertical extrapolation if horizontal extrapolation failed 
     329                  jkm1=max(1,jk-1) ; jkp1=min(jpk,jk+1) 
    306330                  ! 
    307331                  ! check if a wet neigbourg cell is present 
    308                   zsummsk = ztmask0(jip1,jj  ,jk) + ztmask0(jim1,jj  ,jk) & 
    309                           + ztmask0(ji  ,jjp1,jk) + ztmask0(ji  ,jjm1,jk) 
    310                   ! 
    311                   ! if neigbourg wet cell available at the same level 
    312                   IF ( zdmask(ji,jj) == 1._wp  .AND. zsummsk /= 0._wp ) THEN 
    313                      ! 
    314                      ! horizontal basic extrapolation 
    315                      ts(ji,jj,jk,1,Kmm)=( zts0(jip1,jj  ,jk,1) * ztmask0(jip1,jj  ,jk) & 
    316                      &               + zts0(jim1,jj  ,jk,1) * ztmask0(jim1,jj  ,jk) & 
    317                      &               + zts0(ji  ,jjp1,jk,1) * ztmask0(ji  ,jjp1,jk) & 
    318                      &               + zts0(ji  ,jjm1,jk,1) * ztmask0(ji  ,jjm1,jk) ) / zsummsk 
    319                      ts(ji,jj,jk,2,Kmm)=( zts0(jip1,jj  ,jk,2) * ztmask0(jip1,jj  ,jk) & 
    320                      &               + zts0(jim1,jj  ,jk,2) * ztmask0(jim1,jj  ,jk) & 
    321                      &               + zts0(ji  ,jjp1,jk,2) * ztmask0(ji  ,jjp1,jk) & 
    322                      &               + zts0(ji  ,jjm1,jk,2) * ztmask0(ji  ,jjm1,jk) ) / zsummsk 
     332                  zsummsk = ztmask0(ji,jj,jkm1) + ztmask0(ji,jj,jkp1) 
     333                  IF (zdmask(ji,jj) == 1._wp .AND. zsummsk /= 0._wp ) THEN 
     334                     ts(ji,jj,jk,1,Kmm)=( zts0(ji,jj,jkp1,1)*ztmask0(ji,jj,jkp1)     & 
     335                     &               + zts0(ji,jj,jkm1,1)*ztmask0(ji,jj,jkm1)) / zsummsk 
     336                     ts(ji,jj,jk,2,Kmm)=( zts0(ji,jj,jkp1,2)*ztmask0(ji,jj,jkp1)     & 
     337                     &               + zts0(ji,jj,jkm1,2)*ztmask0(ji,jj,jkm1)) / zsummsk 
    323338                     ! 
    324339                     ! update mask for next pass 
    325                      ztmask1(ji,jj,jk)=1 
    326                      ! 
    327                   ! in case no neigbourg wet cell available at the same level 
    328                   ! check if a wet cell is available below 
    329                   ELSEIF (zdmask(ji,jj) == 1._wp .AND. zsummsk == 0._wp) THEN 
    330                      ! 
    331                      ! vertical extrapolation if horizontal extrapolation failed 
    332                      jkm1=max(1,jk-1) ; jkp1=min(jpk,jk+1) 
    333                      ! 
    334                      ! check if a wet neigbourg cell is present 
    335                      zsummsk = ztmask0(ji,jj,jkm1) + ztmask0(ji,jj,jkp1) 
    336                      IF (zdmask(ji,jj) == 1._wp .AND. zsummsk /= 0._wp ) THEN 
    337                         ts(ji,jj,jk,1,Kmm)=( zts0(ji,jj,jkp1,1)*ztmask0(ji,jj,jkp1)     & 
    338                         &               + zts0(ji,jj,jkm1,1)*ztmask0(ji,jj,jkm1)) / zsummsk 
    339                         ts(ji,jj,jk,2,Kmm)=( zts0(ji,jj,jkp1,2)*ztmask0(ji,jj,jkp1)     & 
    340                         &               + zts0(ji,jj,jkm1,2)*ztmask0(ji,jj,jkm1)) / zsummsk 
    341                         ! 
    342                         ! update mask for next pass 
    343                         ztmask1(ji,jj,jk)=1._wp 
    344                      END IF 
     340                     ztmask1(ji,jj,jk)=1._wp 
    345341                  END IF 
    346                END DO 
    347             END DO 
     342               END IF 
     343            END_2D 
    348344         END DO 
    349345         ! 
Note: See TracChangeset for help on using the changeset viewer.