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 13727 for NEMO/branches/2020/dev_12905_xios_restart/src/OCE/LDF/ldftra.F90 – NEMO

Ignore:
Timestamp:
2020-11-05T15:18:53+01:00 (4 years ago)
Author:
andmirek
Message:

Ticket #2462: Upate to trunk rev 13688

Location:
NEMO/branches/2020/dev_12905_xios_restart
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_12905_xios_restart

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
         5^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
        88 
        99# SETTE 
        10 ^/utils/CI/sette@HEAD         sette 
         10^/utils/CI/sette@13559        sette 
  • NEMO/branches/2020/dev_12905_xios_restart/src/OCE/LDF/ldftra.F90

    r12489 r13727  
    9595   !! * Substitutions 
    9696#  include "do_loop_substitute.h90" 
     97#  include "domzgr_substitute.h90" 
    9798   !!---------------------------------------------------------------------- 
    9899   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    245246      ENDIF 
    246247      ! 
    247       IF( ln_ldfeiv .AND. .NOT.( ln_traldf_iso .OR. ln_traldf_triad ) )                & 
    248            &            CALL ctl_stop( 'ln_ldfeiv=T requires iso-neutral laplacian diffusion' ) 
    249       IF( ln_isfcav .AND. ln_traldf_triad ) & 
    250            &            CALL ctl_stop( ' ice shelf cavity and traldf_triad not tested' ) 
     248      IF( ln_isfcav .AND. ln_traldf_triad )   CALL ctl_stop( ' ice shelf cavity and traldf_triad not tested' ) 
    251249           ! 
    252250      IF(  nldf_tra == np_lap_i .OR. nldf_tra == np_lap_it .OR. & 
     
    316314            IF(lwp) WRITE(numout,*) '   ==>>>   eddy diffusivity = F(i,j) read in eddy_diffusivity.nc file' 
    317315            CALL iom_open( 'eddy_diffusivity_2D.nc', inum ) 
    318             CALL iom_get ( inum, jpdom_data, 'ahtu_2D', ahtu(:,:,1) ) 
    319             CALL iom_get ( inum, jpdom_data, 'ahtv_2D', ahtv(:,:,1) ) 
     316            CALL iom_get ( inum, jpdom_global, 'ahtu_2D', ahtu(:,:,1), cd_type = 'U', psgn = 1._wp ) 
     317            CALL iom_get ( inum, jpdom_global, 'ahtv_2D', ahtv(:,:,1), cd_type = 'V', psgn = 1._wp ) 
    320318            CALL iom_close( inum ) 
    321319            DO jk = 2, jpkm1 
     
    344342            IF(lwp) WRITE(numout,*) '   ==>>>   eddy diffusivity = F(i,j,k) read in eddy_diffusivity.nc file' 
    345343            CALL iom_open( 'eddy_diffusivity_3D.nc', inum ) 
    346             CALL iom_get ( inum, jpdom_data, 'ahtu_3D', ahtu ) 
    347             CALL iom_get ( inum, jpdom_data, 'ahtv_3D', ahtv ) 
     344            CALL iom_get ( inum, jpdom_global, 'ahtu_3D', ahtu, cd_type = 'U', psgn = 1._wp ) 
     345            CALL iom_get ( inum, jpdom_global, 'ahtv_3D', ahtv, cd_type = 'V', psgn = 1._wp ) 
    348346            CALL iom_close( inum ) 
    349347            ! 
     
    429427         zaht_min = 0.2_wp * aht0                                       ! minimum value for aht 
    430428         zDaht    = aht0 - zaht_min                                       
    431          DO_2D_11_11 
     429         DO_2D( 1, 1, 1, 1 ) 
    432430            !!gm CAUTION : here we assume lat/lon grid in 20deg N/S band (like all ORCA cfg) 
    433431            !!     ==>>>   The Coriolis value is identical for t- & u_points, and for v- and f-points 
     
    540538         IF( ln_traldf_blp )   CALL ctl_stop( 'ldf_eiv_init: eddy induced velocity ONLY with laplacian diffusivity' ) 
    541539         ! 
     540         IF( .NOT.( ln_traldf_iso .OR. ln_traldf_triad ) )   & 
     541           &                  CALL ctl_stop( 'ln_ldfeiv=T requires iso-neutral laplacian diffusion' ) 
    542542         !                                != allocate the aei arrays 
    543543         ALLOCATE( aeiu(jpi,jpj,jpk), aeiv(jpi,jpj,jpk), STAT=ierr ) 
     
    571571            IF(lwp) WRITE(numout,*) '   ==>>>   eddy induced velocity coef. = F(i,j) read in eddy_diffusivity_2D.nc file' 
    572572            CALL iom_open ( 'eddy_induced_velocity_2D.nc', inum ) 
    573             CALL iom_get  ( inum, jpdom_data, 'aeiu', aeiu(:,:,1) ) 
    574             CALL iom_get  ( inum, jpdom_data, 'aeiv', aeiv(:,:,1) ) 
     573            CALL iom_get  ( inum, jpdom_global, 'aeiu', aeiu(:,:,1), cd_type = 'U', psgn = 1._wp ) 
     574            CALL iom_get  ( inum, jpdom_global, 'aeiv', aeiv(:,:,1), cd_type = 'V', psgn = 1._wp ) 
    575575            CALL iom_close( inum ) 
    576576            DO jk = 2, jpkm1 
     
    595595            IF(lwp) WRITE(numout,*) '   ==>>>   eddy induced velocity coef. = F(i,j,k) read in eddy_diffusivity_3D.nc file' 
    596596            CALL iom_open ( 'eddy_induced_velocity_3D.nc', inum ) 
    597             CALL iom_get  ( inum, jpdom_data, 'aeiu', aeiu ) 
    598             CALL iom_get  ( inum, jpdom_data, 'aeiv', aeiv ) 
     597            CALL iom_get  ( inum, jpdom_global, 'aeiu', aeiu, cd_type = 'U', psgn = 1._wp ) 
     598            CALL iom_get  ( inum, jpdom_global, 'aeiv', aeiv, cd_type = 'V', psgn = 1._wp ) 
    599599            CALL iom_close( inum ) 
    600600            ! 
     
    647647      !                       ! Compute lateral diffusive coefficient at T-point 
    648648      IF( ln_traldf_triad ) THEN 
    649          DO_3D_00_00( 1, jpk ) 
     649         DO_3D( 0, 0, 0, 0, 1, jpk ) 
    650650            ! Take the max of N^2 and zero then take the vertical sum  
    651651            ! of the square root of the resulting N^2 ( required to compute  
     
    661661         END_3D 
    662662      ELSE 
    663          DO_3D_00_00( 1, jpk ) 
     663         DO_3D( 0, 0, 0, 0, 1, jpk ) 
    664664            ! Take the max of N^2 and zero then take the vertical sum  
    665665            ! of the square root of the resulting N^2 ( required to compute  
     
    677677      ENDIF 
    678678 
    679       DO_2D_00_00 
     679      DO_2D( 0, 0, 0, 0 ) 
    680680         zfw = MAX( ABS( 2. * omega * SIN( rad * gphit(ji,jj) ) ) , 1.e-10 ) 
    681681         ! Rossby radius at w-point taken betwenn 2 km and  40km 
     
    687687      !                                         !==  Bound on eiv coeff.  ==! 
    688688      z1_f20 = 1._wp / (  2._wp * omega * sin( rad * 20._wp )  ) 
    689       DO_2D_00_00 
     689      DO_2D( 0, 0, 0, 0 ) 
    690690         zzaei = MIN( 1._wp, ABS( ff_t(ji,jj) * z1_f20 ) ) * zaeiw(ji,jj)     ! tropical decrease 
    691691         zaeiw(ji,jj) = MIN( zzaei , paei0 )                                  ! Max value = paei0 
    692692      END_2D 
    693       CALL lbc_lnk( 'ldftra', zaeiw(:,:), 'W', 1. )       ! lateral boundary condition 
     693      CALL lbc_lnk( 'ldftra', zaeiw(:,:), 'W', 1.0_wp )       ! lateral boundary condition 
    694694      !                
    695       DO_2D_00_00 
     695      DO_2D( 0, 0, 0, 0 )                       !== aei at u- and v-points  ==! 
    696696         paeiu(ji,jj,1) = 0.5_wp * ( zaeiw(ji,jj) + zaeiw(ji+1,jj  ) ) * umask(ji,jj,1) 
    697697         paeiv(ji,jj,1) = 0.5_wp * ( zaeiw(ji,jj) + zaeiw(ji  ,jj+1) ) * vmask(ji,jj,1) 
    698698      END_2D 
    699       CALL lbc_lnk_multi( 'ldftra', paeiu(:,:,1), 'U', 1. , paeiv(:,:,1), 'V', 1. )      ! lateral boundary condition 
     699      CALL lbc_lnk_multi( 'ldftra', paeiu(:,:,1), 'U', 1.0_wp , paeiv(:,:,1), 'V', 1.0_wp )      ! lateral boundary condition 
    700700 
    701701      DO jk = 2, jpkm1                          !==  deeper values equal the surface one  ==! 
     
    749749      zpsi_uw(:,:,jpk) = 0._wp   ;   zpsi_vw(:,:,jpk) = 0._wp 
    750750      ! 
    751       DO_3D_10_10( 2, jpkm1 ) 
     751      DO_3D( 1, 0, 1, 0, 2, jpkm1 ) 
    752752         zpsi_uw(ji,jj,jk) = - r1_4 * e2u(ji,jj) * ( wslpi(ji,jj,jk  ) + wslpi(ji+1,jj,jk) )   & 
    753753            &                                    * ( aeiu (ji,jj,jk-1) + aeiu (ji  ,jj,jk) ) * wumask(ji,jj,jk) 
     
    756756      END_3D 
    757757      ! 
    758       DO_3D_10_10( 1, jpkm1 ) 
     758      DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 
    759759         pu(ji,jj,jk) = pu(ji,jj,jk) - ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji,jj,jk+1) ) 
    760760         pv(ji,jj,jk) = pv(ji,jj,jk) - ( zpsi_vw(ji,jj,jk) - zpsi_vw(ji,jj,jk+1) ) 
    761761      END_3D 
    762       DO_3D_00_00( 1, jpkm1 ) 
     762      DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    763763         pw(ji,jj,jk) = pw(ji,jj,jk) + (  zpsi_uw(ji,jj,jk) - zpsi_uw(ji-1,jj  ,jk)   & 
    764764            &                             + zpsi_vw(ji,jj,jk) - zpsi_vw(ji  ,jj-1,jk) ) 
     
    793793!!gm     to be redesigned....    
    794794      !                                                  !==  eiv stream function: output  ==! 
    795       CALL lbc_lnk_multi( 'ldftra', psi_uw, 'U', -1. , psi_vw, 'V', -1. ) 
     795      CALL lbc_lnk_multi( 'ldftra', psi_uw, 'U', -1.0_wp , psi_vw, 'V', -1.0_wp ) 
    796796      ! 
    797797!!gm      CALL iom_put( "psi_eiv_uw", psi_uw )                 ! output 
     
    812812      CALL iom_put( "voce_eiv", zw3d ) 
    813813      ! 
    814       DO_3D_00_00( 1, jpkm1 ) 
     814      DO_3D( 0, 0, 0, 0, 1, jpkm1 )                            ! e1 e2 w_eiv = dk[psix] + dk[psix] 
    815815         zw3d(ji,jj,jk) = (  psi_vw(ji,jj,jk) - psi_vw(ji  ,jj-1,jk)    & 
    816816            &              + psi_uw(ji,jj,jk) - psi_uw(ji-1,jj  ,jk)  ) / e1e2t(ji,jj) 
    817817      END_3D 
    818       CALL lbc_lnk( 'ldftra', zw3d, 'T', 1. )      ! lateral boundary condition 
     818      CALL lbc_lnk( 'ldftra', zw3d, 'T', 1.0_wp )      ! lateral boundary condition 
    819819      CALL iom_put( "woce_eiv", zw3d ) 
    820820      ! 
     
    839839        zw2d(:,:)   = 0._wp  
    840840        zw3d(:,:,:) = 0._wp  
    841         DO_3D_00_00( 1, jpkm1 ) 
     841        DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    842842           zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_uw(ji,jj,jk+1)          - psi_uw(ji  ,jj,jk)            )   & 
    843843              &                            * ( ts    (ji,jj,jk,jp_tem,Kmm) + ts    (ji+1,jj,jk,jp_tem,Kmm) )  
    844844           zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) 
    845845        END_3D 
    846         CALL lbc_lnk( 'ldftra', zw2d, 'U', -1. ) 
    847         CALL lbc_lnk( 'ldftra', zw3d, 'U', -1. ) 
     846        CALL lbc_lnk( 'ldftra', zw2d, 'U', -1.0_wp ) 
     847        CALL lbc_lnk( 'ldftra', zw3d, 'U', -1.0_wp ) 
    848848        CALL iom_put( "ueiv_heattr"  , zztmp * zw2d )                  ! heat transport in i-direction 
    849849        CALL iom_put( "ueiv_heattr3d", zztmp * zw3d )                  ! heat transport in i-direction 
     
    860860      zw2d(:,:)   = 0._wp  
    861861      zw3d(:,:,:) = 0._wp  
    862       DO_3D_00_00( 1, jpkm1 ) 
     862      DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    863863         zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_vw(ji,jj,jk+1)          - psi_vw(ji,jj  ,jk)            )   & 
    864864            &                            * ( ts    (ji,jj,jk,jp_tem,Kmm) + ts    (ji,jj+1,jk,jp_tem,Kmm) )  
    865865         zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) 
    866866      END_3D 
    867       CALL lbc_lnk( 'ldftra', zw2d, 'V', -1. ) 
     867      CALL lbc_lnk( 'ldftra', zw2d, 'V', -1.0_wp ) 
    868868      CALL iom_put( "veiv_heattr", zztmp * zw2d )                  !  heat transport in j-direction 
    869869      CALL iom_put( "veiv_heattr", zztmp * zw3d )                  !  heat transport in j-direction 
     
    875875        zw2d(:,:) = 0._wp  
    876876        zw3d(:,:,:) = 0._wp  
    877         DO_3D_00_00( 1, jpkm1 ) 
     877        DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    878878           zw3d(ji,jj,jk) = zw3d(ji,jj,jk) * ( psi_uw(ji,jj,jk+1)          - psi_uw(ji  ,jj,jk)            )   & 
    879879              &                            * ( ts    (ji,jj,jk,jp_sal,Kmm) + ts    (ji+1,jj,jk,jp_sal,Kmm) )  
    880880           zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) 
    881881        END_3D 
    882         CALL lbc_lnk( 'ldftra', zw2d, 'U', -1. ) 
    883         CALL lbc_lnk( 'ldftra', zw3d, 'U', -1. ) 
     882        CALL lbc_lnk( 'ldftra', zw2d, 'U', -1.0_wp ) 
     883        CALL lbc_lnk( 'ldftra', zw3d, 'U', -1.0_wp ) 
    884884        CALL iom_put( "ueiv_salttr", zztmp * zw2d )                  ! salt transport in i-direction 
    885885        CALL iom_put( "ueiv_salttr3d", zztmp * zw3d )                ! salt transport in i-direction 
     
    887887      zw2d(:,:) = 0._wp  
    888888      zw3d(:,:,:) = 0._wp  
    889       DO_3D_00_00( 1, jpkm1 ) 
     889      DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    890890         zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_vw(ji,jj,jk+1)          - psi_vw(ji,jj  ,jk)            )   & 
    891891            &                            * ( ts    (ji,jj,jk,jp_sal,Kmm) + ts    (ji,jj+1,jk,jp_sal,Kmm) )  
    892892         zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) 
    893893      END_3D 
    894       CALL lbc_lnk( 'ldftra', zw2d, 'V', -1. ) 
     894      CALL lbc_lnk( 'ldftra', zw2d, 'V', -1.0_wp ) 
    895895      CALL iom_put( "veiv_salttr", zztmp * zw2d )                  !  salt transport in j-direction 
    896896      CALL iom_put( "veiv_salttr", zztmp * zw3d )                  !  salt transport in j-direction 
Note: See TracChangeset for help on using the changeset viewer.