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 14644 for NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/ICE/icedyn_adv_umx.F90 – NEMO

Ignore:
Timestamp:
2021-03-26T15:33:49+01:00 (3 years ago)
Author:
sparonuz
Message:

Merge trunk -r14642:HEAD

Location:
NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final

    • Property svn:externals
      •  

        old new  
        99 
        1010# SETTE 
        11 ^/utils/CI/sette_wave@13990         sette 
         11^/utils/CI/sette@14244        sette 
  • NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/ICE/icedyn_adv_umx.F90

    r14219 r14644  
    119119      CALL icemax3D( ph_ip, zhip_max) 
    120120      CALL icemax3D( zs_i , zsi_max ) 
    121       CALL lbc_lnk_multi( 'icedyn_adv_umx', zhi_max, 'T', 1._wp, zhs_max, 'T', 1._wp, zhip_max, 'T', 1._wp, zsi_max, 'T', 1._wp ) 
     121      CALL lbc_lnk( 'icedyn_adv_umx', zhi_max, 'T', 1._wp, zhs_max, 'T', 1._wp, zhip_max, 'T', 1._wp, zsi_max, 'T', 1._wp ) 
    122122      ! 
    123123      ! enthalpies 
     
    360360         ! --- Lateral boundary conditions --- ! 
    361361         IF    ( ( ln_pnd_LEV .OR. ln_pnd_TOPO ) .AND. ln_pnd_lids ) THEN 
    362             CALL lbc_lnk_multi( 'icedyn_adv_umx', pa_i,'T',1._wp, pv_i,'T',1._wp, pv_s,'T',1._wp, psv_i,'T',1._wp, poa_i,'T',1._wp & 
    363                &                                , pa_ip,'T',1._wp, pv_ip,'T',1._wp, pv_il,'T',1._wp ) 
     362            CALL lbc_lnk( 'icedyn_adv_umx', pa_i,'T',1._wp, pv_i,'T',1._wp, pv_s,'T',1._wp, psv_i,'T',1._wp, poa_i,'T',1._wp & 
     363               &                          , pa_ip,'T',1._wp, pv_ip,'T',1._wp, pv_il,'T',1._wp ) 
    364364         ELSEIF( ( ln_pnd_LEV .OR. ln_pnd_TOPO ) .AND. .NOT.ln_pnd_lids ) THEN 
    365             CALL lbc_lnk_multi( 'icedyn_adv_umx', pa_i,'T',1._wp, pv_i,'T',1._wp, pv_s,'T',1._wp, psv_i,'T',1._wp, poa_i,'T',1._wp & 
    366                &                                , pa_ip,'T',1._wp, pv_ip,'T',1._wp ) 
     365            CALL lbc_lnk( 'icedyn_adv_umx', pa_i,'T',1._wp, pv_i,'T',1._wp, pv_s,'T',1._wp, psv_i,'T',1._wp, poa_i,'T',1._wp & 
     366               &                          , pa_ip,'T',1._wp, pv_ip,'T',1._wp ) 
    367367         ELSE 
    368             CALL lbc_lnk_multi( 'icedyn_adv_umx', pa_i,'T',1._wp, pv_i,'T',1._wp, pv_s,'T',1._wp, psv_i,'T',1._wp, poa_i,'T',1._wp ) 
     368            CALL lbc_lnk( 'icedyn_adv_umx', pa_i,'T',1._wp, pv_i,'T',1._wp, pv_s,'T',1._wp, psv_i,'T',1._wp, poa_i,'T',1._wp ) 
    369369         ENDIF 
    370370         CALL lbc_lnk( 'icedyn_adv_umx', pe_i, 'T', 1._wp ) 
     
    491491      IF( pamsk == 0._wp ) THEN 
    492492         DO jl = 1, jpl 
    493             DO_2D( 0, 0, 1, 0 ) 
     493            DO_2D( 1, 0, 0, 0 ) 
    494494               IF( ABS( pu(ji,jj) ) > epsi10 ) THEN 
    495495                  zfu_ho (ji,jj,jl) = zfu_ho (ji,jj,jl) * puc    (ji,jj,jl) / pu(ji,jj) 
     
    501501               ! 
    502502            END_2D 
    503             DO_2D( 1, 0, 0, 0 ) 
     503            DO_2D( 0, 0, 1, 0 ) 
    504504               IF( ABS( pv(ji,jj) ) > epsi10 ) THEN 
    505505                  zfv_ho (ji,jj,jl) = zfv_ho (ji,jj,jl) * pvc    (ji,jj,jl) / pv(ji,jj) 
     
    536536      IF( PRESENT( pua_ho ) ) THEN 
    537537         DO jl = 1, jpl 
    538             DO_2D( 0, 0, 1, 0 ) 
     538            DO_2D( 1, 0, 0, 0 ) 
    539539               pua_ho (ji,jj,jl) = zfu_ho (ji,jj,jl) 
    540540               pua_ups(ji,jj,jl) = zfu_ups(ji,jj,jl) 
    541541            END_2D 
    542             DO_2D( 1, 0, 0, 0 ) 
     542            DO_2D( 0, 0, 1, 0 ) 
    543543               pva_ho (ji,jj,jl) = zfv_ho (ji,jj,jl) 
    544544               pva_ups(ji,jj,jl) = zfv_ups(ji,jj,jl) 
     
    594594            ! 
    595595            DO jl = 1, jpl              !-- flux in x-direction 
    596                DO_2D( 1, 1, 1, 0 ) 
     596               DO_2D( 1, 0, 1, 1 ) 
    597597                  pfu_ups(ji,jj,jl) = MAX( pu(ji,jj), 0._wp ) * pt(ji,jj,jl) + MIN( pu(ji,jj), 0._wp ) * pt(ji+1,jj,jl) 
    598598               END_2D 
     
    600600            ! 
    601601            DO jl = 1, jpl              !-- first guess of tracer from u-flux 
    602                DO_2D( 1, 1, 0, 0 ) 
     602               DO_2D( 0, 0, 1, 1 ) 
    603603                  ztra = - ( pfu_ups(ji,jj,jl) - pfu_ups(ji-1,jj,jl) )              & 
    604604                     &   + ( pu     (ji,jj   ) - pu     (ji-1,jj   ) ) * pt(ji,jj,jl) * (1.-pamsk) 
     
    609609            ! 
    610610            DO jl = 1, jpl              !-- flux in y-direction 
    611                DO_2D( 1, 0, 0, 0 ) 
     611               DO_2D( 0, 0, 1, 0 ) 
    612612                  pfv_ups(ji,jj,jl) = MAX( pv(ji,jj), 0._wp ) * zpt(ji,jj,jl) + MIN( pv(ji,jj), 0._wp ) * zpt(ji,jj+1,jl) 
    613613               END_2D 
     
    617617            ! 
    618618            DO jl = 1, jpl              !-- flux in y-direction 
    619                DO_2D( 1, 0, 1, 1 ) 
     619               DO_2D( 1, 1, 1, 0 ) 
    620620                  pfv_ups(ji,jj,jl) = MAX( pv(ji,jj), 0._wp ) * pt(ji,jj,jl) + MIN( pv(ji,jj), 0._wp ) * pt(ji,jj+1,jl) 
    621621               END_2D 
     
    623623            ! 
    624624            DO jl = 1, jpl              !-- first guess of tracer from v-flux 
    625                DO_2D( 0, 0, 1, 1 ) 
     625               DO_2D( 1, 1, 0, 0 ) 
    626626                  ztra = - ( pfv_ups(ji,jj,jl) - pfv_ups(ji,jj-1,jl) )  & 
    627627                     &   + ( pv     (ji,jj   ) - pv     (ji,jj-1   ) ) * pt(ji,jj,jl) * (1.-pamsk) 
     
    632632            ! 
    633633            DO jl = 1, jpl              !-- flux in x-direction 
    634                DO_2D( 0, 0, 1, 0 ) 
     634               DO_2D( 1, 0, 0, 0 ) 
    635635                  pfu_ups(ji,jj,jl) = MAX( pu(ji,jj), 0._wp ) * zpt(ji,jj,jl) + MIN( pu(ji,jj), 0._wp ) * zpt(ji+1,jj,jl) 
    636636               END_2D 
     
    681681         ! 
    682682         DO jl = 1, jpl 
     683            DO_2D( 1, 0, 1, 1 ) 
     684               pfu_ho(ji,jj,jl) = 0.5_wp * pu(ji,jj) * ( pt(ji,jj,jl) + pt(ji+1,jj  ,jl) ) 
     685            END_2D 
    683686            DO_2D( 1, 1, 1, 0 ) 
    684                pfu_ho(ji,jj,jl) = 0.5_wp * pu(ji,jj) * ( pt(ji,jj,jl) + pt(ji+1,jj  ,jl) ) 
    685             END_2D 
    686             DO_2D( 1, 0, 1, 1 ) 
    687687               pfv_ho(ji,jj,jl) = 0.5_wp * pv(ji,jj) * ( pt(ji,jj,jl) + pt(ji  ,jj+1,jl) ) 
    688688            END_2D 
     
    701701            ! 
    702702            DO jl = 1, jpl              !-- flux in x-direction 
    703                DO_2D( 1, 1, 1, 0 ) 
     703               DO_2D( 1, 0, 1, 1 ) 
    704704                  pfu_ho(ji,jj,jl) = 0.5_wp * pu(ji,jj) * ( pt(ji,jj,jl) + pt(ji+1,jj,jl) ) 
    705705               END_2D 
     
    708708 
    709709            DO jl = 1, jpl              !-- first guess of tracer from u-flux 
    710                DO_2D( 1, 1, 0, 0 ) 
     710               DO_2D( 0, 0, 1, 1 ) 
    711711                  ztra = - ( pfu_ho(ji,jj,jl) - pfu_ho(ji-1,jj,jl) )              & 
    712712                     &   + ( pu    (ji,jj   ) - pu    (ji-1,jj   ) ) * pt(ji,jj,jl) * (1.-pamsk) 
     
    717717 
    718718            DO jl = 1, jpl              !-- flux in y-direction 
    719                DO_2D( 1, 0, 0, 0 ) 
     719               DO_2D( 0, 0, 1, 0 ) 
    720720                  pfv_ho(ji,jj,jl) = 0.5_wp * pv(ji,jj) * ( zpt(ji,jj,jl) + zpt(ji,jj+1,jl) ) 
    721721               END_2D 
     
    726726            ! 
    727727            DO jl = 1, jpl              !-- flux in y-direction 
    728                DO_2D( 1, 0, 1, 1 ) 
     728               DO_2D( 1, 1, 1, 0 ) 
    729729                  pfv_ho(ji,jj,jl) = 0.5_wp * pv(ji,jj) * ( pt(ji,jj,jl) + pt(ji,jj+1,jl) ) 
    730730               END_2D 
     
    733733            ! 
    734734            DO jl = 1, jpl              !-- first guess of tracer from v-flux 
    735                DO_2D( 0, 0, 1, 1 ) 
     735               DO_2D( 1, 1, 0, 0 ) 
    736736                  ztra = - ( pfv_ho(ji,jj,jl) - pfv_ho(ji,jj-1,jl) )  & 
    737737                     &   + ( pv    (ji,jj   ) - pv    (ji,jj-1   ) ) * pt(ji,jj,jl) * (1.-pamsk) 
     
    742742            ! 
    743743            DO jl = 1, jpl              !-- flux in x-direction 
    744                DO_2D( 0, 0, 1, 0 ) 
     744               DO_2D( 1, 0, 0, 0 ) 
    745745                  pfu_ho(ji,jj,jl) = 0.5_wp * pu(ji,jj) * ( zpt(ji,jj,jl) + zpt(ji+1,jj,jl) ) 
    746746               END_2D 
     
    899899         ! 
    900900         DO jl = 1, jpl 
    901             DO_2D( 0, 0, 1, 0 ) 
     901            DO_2D( 1, 0, 0, 0 ) 
    902902               pt_u(ji,jj,jl) = 0.5_wp * umask(ji,jj,1) * (                                pt(ji+1,jj,jl) + pt(ji,jj,jl)   & 
    903903                  &                                         - SIGN( 1._wp, pu(ji,jj) ) * ( pt(ji+1,jj,jl) - pt(ji,jj,jl) ) ) 
     
    908908         ! 
    909909         DO jl = 1, jpl 
    910             DO_2D( 0, 0, 1, 0 ) 
     910            DO_2D( 1, 0, 0, 0 ) 
    911911               zcu  = pu(ji,jj) * r1_e2u(ji,jj) * pdt * r1_e1u(ji,jj) 
    912912               pt_u(ji,jj,jl) = 0.5_wp * umask(ji,jj,1) * (                                pt(ji+1,jj,jl) + pt(ji,jj,jl)   & 
     
    918918         ! 
    919919         DO jl = 1, jpl 
    920             DO_2D( 0, 0, 1, 0 ) 
     920            DO_2D( 1, 0, 0, 0 ) 
    921921               zcu  = pu(ji,jj) * r1_e2u(ji,jj) * pdt * r1_e1u(ji,jj) 
    922922               zdx2 = e1u(ji,jj) * e1u(ji,jj) 
     
    932932         ! 
    933933         DO jl = 1, jpl 
    934             DO_2D( 0, 0, 1, 0 ) 
     934            DO_2D( 1, 0, 0, 0 ) 
    935935               zcu  = pu(ji,jj) * r1_e2u(ji,jj) * pdt * r1_e1u(ji,jj) 
    936936               zdx2 = e1u(ji,jj) * e1u(ji,jj) 
     
    946946         ! 
    947947         DO jl = 1, jpl 
    948             DO_2D( 0, 0, 1, 0 ) 
     948            DO_2D( 1, 0, 0, 0 ) 
    949949               zcu  = pu(ji,jj) * r1_e2u(ji,jj) * pdt * r1_e1u(ji,jj) 
    950950               zdx2 = e1u(ji,jj) * e1u(ji,jj) 
     
    967967      IF( ll_neg ) THEN 
    968968         DO jl = 1, jpl 
    969             DO_2D( 0, 0, 1, 0 ) 
     969            DO_2D( 1, 0, 0, 0 ) 
    970970               IF( pt_u(ji,jj,jl) < 0._wp .OR. ( imsk_small(ji,jj,jl) == 0 .AND. pamsk == 0. ) ) THEN 
    971971                  pt_u(ji,jj,jl) = 0.5_wp * umask(ji,jj,1) * (                                pt(ji+1,jj,jl) + pt(ji,jj,jl)   & 
     
    977977      !                                                     !-- High order flux in i-direction  --! 
    978978      DO jl = 1, jpl 
    979          DO_2D( 0, 0, 1, 0 ) 
     979         DO_2D( 1, 0, 0, 0 ) 
    980980            pfu_ho(ji,jj,jl) = pu(ji,jj) * pt_u(ji,jj,jl) 
    981981         END_2D 
     
    10101010      !                                                     !--  Laplacian in j-direction  --! 
    10111011      DO jl = 1, jpl 
    1012          DO_2D( 1, 0, 0, 0 )         ! First derivative (gradient) 
     1012         DO_2D( 0, 0, 1, 0 )         ! First derivative (gradient) 
    10131013            ztv1(ji,jj,jl) = ( pt(ji,jj+1,jl) - pt(ji,jj,jl) ) * r1_e2v(ji,jj) * vmask(ji,jj,1) 
    10141014         END_2D 
     
    10211021      !                                                     !--  BiLaplacian in j-direction  --! 
    10221022      DO jl = 1, jpl 
    1023          DO_2D( 1, 0, 0, 0 )         ! First derivative 
     1023         DO_2D( 0, 0, 1, 0 )         ! First derivative 
    10241024            ztv3(ji,jj,jl) = ( ztv2(ji,jj+1,jl) - ztv2(ji,jj,jl) ) * r1_e2v(ji,jj) * vmask(ji,jj,1) 
    10251025         END_2D 
     
    10351035      CASE( 1 )                                                !==  1st order central TIM  ==! (Eq. 21) 
    10361036         DO jl = 1, jpl 
    1037             DO_2D( 1, 0, 0, 0 ) 
     1037            DO_2D( 0, 0, 1, 0 ) 
    10381038               pt_v(ji,jj,jl) = 0.5_wp * vmask(ji,jj,1) * (                                pt(ji,jj+1,jl) + pt(ji,jj,jl)   & 
    10391039                  &                                         - SIGN( 1._wp, pv(ji,jj) ) * ( pt(ji,jj+1,jl) - pt(ji,jj,jl) ) ) 
     
    10431043      CASE( 2 )                                                !==  2nd order central TIM  ==! (Eq. 23) 
    10441044         DO jl = 1, jpl 
    1045             DO_2D( 1, 0, 0, 0 ) 
     1045            DO_2D( 0, 0, 1, 0 ) 
    10461046               zcv  = pv(ji,jj) * r1_e1v(ji,jj) * pdt * r1_e2v(ji,jj) 
    10471047               pt_v(ji,jj,jl) = 0.5_wp * vmask(ji,jj,1) * (                                pt(ji,jj+1,jl) + pt(ji,jj,jl)   & 
     
    10521052      CASE( 3 )                                                !==  3rd order central TIM  ==! (Eq. 24) 
    10531053         DO jl = 1, jpl 
    1054             DO_2D( 1, 0, 0, 0 ) 
     1054            DO_2D( 0, 0, 1, 0 ) 
    10551055               zcv  = pv(ji,jj) * r1_e1v(ji,jj) * pdt * r1_e2v(ji,jj) 
    10561056               zdy2 = e2v(ji,jj) * e2v(ji,jj) 
     
    10651065      CASE( 4 )                                                !==  4th order central TIM  ==! (Eq. 27) 
    10661066         DO jl = 1, jpl 
    1067             DO_2D( 1, 0, 0, 0 ) 
     1067            DO_2D( 0, 0, 1, 0 ) 
    10681068               zcv  = pv(ji,jj) * r1_e1v(ji,jj) * pdt * r1_e2v(ji,jj) 
    10691069               zdy2 = e2v(ji,jj) * e2v(ji,jj) 
     
    10781078      CASE( 5 )                                                !==  5th order central TIM  ==! (Eq. 29) 
    10791079         DO jl = 1, jpl 
    1080             DO_2D( 1, 0, 0, 0 ) 
     1080            DO_2D( 0, 0, 1, 0 ) 
    10811081               zcv  = pv(ji,jj) * r1_e1v(ji,jj) * pdt * r1_e2v(ji,jj) 
    10821082               zdy2 = e2v(ji,jj) * e2v(ji,jj) 
     
    10991099      IF( ll_neg ) THEN 
    11001100         DO jl = 1, jpl 
    1101             DO_2D( 1, 0, 0, 0 ) 
     1101            DO_2D( 0, 0, 1, 0 ) 
    11021102               IF( pt_v(ji,jj,jl) < 0._wp .OR. ( jmsk_small(ji,jj,jl) == 0 .AND. pamsk == 0. ) ) THEN 
    11031103                  pt_v(ji,jj,jl) = 0.5_wp * vmask(ji,jj,1) * (                              ( pt(ji,jj+1,jl) + pt(ji,jj,jl) )  & 
     
    11091109      !                                                     !-- High order flux in j-direction  --! 
    11101110      DO jl = 1, jpl 
    1111          DO_2D( 1, 0, 0, 0 ) 
     1111         DO_2D( 0, 0, 1, 0 ) 
    11121112            pfv_ho(ji,jj,jl) = pv(ji,jj) * pt_v(ji,jj,jl) 
    11131113         END_2D 
     
    11451145      ! -------------------------------------------------- 
    11461146      DO jl = 1, jpl 
     1147         DO_2D( 1, 0, 0, 0 ) 
     1148            pfu_ho(ji,jj,jl) = pfu_ho(ji,jj,jl) - pfu_ups(ji,jj,jl) 
     1149         END_2D 
    11471150         DO_2D( 0, 0, 1, 0 ) 
    1148             pfu_ho(ji,jj,jl) = pfu_ho(ji,jj,jl) - pfu_ups(ji,jj,jl) 
    1149          END_2D 
    1150          DO_2D( 1, 0, 0, 0 ) 
    11511151            pfv_ho(ji,jj,jl) = pfv_ho(ji,jj,jl) - pfv_ups(ji,jj,jl) 
    11521152         END_2D 
     
    11691169            END_2D 
    11701170         END DO 
    1171          CALL lbc_lnk_multi( 'icedyn_adv_umx', zti_ups, 'T', 1.0_wp, ztj_ups, 'T', 1.0_wp ) 
     1171         CALL lbc_lnk( 'icedyn_adv_umx', zti_ups, 'T', 1.0_wp, ztj_ups, 'T', 1.0_wp ) 
    11721172 
    11731173         DO jl = 1, jpl 
     
    11911191            END_2D 
    11921192         END DO 
    1193          CALL lbc_lnk_multi( 'icedyn_adv_umx', pfu_ho, 'U', -1.0_wp, pfv_ho, 'V', -1.0_wp )   ! lateral boundary cond. 
     1193         CALL lbc_lnk( 'icedyn_adv_umx', pfu_ho, 'U', -1.0_wp, pfv_ho, 'V', -1.0_wp )   ! lateral boundary cond. 
    11941194 
    11951195      ENDIF 
     
    12481248         END_2D 
    12491249      END DO 
    1250       CALL lbc_lnk_multi( 'icedyn_adv_umx', zbetup, 'T', 1.0_wp, zbetdo, 'T', 1.0_wp )   ! lateral boundary cond. (unchanged sign) 
     1250      CALL lbc_lnk( 'icedyn_adv_umx', zbetup, 'T', 1.0_wp, zbetdo, 'T', 1.0_wp )   ! lateral boundary cond. (unchanged sign) 
    12511251 
    12521252 
     
    12541254      ! --------------------------------- 
    12551255      DO jl = 1, jpl 
    1256          DO_2D( 0, 0, 1, 0 ) 
     1256         DO_2D( 1, 0, 0, 0 ) 
    12571257            zau = MIN( 1._wp , zbetdo(ji,jj,jl) , zbetup(ji+1,jj,jl) ) 
    12581258            zbu = MIN( 1._wp , zbetup(ji,jj,jl) , zbetdo(ji+1,jj,jl) ) 
     
    12651265         END_2D 
    12661266 
    1267          DO_2D( 1, 0, 0, 0 ) 
     1267         DO_2D( 0, 0, 1, 0 ) 
    12681268            zav = MIN( 1._wp , zbetdo(ji,jj,jl) , zbetup(ji,jj+1,jl) ) 
    12691269            zbv = MIN( 1._wp , zbetup(ji,jj,jl) , zbetdo(ji,jj+1,jl) ) 
Note: See TracChangeset for help on using the changeset viewer.