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

Ignore:
Timestamp:
2020-11-27T17:26:33+01:00 (4 years ago)
Author:
mathiot
Message:

ticket #1900: update branch to trunk and add ICB test case

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

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/tickets_icb_1900

    • Property svn:externals
      •  

        old new  
        22^/utils/build/makenemo@HEAD   makenemo 
        33^/utils/build/mk@HEAD         mk 
        4 ^/utils/tools/@HEAD           tools 
         4^/utils/tools@HEAD            tools 
        55^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
         
        88 
        99# SETTE 
        10 ^/utils/CI/sette@12931        sette 
         10^/utils/CI/sette@13559        sette 
  • NEMO/branches/2020/tickets_icb_1900/src/OCE/LDF/ldftra.F90

    r13237 r13899  
    246246      ENDIF 
    247247      ! 
    248       IF( ln_ldfeiv .AND. .NOT.( ln_traldf_iso .OR. ln_traldf_triad ) )                & 
    249            &            CALL ctl_stop( 'ln_ldfeiv=T requires iso-neutral laplacian diffusion' ) 
    250       IF( ln_isfcav .AND. ln_traldf_triad ) & 
    251            &            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' ) 
    252249           ! 
    253250      IF(  nldf_tra == np_lap_i .OR. nldf_tra == np_lap_it .OR. & 
     
    317314            IF(lwp) WRITE(numout,*) '   ==>>>   eddy diffusivity = F(i,j) read in eddy_diffusivity.nc file' 
    318315            CALL iom_open( 'eddy_diffusivity_2D.nc', inum ) 
    319             CALL iom_get ( inum, jpdom_data, 'ahtu_2D', ahtu(:,:,1) ) 
    320             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 ) 
    321318            CALL iom_close( inum ) 
    322319            DO jk = 2, jpkm1 
     
    345342            IF(lwp) WRITE(numout,*) '   ==>>>   eddy diffusivity = F(i,j,k) read in eddy_diffusivity.nc file' 
    346343            CALL iom_open( 'eddy_diffusivity_3D.nc', inum ) 
    347             CALL iom_get ( inum, jpdom_data, 'ahtu_3D', ahtu ) 
    348             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 ) 
    349346            CALL iom_close( inum ) 
    350347            ! 
     
    430427         zaht_min = 0.2_wp * aht0                                       ! minimum value for aht 
    431428         zDaht    = aht0 - zaht_min                                       
    432          DO_2D_11_11 
     429         DO_2D( 1, 1, 1, 1 ) 
    433430            !!gm CAUTION : here we assume lat/lon grid in 20deg N/S band (like all ORCA cfg) 
    434431            !!     ==>>>   The Coriolis value is identical for t- & u_points, and for v- and f-points 
     
    541538         IF( ln_traldf_blp )   CALL ctl_stop( 'ldf_eiv_init: eddy induced velocity ONLY with laplacian diffusivity' ) 
    542539         ! 
     540         IF( .NOT.( ln_traldf_iso .OR. ln_traldf_triad ) )   & 
     541           &                  CALL ctl_stop( 'ln_ldfeiv=T requires iso-neutral laplacian diffusion' ) 
    543542         !                                != allocate the aei arrays 
    544543         ALLOCATE( aeiu(jpi,jpj,jpk), aeiv(jpi,jpj,jpk), STAT=ierr ) 
     
    572571            IF(lwp) WRITE(numout,*) '   ==>>>   eddy induced velocity coef. = F(i,j) read in eddy_diffusivity_2D.nc file' 
    573572            CALL iom_open ( 'eddy_induced_velocity_2D.nc', inum ) 
    574             CALL iom_get  ( inum, jpdom_data, 'aeiu', aeiu(:,:,1) ) 
    575             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 ) 
    576575            CALL iom_close( inum ) 
    577576            DO jk = 2, jpkm1 
     
    596595            IF(lwp) WRITE(numout,*) '   ==>>>   eddy induced velocity coef. = F(i,j,k) read in eddy_diffusivity_3D.nc file' 
    597596            CALL iom_open ( 'eddy_induced_velocity_3D.nc', inum ) 
    598             CALL iom_get  ( inum, jpdom_data, 'aeiu', aeiu ) 
    599             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 ) 
    600599            CALL iom_close( inum ) 
    601600            ! 
     
    648647      !                       ! Compute lateral diffusive coefficient at T-point 
    649648      IF( ln_traldf_triad ) THEN 
    650          DO_3D_00_00( 1, jpk ) 
     649         DO_3D( 0, 0, 0, 0, 1, jpk ) 
    651650            ! Take the max of N^2 and zero then take the vertical sum  
    652651            ! of the square root of the resulting N^2 ( required to compute  
     
    662661         END_3D 
    663662      ELSE 
    664          DO_3D_00_00( 1, jpk ) 
     663         DO_3D( 0, 0, 0, 0, 1, jpk ) 
    665664            ! Take the max of N^2 and zero then take the vertical sum  
    666665            ! of the square root of the resulting N^2 ( required to compute  
     
    678677      ENDIF 
    679678 
    680       DO_2D_00_00 
     679      DO_2D( 0, 0, 0, 0 ) 
    681680         zfw = MAX( ABS( 2. * omega * SIN( rad * gphit(ji,jj) ) ) , 1.e-10 ) 
    682681         ! Rossby radius at w-point taken betwenn 2 km and  40km 
     
    688687      !                                         !==  Bound on eiv coeff.  ==! 
    689688      z1_f20 = 1._wp / (  2._wp * omega * sin( rad * 20._wp )  ) 
    690       DO_2D_00_00 
     689      DO_2D( 0, 0, 0, 0 ) 
    691690         zzaei = MIN( 1._wp, ABS( ff_t(ji,jj) * z1_f20 ) ) * zaeiw(ji,jj)     ! tropical decrease 
    692691         zaeiw(ji,jj) = MIN( zzaei , paei0 )                                  ! Max value = paei0 
     
    694693      CALL lbc_lnk( 'ldftra', zaeiw(:,:), 'W', 1.0_wp )       ! lateral boundary condition 
    695694      !                
    696       DO_2D_00_00 
     695      DO_2D( 0, 0, 0, 0 )                       !== aei at u- and v-points  ==! 
    697696         paeiu(ji,jj,1) = 0.5_wp * ( zaeiw(ji,jj) + zaeiw(ji+1,jj  ) ) * umask(ji,jj,1) 
    698697         paeiv(ji,jj,1) = 0.5_wp * ( zaeiw(ji,jj) + zaeiw(ji  ,jj+1) ) * vmask(ji,jj,1) 
     
    750749      zpsi_uw(:,:,jpk) = 0._wp   ;   zpsi_vw(:,:,jpk) = 0._wp 
    751750      ! 
    752       DO_3D_10_10( 2, jpkm1 ) 
     751      DO_3D( 1, 0, 1, 0, 2, jpkm1 ) 
    753752         zpsi_uw(ji,jj,jk) = - r1_4 * e2u(ji,jj) * ( wslpi(ji,jj,jk  ) + wslpi(ji+1,jj,jk) )   & 
    754753            &                                    * ( aeiu (ji,jj,jk-1) + aeiu (ji  ,jj,jk) ) * wumask(ji,jj,jk) 
     
    757756      END_3D 
    758757      ! 
    759       DO_3D_10_10( 1, jpkm1 ) 
     758      DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 
    760759         pu(ji,jj,jk) = pu(ji,jj,jk) - ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji,jj,jk+1) ) 
    761760         pv(ji,jj,jk) = pv(ji,jj,jk) - ( zpsi_vw(ji,jj,jk) - zpsi_vw(ji,jj,jk+1) ) 
    762761      END_3D 
    763       DO_3D_00_00( 1, jpkm1 ) 
     762      DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    764763         pw(ji,jj,jk) = pw(ji,jj,jk) + (  zpsi_uw(ji,jj,jk) - zpsi_uw(ji-1,jj  ,jk)   & 
    765764            &                             + zpsi_vw(ji,jj,jk) - zpsi_vw(ji  ,jj-1,jk) ) 
     
    813812      CALL iom_put( "voce_eiv", zw3d ) 
    814813      ! 
    815       DO_3D_00_00( 1, jpkm1 ) 
     814      DO_3D( 0, 0, 0, 0, 1, jpkm1 )                            ! e1 e2 w_eiv = dk[psix] + dk[psix] 
    816815         zw3d(ji,jj,jk) = (  psi_vw(ji,jj,jk) - psi_vw(ji  ,jj-1,jk)    & 
    817816            &              + psi_uw(ji,jj,jk) - psi_uw(ji-1,jj  ,jk)  ) / e1e2t(ji,jj) 
     
    840839        zw2d(:,:)   = 0._wp  
    841840        zw3d(:,:,:) = 0._wp  
    842         DO_3D_00_00( 1, jpkm1 ) 
     841        DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    843842           zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_uw(ji,jj,jk+1)          - psi_uw(ji  ,jj,jk)            )   & 
    844843              &                            * ( ts    (ji,jj,jk,jp_tem,Kmm) + ts    (ji+1,jj,jk,jp_tem,Kmm) )  
     
    861860      zw2d(:,:)   = 0._wp  
    862861      zw3d(:,:,:) = 0._wp  
    863       DO_3D_00_00( 1, jpkm1 ) 
     862      DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    864863         zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_vw(ji,jj,jk+1)          - psi_vw(ji,jj  ,jk)            )   & 
    865864            &                            * ( ts    (ji,jj,jk,jp_tem,Kmm) + ts    (ji,jj+1,jk,jp_tem,Kmm) )  
     
    876875        zw2d(:,:) = 0._wp  
    877876        zw3d(:,:,:) = 0._wp  
    878         DO_3D_00_00( 1, jpkm1 ) 
     877        DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    879878           zw3d(ji,jj,jk) = zw3d(ji,jj,jk) * ( psi_uw(ji,jj,jk+1)          - psi_uw(ji  ,jj,jk)            )   & 
    880879              &                            * ( ts    (ji,jj,jk,jp_sal,Kmm) + ts    (ji+1,jj,jk,jp_sal,Kmm) )  
     
    888887      zw2d(:,:) = 0._wp  
    889888      zw3d(:,:,:) = 0._wp  
    890       DO_3D_00_00( 1, jpkm1 ) 
     889      DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    891890         zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_vw(ji,jj,jk+1)          - psi_vw(ji,jj  ,jk)            )   & 
    892891            &                            * ( ts    (ji,jj,jk,jp_sal,Kmm) + ts    (ji,jj+1,jk,jp_sal,Kmm) )  
Note: See TracChangeset for help on using the changeset viewer.