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 14986 for NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DOM/domqco.F90 – NEMO

Ignore:
Timestamp:
2021-06-14T13:34:08+02:00 (3 years ago)
Author:
sparonuz
Message:

Merge trunk -r14984:HEAD

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/dev_r14116_HPC-10_mcastril_Mixed_Precision_implementation/src/OCE/DOM/domqco.F90

    r14644 r14986  
    124124      CALL dom_qco_r3c( CASTWP(ssh(:,:,Kmm)), r3t(:,:,Kmm), r3u(:,:,Kmm), r3v(:,:,Kmm), r3f(:,:) ) 
    125125#endif 
     126      ! dom_qco_r3c defines over [nn_hls, nn_hls-1, nn_hls, nn_hls-1] 
     127      IF( nn_hls == 2 ) CALL lbc_lnk( 'dom_qco_zgr', r3u(:,:,Kbb), 'U', 1._wp, r3v(:,:,Kbb), 'V', 1._wp, & 
     128         &                                           r3u(:,:,Kmm), 'U', 1._wp, r3v(:,:,Kmm), 'V', 1._wp ) 
    126129      ! 
    127130   END SUBROUTINE dom_qco_zgr 
     
    147150      ! 
    148151      ! 
    149       pr3t(:,:) = pssh(:,:) * r1_ht_0(:,:)   !==  ratio at t-point  ==! 
     152      DO_2D_OVR( nn_hls, nn_hls, nn_hls, nn_hls ) 
     153         pr3t(ji,jj) = pssh(ji,jj) * r1_ht_0(ji,jj)   !==  ratio at t-point  ==! 
     154      END_2D 
    150155      ! 
    151156      ! 
     
    155160#if ! defined key_qcoTest_FluxForm 
    156161      !                                ! no 'key_qcoTest_FluxForm' : surface weighted ssh average 
    157          DO_2D( 0, 0, 0, 0 ) 
    158             pr3u(ji,jj) = 0.5_wp * (  e1e2t(ji  ,jj) * pssh(ji  ,jj)  & 
    159                &                    + e1e2t(ji+1,jj) * pssh(ji+1,jj)  ) * r1_hu_0(ji,jj) * r1_e1e2u(ji,jj) 
    160             pr3v(ji,jj) = 0.5_wp * (  e1e2t(ji,jj  ) * pssh(ji,jj  )  & 
    161                &                    + e1e2t(ji,jj+1) * pssh(ji,jj+1)  ) * r1_hv_0(ji,jj) * r1_e1e2v(ji,jj) 
    162          END_2D 
     162      DO_2D_OVR( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 
     163         pr3u(ji,jj) = 0.5_wp * (  e1e2t(ji  ,jj) * pssh(ji  ,jj)  & 
     164            &                    + e1e2t(ji+1,jj) * pssh(ji+1,jj)  ) * r1_hu_0(ji,jj) * r1_e1e2u(ji,jj) 
     165         pr3v(ji,jj) = 0.5_wp * (  e1e2t(ji,jj  ) * pssh(ji,jj  )  & 
     166            &                    + e1e2t(ji,jj+1) * pssh(ji,jj+1)  ) * r1_hv_0(ji,jj) * r1_e1e2v(ji,jj) 
     167      END_2D 
    163168!!st      ELSE                                         !- Flux Form   (simple averaging) 
    164169#else 
    165          DO_2D( 0, 0, 0, 0 ) 
    166             pr3u(ji,jj) = 0.5_wp * (  pssh(ji,jj) + pssh(ji+1,jj  )  ) * r1_hu_0(ji,jj) 
    167             pr3v(ji,jj) = 0.5_wp * (  pssh(ji,jj) + pssh(ji  ,jj+1)  ) * r1_hv_0(ji,jj) 
    168          END_2D 
     170      DO_2D_OVR( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 
     171         pr3u(ji,jj) = 0.5_wp * (  pssh(ji,jj) + pssh(ji+1,jj  )  ) * r1_hu_0(ji,jj) 
     172         pr3v(ji,jj) = 0.5_wp * (  pssh(ji,jj) + pssh(ji  ,jj+1)  ) * r1_hv_0(ji,jj) 
     173      END_2D 
    169174!!st      ENDIF 
    170175#endif          
    171176      ! 
    172177      IF( .NOT.PRESENT( pr3f ) ) THEN              !- lbc on ratio at u-, v-points only 
    173          CALL lbc_lnk( 'dom_qco_r3c', pr3u, 'U', 1._wp, pr3v, 'V', 1._wp ) 
     178         IF (nn_hls==1) CALL lbc_lnk( 'dom_qco_r3c', pr3u, 'U', 1._wp, pr3v, 'V', 1._wp ) 
    174179         ! 
    175180         ! 
     
    180185         !                                ! no 'key_qcoTest_FluxForm' : surface weighted ssh average 
    181186 
    182             DO_2D( 0, 0, 0, 0 )                               ! start from 1 since lbc_lnk('F') doesn't update the 1st row/line 
    183                pr3f(ji,jj) = 0.25_wp * (  e1e2t(ji  ,jj  ) * pssh(ji  ,jj  )  & 
    184                   &                     + e1e2t(ji+1,jj  ) * pssh(ji+1,jj  )  & 
    185                   &                     + e1e2t(ji  ,jj+1) * pssh(ji  ,jj+1)  & 
    186                   &                     + e1e2t(ji+1,jj+1) * pssh(ji+1,jj+1)  ) * r1_hf_0(ji,jj) * r1_e1e2f(ji,jj) 
    187             END_2D 
     187      DO_2D_OVR( nn_hls, nn_hls-1, nn_hls, nn_hls-1 )                               ! start from 1 since lbc_lnk('F') doesn't update the 1st row/line 
     188         ! round brackets added to fix the order of floating point operations 
     189         ! needed to ensure halo 1 - halo 2 compatibility 
     190         pr3f(ji,jj) = 0.25_wp * ( ( e1e2t(ji  ,jj  ) * pssh(ji  ,jj  )   & 
     191            &                      + e1e2t(ji+1,jj  ) * pssh(ji+1,jj  )   & 
     192            &                      )                                      & ! bracket for halo 1 - halo 2 compatibility 
     193            &                     + ( e1e2t(ji  ,jj+1) * pssh(ji  ,jj+1)  & 
     194            &                       + e1e2t(ji+1,jj+1) * pssh(ji+1,jj+1)  & 
     195            &                       )                                     & ! bracket for halo 1 - halo 2 compatibility 
     196            &                    ) * r1_hf_0(ji,jj) * r1_e1e2f(ji,jj) 
     197      END_2D 
    188198!!st         ELSE                                      !- Flux Form   (simple averaging) 
    189199#else 
    190             DO_2D( 0, 0, 0, 0 )                               ! start from 1 since lbc_lnk('F') doesn't update the 1st row/line 
    191                pr3f(ji,jj) = 0.25_wp * (  pssh(ji,jj  ) + pssh(ji+1,jj  )  & 
    192                   &                     + pssh(ji,jj+1) + pssh(ji+1,jj+1)  ) * r1_hf_0(ji,jj) 
    193             END_2D 
     200      DO_2D_OVR( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 
     201         ! round brackets added to fix the order of floating point operations 
     202         ! needed to ensure halo 1 - halo 2 compatibility 
     203         pr3f(ji,jj) = 0.25_wp * ( ( pssh(ji,jj  ) + pssh(ji+1,jj  ) ) & 
     204            &                     + ( pssh(ji,jj+1) + pssh(ji+1,jj+1)  & 
     205            &                       )                                  & ! bracket for halo 1 - halo 2 compatibility 
     206            &                    ) * r1_hf_0(ji,jj) 
     207      END_2D 
    194208!!st         ENDIF 
    195209#endif 
    196210         !                                                 ! lbc on ratio at u-,v-,f-points 
    197          CALL lbc_lnk( 'dom_qco_r3c', pr3u, 'U', 1._wp, pr3v, 'V', 1._wp, pr3f, 'F', 1._wp ) 
     211         IF (nn_hls==1) CALL lbc_lnk( 'dom_qco_r3c', pr3u, 'U', 1._wp, pr3v, 'V', 1._wp, pr3f, 'F', 1._wp ) 
    198212         ! 
    199213      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.