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 3294 for trunk/NEMOGCM/NEMO/OPA_SRC/BDY/bdytra.F90 – NEMO

Ignore:
Timestamp:
2012-01-28T17:44:18+01:00 (12 years ago)
Author:
rblod
Message:

Merge of 3.4beta into the trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/OPA_SRC/BDY/bdytra.F90

    r2528 r3294  
    22   !!====================================================================== 
    33   !!                       ***  MODULE  bdytra  *** 
    4    !! Ocean tracers:   Flow Relaxation Scheme of tracers on each open boundary 
     4   !! Ocean tracers:   Apply boundary conditions for tracers 
    55   !!====================================================================== 
    66   !! History :  1.0  !  2005-01  (J. Chanut, A. Sellar)  Original code 
    77   !!            3.0  !  2008-04  (NEMO team)  add in the reference version 
     8   !!            3.4  !  2011     (D. Storkey) rewrite in preparation for OBC-BDY merge 
    89   !!---------------------------------------------------------------------- 
    910#if defined key_bdy 
     
    1112   !!   'key_bdy'                     Unstructured Open Boundary Conditions 
    1213   !!---------------------------------------------------------------------- 
    13    !!   bdy_tra_frs        : Relaxation of tracers on unstructured open boundaries 
     14   !!   bdy_tra            : Apply open boundary conditions to T and S 
     15   !!   bdy_tra_frs        : Apply Flow Relaxation Scheme 
    1416   !!---------------------------------------------------------------------- 
     17   USE timing          ! Timing 
    1518   USE oce             ! ocean dynamics and tracers variables 
    1619   USE dom_oce         ! ocean space and time domain variables  
    1720   USE bdy_oce         ! ocean open boundary conditions 
     21   USE bdydta, ONLY:   bf 
    1822   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    1923   USE in_out_manager  ! I/O manager 
     
    2226   PRIVATE 
    2327 
    24    PUBLIC bdy_tra_frs     ! routine called in tranxt.F90  
     28   PUBLIC bdy_tra      ! routine called in tranxt.F90  
    2529 
    2630   !!---------------------------------------------------------------------- 
     
    3135CONTAINS 
    3236 
    33    SUBROUTINE bdy_tra_frs( kt ) 
     37   SUBROUTINE bdy_tra( kt ) 
     38      !!---------------------------------------------------------------------- 
     39      !!                  ***  SUBROUTINE bdy_tra  *** 
     40      !! 
     41      !! ** Purpose : - Apply open boundary conditions for temperature and salinity 
     42      !! 
     43      !!---------------------------------------------------------------------- 
     44      INTEGER, INTENT( in ) :: kt     ! Main time step counter 
     45      !! 
     46      INTEGER               :: ib_bdy ! Loop index 
     47 
     48      DO ib_bdy=1, nb_bdy 
     49 
     50         SELECT CASE( nn_tra(ib_bdy) ) 
     51         CASE(jp_none) 
     52            CYCLE 
     53         CASE(jp_frs) 
     54            CALL bdy_tra_frs( idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt ) 
     55         CASE DEFAULT 
     56            CALL ctl_stop( 'bdy_tra : unrecognised option for open boundaries for T and S' ) 
     57         END SELECT 
     58      ENDDO 
     59 
     60   END SUBROUTINE bdy_tra 
     61 
     62   SUBROUTINE bdy_tra_frs( idx, dta, kt ) 
    3463      !!---------------------------------------------------------------------- 
    3564      !!                 ***  SUBROUTINE bdy_tra_frs  *** 
    3665      !!                     
    37       !! ** Purpose : Apply the Flow Relaxation Scheme for tracers in the   
    38       !!              case of unstructured open boundaries. 
     66      !! ** Purpose : Apply the Flow Relaxation Scheme for tracers at open boundaries. 
    3967      !!  
    4068      !! Reference : Engedahl H., 1995, Tellus, 365-382. 
    4169      !!---------------------------------------------------------------------- 
    42       INTEGER, INTENT( in ) ::   kt 
     70      INTEGER,         INTENT(in) ::   kt 
     71      TYPE(OBC_INDEX), INTENT(in) ::   idx  ! OBC indices 
     72      TYPE(OBC_DATA),  INTENT(in) ::   dta  ! OBC external data 
    4373      !!  
    4474      REAL(wp) ::   zwgt           ! boundary weight 
     
    4777      !!---------------------------------------------------------------------- 
    4878      ! 
    49       IF(ln_tra_frs) THEN       ! If this is false, then this routine does nothing.  
    50          ! 
    51          IF( kt == nit000 ) THEN 
    52             IF(lwp) WRITE(numout,*) 
    53             IF(lwp) WRITE(numout,*) 'bdy_tra_frs : Flow Relaxation Scheme for tracers' 
    54             IF(lwp) WRITE(numout,*) '~~~~~~~' 
    55          ENDIF 
    56          ! 
    57          igrd = 1                       ! Everything is at T-points here 
    58          DO ib = 1, nblen(igrd) 
    59             DO ik = 1, jpkm1 
    60                ii = nbi(ib,igrd) 
    61                ij = nbj(ib,igrd) 
    62                zwgt = nbw(ib,igrd) 
    63                ta(ii,ij,ik) = ( ta(ii,ij,ik) * (1.-zwgt) + tbdy(ib,ik) * zwgt ) * tmask(ii,ij,ik)          
    64                sa(ii,ij,ik) = ( sa(ii,ij,ik) * (1.-zwgt) + sbdy(ib,ik) * zwgt ) * tmask(ii,ij,ik) 
    65             END DO 
    66          END DO  
    67          ! 
    68          CALL lbc_lnk( ta, 'T', 1. )   ; CALL lbc_lnk( sa, 'T', 1. )    ! Boundary points should be updated 
    69          ! 
    70       ENDIF ! ln_tra_frs 
     79      IF( nn_timing == 1 ) CALL timing_start('bdy_tra_frs') 
     80      ! 
     81      igrd = 1                       ! Everything is at T-points here 
     82      DO ib = 1, idx%nblen(igrd) 
     83         DO ik = 1, jpkm1 
     84            ii = idx%nbi(ib,igrd) 
     85            ij = idx%nbj(ib,igrd) 
     86            zwgt = idx%nbw(ib,igrd) 
     87            tsa(ii,ij,ik,jp_tem) = ( tsa(ii,ij,ik,jp_tem) + zwgt * ( dta%tem(ib,ik) - tsa(ii,ij,ik,jp_tem) ) ) * tmask(ii,ij,ik)          
     88            tsa(ii,ij,ik,jp_sal) = ( tsa(ii,ij,ik,jp_sal) + zwgt * ( dta%sal(ib,ik) - tsa(ii,ij,ik,jp_sal) ) ) * tmask(ii,ij,ik) 
     89         END DO 
     90      END DO  
     91      ! 
     92      CALL lbc_lnk( tsa(:,:,:,jp_tem), 'T', 1. )   ; CALL lbc_lnk( tsa(:,:,:,jp_sal), 'T', 1. )    ! Boundary points should be updated 
     93      ! 
     94      IF( kt .eq. nit000 ) CLOSE( unit = 102 ) 
     95      ! 
     96      IF( nn_timing == 1 ) CALL timing_stop('bdy_tra_frs') 
    7197      ! 
    7298   END SUBROUTINE bdy_tra_frs 
     
    77103   !!---------------------------------------------------------------------- 
    78104CONTAINS 
    79    SUBROUTINE bdy_tra_frs(kt)      ! Empty routine 
    80       WRITE(*,*) 'bdy_tra_frs: You should not have seen this print! error?', kt 
    81    END SUBROUTINE bdy_tra_frs 
     105   SUBROUTINE bdy_tra(kt)      ! Empty routine 
     106      WRITE(*,*) 'bdy_tra: You should not have seen this print! error?', kt 
     107   END SUBROUTINE bdy_tra 
    82108#endif 
    83109 
Note: See TracChangeset for help on using the changeset viewer.