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/BDY/bdytra.F90 – NEMO

Ignore:
Timestamp:
2019-11-22T15:29:17+01:00 (4 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/BDY/bdytra.F90

    r11536 r11949  
    4040CONTAINS 
    4141 
    42    SUBROUTINE bdy_tra( kt ) 
     42   SUBROUTINE bdy_tra( kt, Kbb, pts, Kaa ) 
    4343      !!---------------------------------------------------------------------- 
    4444      !!                  ***  SUBROUTINE bdy_tra  *** 
     
    4747      !! 
    4848      !!---------------------------------------------------------------------- 
    49       INTEGER, INTENT(in) ::   kt   ! Main time step counter 
     49      INTEGER                                  , INTENT(in)    :: kt        ! Main time step counter 
     50      INTEGER                                  , INTENT(in)    :: Kbb, Kaa  ! time level indices 
     51      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts       ! tracer fields 
    5052      ! 
    5153      INTEGER                        :: ib_bdy, jn, igrd, ir   ! Loop indeces 
     
    7072               CASE('none'        )   ;   CYCLE 
    7173               CASE('frs'         )   ! treat the whole boundary at once 
    72                   IF( ir == 0 ) CALL bdy_frs ( idx_bdy(ib_bdy),                tsa(:,:,:,jn), zdta(jn)%tra ) 
     74                  IF( ir == 0 ) CALL bdy_frs ( idx_bdy(ib_bdy),                pts(:,:,:,jn,Kaa), zdta(jn)%tra ) 
    7375               CASE('specified'   )   ! treat the whole rim      at once 
    74                   IF( ir == 0 ) CALL bdy_spe ( idx_bdy(ib_bdy),                tsa(:,:,:,jn), zdta(jn)%tra ) 
    75                CASE('neumann'     )   ;   CALL bdy_nmn ( idx_bdy(ib_bdy), igrd         , tsa(:,:,:,jn), llrim0 )   ! tsa masked 
    76                CASE('orlanski'    )   ;   CALL bdy_orl ( idx_bdy(ib_bdy), tsb(:,:,:,jn), tsa(:,:,:,jn), & 
     76                  IF( ir == 0 ) CALL bdy_spe ( idx_bdy(ib_bdy),                pts(:,:,:,jn,Kaa), zdta(jn)%tra ) 
     77               CASE('neumann'     )   ;   CALL bdy_nmn ( idx_bdy(ib_bdy), igrd         , pts(:,:,:,jn,Kaa), llrim0 )   ! tsa masked 
     78               CASE('orlanski'    )   ;   CALL bdy_orl ( idx_bdy(ib_bdy), pts(:,:,:,jn,Kbb), pts(:,:,:,jn,Kaa), & 
    7779                    & zdta(jn)%tra, llrim0, ll_npo=.false. ) 
    78                CASE('orlanski_npo')   ;   CALL bdy_orl ( idx_bdy(ib_bdy), tsb(:,:,:,jn), tsa(:,:,:,jn), & 
     80               CASE('orlanski_npo')   ;   CALL bdy_orl ( idx_bdy(ib_bdy), pts(:,:,:,jn,Kbb), pts(:,:,:,jn,Kaa), & 
    7981                    & zdta(jn)%tra, llrim0, ll_npo=.true.  ) 
    80                CASE('runoff'      )   ;   CALL bdy_rnf ( idx_bdy(ib_bdy),                tsa(:,:,:,jn), jn, llrim0 ) 
     82               CASE('runoff'      )   ;   CALL bdy_rnf ( idx_bdy(ib_bdy),                pts(:,:,:,jn,Kaa), jn, llrim0 ) 
    8183               CASE DEFAULT           ;   CALL ctl_stop( 'bdy_tra : unrecognised option for open boundaries for T and S' ) 
    8284               END SELECT 
     
    98100         END DO 
    99101         IF( ANY(llsend1) .OR. ANY(llrecv1) ) THEN   ! if need to send/recv in at least one direction 
    100             CALL lbc_lnk( 'bdytra', tsa, 'T',  1., kfillmode=jpfillnothing ,lsend=llsend1, lrecv=llrecv1 ) 
     102            CALL lbc_lnk( 'bdytra', pts(:,:,:,jn,Kaa), 'T',  1., kfillmode=jpfillnothing ,lsend=llsend1, lrecv=llrecv1 ) 
    101103         END IF 
    102104         ! 
     
    106108 
    107109 
    108    SUBROUTINE bdy_rnf( idx, pta, jpa, llrim0 ) 
     110   SUBROUTINE bdy_rnf( idx, pt, jpa, llrim0 ) 
    109111      !!---------------------------------------------------------------------- 
    110112      !!                 ***  SUBROUTINE bdy_rnf  *** 
     
    116118      !!---------------------------------------------------------------------- 
    117119      TYPE(OBC_INDEX),                     INTENT(in) ::   idx      ! OBC indices 
    118       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pta      ! tracer trend 
     120      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pt       ! tracer trend 
    119121      INTEGER,                             INTENT(in) ::   jpa      ! TRA index 
    120122      LOGICAL,                             INTENT(in) ::   llrim0   ! indicate if rim 0 is treated 
    121123      ! 
    122124      INTEGER  ::   ib, ii, ij, igrd   ! dummy loop indices 
    123       INTEGER  ::   ik, ip, jp ! 2D addresses 
    124125      !!---------------------------------------------------------------------- 
    125126      ! 
    126127      igrd = 1                       ! Everything is at T-points here 
    127128      IF(      jpa == jp_tem ) THEN 
    128          CALL bdy_nmn( idx, igrd, pta, llrim0 ) 
     129         CALL bdy_nmn( idx, igrd, pt, llrim0 ) 
    129130      ELSE IF( jpa == jp_sal ) THEN 
    130131         IF( .NOT. llrim0 )   RETURN 
     
    132133            ii = idx%nbi(ib,igrd) 
    133134            ij = idx%nbj(ib,igrd) 
    134             pta(ii,ij,1:jpkm1) = 0.1 * tmask(ii,ij,1:jpkm1) 
     135            pt(ii,ij,1:jpkm1) = 0.1 * tmask(ii,ij,1:jpkm1) 
    135136         END DO 
    136137      END IF 
     
    139140 
    140141 
    141    SUBROUTINE bdy_tra_dmp( kt ) 
     142   SUBROUTINE bdy_tra_dmp( kt, Kbb, pts, Krhs ) 
    142143      !!---------------------------------------------------------------------- 
    143144      !!                 ***  SUBROUTINE bdy_tra_dmp  *** 
     
    146147      !!  
    147148      !!---------------------------------------------------------------------- 
    148       INTEGER, INTENT(in) ::   kt   ! 
     149      INTEGER                                  , INTENT(in)    :: kt        ! time step 
     150      INTEGER                                  , INTENT(in)    :: Kbb, Krhs ! time level indices 
     151      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts       ! active tracers and RHS of tracer equation 
    149152      ! 
    150153      REAL(wp) ::   zwgt           ! boundary weight 
     
    165168               zwgt = idx_bdy(ib_bdy)%nbd(ib,igrd) 
    166169               DO ik = 1, jpkm1 
    167                   zta = zwgt * ( dta_bdy(ib_bdy)%tem(ib,ik) - tsb(ii,ij,ik,jp_tem) ) * tmask(ii,ij,ik) 
    168                   zsa = zwgt * ( dta_bdy(ib_bdy)%sal(ib,ik) - tsb(ii,ij,ik,jp_sal) ) * tmask(ii,ij,ik) 
    169                   tsa(ii,ij,ik,jp_tem) = tsa(ii,ij,ik,jp_tem) + zta 
    170                   tsa(ii,ij,ik,jp_sal) = tsa(ii,ij,ik,jp_sal) + zsa 
     170                  zta = zwgt * ( dta_bdy(ib_bdy)%tem(ib,ik) - pts(ii,ij,ik,jp_tem,Kbb) ) * tmask(ii,ij,ik) 
     171                  zsa = zwgt * ( dta_bdy(ib_bdy)%sal(ib,ik) - pts(ii,ij,ik,jp_sal,Kbb) ) * tmask(ii,ij,ik) 
     172                  pts(ii,ij,ik,jp_tem,Krhs) = pts(ii,ij,ik,jp_tem,Krhs) + zta 
     173                  pts(ii,ij,ik,jp_sal,Krhs) = pts(ii,ij,ik,jp_sal,Krhs) + zsa 
    171174               END DO 
    172175            END DO 
Note: See TracChangeset for help on using the changeset viewer.