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 11949 for NEMO/branches/2019/dev_r11943_MERGE_2019/src/OCE/DIA/diadct.F90 – NEMO

Ignore:
Timestamp:
2019-11-22T15:29:17+01:00 (5 years ago)
Author:
acc
Message:

Merge in changes from 2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps. This just creates a fresh copy of this branch to use as the merge base. See ticket #2341

Location:
NEMO/branches/2019/dev_r11943_MERGE_2019/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11943_MERGE_2019/src

    • Property svn:mergeinfo deleted
  • NEMO/branches/2019/dev_r11943_MERGE_2019/src/OCE/DIA/diadct.F90

    r11536 r11949  
    175175  
    176176  
    177   SUBROUTINE dia_dct( kt ) 
     177  SUBROUTINE dia_dct( kt, Kmm ) 
    178178     !!--------------------------------------------------------------------- 
    179179     !!               ***  ROUTINE diadct  ***   
     
    192192     !!               Reinitialise all relevant arrays to zero  
    193193     !!--------------------------------------------------------------------- 
    194      INTEGER, INTENT(in) ::   kt 
     194     INTEGER, INTENT(in) ::   kt    ! ocean time step 
     195     INTEGER, INTENT(in) ::   Kmm   ! time level index 
    195196     ! 
    196197     INTEGER ::   jsec              ! loop on sections 
     
    232233 
    233234           !Compute transport through section   
    234            CALL transport(secs(jsec),lldebug,jsec)  
     235           CALL transport(Kmm,secs(jsec),lldebug,jsec)  
    235236 
    236237        ENDDO 
     
    246247           ! Sum over each class  
    247248           DO jsec=1,nb_sec  
    248               CALL dia_dct_sum(secs(jsec),jsec)  
     249              CALL dia_dct_sum(Kmm,secs(jsec),jsec)  
    249250           ENDDO  
    250251 
     
    558559 
    559560 
    560    SUBROUTINE transport(sec,ld_debug,jsec) 
     561   SUBROUTINE transport(Kmm,sec,ld_debug,jsec) 
    561562     !!------------------------------------------------------------------------------------------- 
    562563     !!                     ***  ROUTINE transport  *** 
     
    578579     !! 
    579580     !!------------------------------------------------------------------------------------------- 
     581     INTEGER      ,INTENT(IN)    :: Kmm         ! time level index 
    580582     TYPE(SECTION),INTENT(INOUT) :: sec 
    581583     LOGICAL      ,INTENT(IN)    :: ld_debug 
     
    673675            SELECT CASE( sec%direction(jseg) ) 
    674676               CASE(0,1)  
    675                   ztn   = interp(k%I,k%J,jk,'V',tsn(:,:,:,jp_tem) )  
    676                   zsn   = interp(k%I,k%J,jk,'V',tsn(:,:,:,jp_sal) )  
    677                   zrhop = interp(k%I,k%J,jk,'V',rhop)  
    678                   zrhoi = interp(k%I,k%J,jk,'V',rhd*rau0+rau0)  
    679                   zsshn =  0.5*( sshn(k%I,k%J) + sshn(k%I,k%J+1)    ) * vmask(k%I,k%J,1)  
     677                  ztn   = interp(Kmm,k%I,k%J,jk,'V',ts(:,:,:,jp_tem,Kmm) )  
     678                  zsn   = interp(Kmm,k%I,k%J,jk,'V',ts(:,:,:,jp_sal,Kmm) )  
     679                  zrhop = interp(Kmm,k%I,k%J,jk,'V',rhop)  
     680                  zrhoi = interp(Kmm,k%I,k%J,jk,'V',rhd*rau0+rau0)  
     681                  zsshn =  0.5*( ssh(k%I,k%J,Kmm) + ssh(k%I,k%J+1,Kmm)    ) * vmask(k%I,k%J,1)  
    680682               CASE(2,3)  
    681                   ztn   = interp(k%I,k%J,jk,'U',tsn(:,:,:,jp_tem) )  
    682                   zsn   = interp(k%I,k%J,jk,'U',tsn(:,:,:,jp_sal) )  
    683                   zrhop = interp(k%I,k%J,jk,'U',rhop)  
    684                   zrhoi = interp(k%I,k%J,jk,'U',rhd*rau0+rau0)  
    685                   zsshn =  0.5*( sshn(k%I,k%J) + sshn(k%I+1,k%J)    ) * umask(k%I,k%J,1)   
     683                  ztn   = interp(Kmm,k%I,k%J,jk,'U',ts(:,:,:,jp_tem,Kmm) )  
     684                  zsn   = interp(Kmm,k%I,k%J,jk,'U',ts(:,:,:,jp_sal,Kmm) )  
     685                  zrhop = interp(Kmm,k%I,k%J,jk,'U',rhop)  
     686                  zrhoi = interp(Kmm,k%I,k%J,jk,'U',rhd*rau0+rau0)  
     687                  zsshn =  0.5*( ssh(k%I,k%J,Kmm) + ssh(k%I+1,k%J,Kmm)    ) * umask(k%I,k%J,1)   
    686688               END SELECT  
    687689               ! 
    688                zdep= gdept_n(k%I,k%J,jk)  
     690               zdep= gdept(k%I,k%J,jk,Kmm)  
    689691   
    690692               SELECT CASE( sec%direction(jseg) )                !compute velocity with the correct direction  
    691693               CASE(0,1)    
    692694                  zumid=0._wp 
    693                   zvmid=isgnv*vn(k%I,k%J,jk)*vmask(k%I,k%J,jk)  
     695                  zvmid=isgnv*vv(k%I,k%J,jk,Kmm)*vmask(k%I,k%J,jk)  
    694696               CASE(2,3)  
    695                   zumid=isgnu*un(k%I,k%J,jk)*umask(k%I,k%J,jk)  
     697                  zumid=isgnu*uu(k%I,k%J,jk,Kmm)*umask(k%I,k%J,jk)  
    696698                  zvmid=0._wp 
    697699               END SELECT  
     
    699701               !zTnorm=transport through one cell;  
    700702               !velocity* cell's length * cell's thickness  
    701                zTnorm = zumid*e2u(k%I,k%J) * e3u_n(k%I,k%J,jk)     &  
    702                   &   + zvmid*e1v(k%I,k%J) * e3v_n(k%I,k%J,jk)  
     703               zTnorm = zumid*e2u(k%I,k%J) * e3u(k%I,k%J,jk,Kmm)     &  
     704                  &   + zvmid*e1v(k%I,k%J) * e3v(k%I,k%J,jk,Kmm)  
    703705 
    704706!!gm  THIS is WRONG  no transport due to ssh in linear free surface case !!!!! 
     
    765767 
    766768 
    767   SUBROUTINE dia_dct_sum(sec,jsec)  
     769  SUBROUTINE dia_dct_sum(Kmm,sec,jsec)  
    768770     !!-------------------------------------------------------------  
    769771     !! Purpose: Average the transport over nn_dctwri time steps   
     
    784786     !!  
    785787     !!-------------------------------------------------------------  
     788     INTEGER      ,INTENT(IN)    :: Kmm         ! time level index 
    786789     TYPE(SECTION),INTENT(INOUT) :: sec  
    787790     INTEGER      ,INTENT(IN)    :: jsec        ! numeric identifier of section  
     
    845848              SELECT CASE( sec%direction(jseg) )  
    846849              CASE(0,1)  
    847                  ztn   = interp(k%I,k%J,jk,'V',tsn(:,:,:,jp_tem) )  
    848                  zsn   = interp(k%I,k%J,jk,'V',tsn(:,:,:,jp_sal) )  
    849                  zrhop = interp(k%I,k%J,jk,'V',rhop)  
    850                  zrhoi = interp(k%I,k%J,jk,'V',rhd*rau0+rau0)  
     850                 ztn   = interp(Kmm,k%I,k%J,jk,'V',ts(:,:,:,jp_tem,Kmm) )  
     851                 zsn   = interp(Kmm,k%I,k%J,jk,'V',ts(:,:,:,jp_sal,Kmm) )  
     852                 zrhop = interp(Kmm,k%I,k%J,jk,'V',rhop)  
     853                 zrhoi = interp(Kmm,k%I,k%J,jk,'V',rhd*rau0+rau0)  
    851854 
    852855              CASE(2,3)  
    853                  ztn   = interp(k%I,k%J,jk,'U',tsn(:,:,:,jp_tem) )  
    854                  zsn   = interp(k%I,k%J,jk,'U',tsn(:,:,:,jp_sal) )  
    855                  zrhop = interp(k%I,k%J,jk,'U',rhop)  
    856                  zrhoi = interp(k%I,k%J,jk,'U',rhd*rau0+rau0)  
    857                  zsshn =  0.5*( sshn(k%I,k%J)    + sshn(k%I+1,k%J)    ) * umask(k%I,k%J,1)   
     856                 ztn   = interp(Kmm,k%I,k%J,jk,'U',ts(:,:,:,jp_tem,Kmm) )  
     857                 zsn   = interp(Kmm,k%I,k%J,jk,'U',ts(:,:,:,jp_sal,Kmm) )  
     858                 zrhop = interp(Kmm,k%I,k%J,jk,'U',rhop)  
     859                 zrhoi = interp(Kmm,k%I,k%J,jk,'U',rhd*rau0+rau0)  
     860                 zsshn =  0.5*( ssh(k%I,k%J,Kmm)    + ssh(k%I+1,k%J,Kmm)    ) * umask(k%I,k%J,1)   
    858861              END SELECT  
    859862  
    860               zdep= gdept_n(k%I,k%J,jk)  
     863              zdep= gdept(k%I,k%J,jk,Kmm)  
    861864   
    862865              !-------------------------------  
     
    11011104 
    11021105 
    1103    FUNCTION interp(ki, kj, kk, cd_point, ptab) 
     1106   FUNCTION interp(Kmm, ki, kj, kk, cd_point, ptab) 
    11041107  !!---------------------------------------------------------------------- 
    11051108  !! 
     
    11621165  !!---------------------------------------------------------------------- 
    11631166  !*arguments 
     1167  INTEGER, INTENT(IN)                          :: Kmm          ! time level index 
    11641168  INTEGER, INTENT(IN)                          :: ki, kj, kk   ! coordinate of point 
    11651169  CHARACTER(len=1), INTENT(IN)                 :: cd_point     ! type of point (U, V) 
     
    11961200  IF( ln_sco )THEN   ! s-coordinate case 
    11971201 
    1198      zdepu = ( gdept_n(ii1,ij1,kk) +  gdept_n(ii2,ij2,kk) ) * 0.5_wp  
    1199      zdep1 = gdept_n(ii1,ij1,kk) - zdepu 
    1200      zdep2 = gdept_n(ii2,ij2,kk) - zdepu 
     1202     zdepu = ( gdept(ii1,ij1,kk,Kmm) +  gdept(ii2,ij2,kk,Kmm) ) * 0.5_wp  
     1203     zdep1 = gdept(ii1,ij1,kk,Kmm) - zdepu 
     1204     zdep2 = gdept(ii2,ij2,kk,Kmm) - zdepu 
    12011205 
    12021206     ! weights 
     
    12101214  ELSE       ! full step or partial step case  
    12111215 
    1212      ze3t  = e3t_n(ii2,ij2,kk) - e3t_n(ii1,ij1,kk)  
    1213      zwgt1 = ( e3w_n(ii2,ij2,kk) - e3w_n(ii1,ij1,kk) ) / e3w_n(ii2,ij2,kk) 
    1214      zwgt2 = ( e3w_n(ii1,ij1,kk) - e3w_n(ii2,ij2,kk) ) / e3w_n(ii1,ij1,kk) 
     1216     ze3t  = e3t(ii2,ij2,kk,Kmm) - e3t(ii1,ij1,kk,Kmm)  
     1217     zwgt1 = ( e3w(ii2,ij2,kk,Kmm) - e3w(ii1,ij1,kk,Kmm) ) / e3w(ii2,ij2,kk,Kmm) 
     1218     zwgt2 = ( e3w(ii1,ij1,kk,Kmm) - e3w(ii2,ij2,kk,Kmm) ) / e3w(ii1,ij1,kk,Kmm) 
    12151219 
    12161220     IF(kk .NE. 1)THEN 
     
    12451249      IMPLICIT NONE 
    12461250   END SUBROUTINE dia_dct_init 
    1247    SUBROUTINE dia_dct( kt ) 
     1251 
     1252   SUBROUTINE dia_dct( kt, Kmm )         ! Dummy routine 
    12481253      IMPLICIT NONE 
    1249       INTEGER, INTENT(in) ::   kt 
     1254      INTEGER, INTENT( in ) :: kt   ! ocean time-step index 
     1255      INTEGER, INTENT( in ) :: Kmm  ! ocean time level index 
     1256      WRITE(*,*) 'dia_dct: You should not have seen this print! error?', kt 
    12501257   END SUBROUTINE dia_dct 
    12511258   ! 
Note: See TracChangeset for help on using the changeset viewer.