Changeset 3294 for trunk/NEMOGCM/NEMO/OPA_SRC/BDY/bdytra.F90
- Timestamp:
- 2012-01-28T17:44:18+01:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/BDY/bdytra.F90
r2528 r3294 2 2 !!====================================================================== 3 3 !! *** MODULE bdytra *** 4 !! Ocean tracers: Flow Relaxation Scheme of tracers on each open boundary4 !! Ocean tracers: Apply boundary conditions for tracers 5 5 !!====================================================================== 6 6 !! History : 1.0 ! 2005-01 (J. Chanut, A. Sellar) Original code 7 7 !! 3.0 ! 2008-04 (NEMO team) add in the reference version 8 !! 3.4 ! 2011 (D. Storkey) rewrite in preparation for OBC-BDY merge 8 9 !!---------------------------------------------------------------------- 9 10 #if defined key_bdy … … 11 12 !! 'key_bdy' Unstructured Open Boundary Conditions 12 13 !!---------------------------------------------------------------------- 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 14 16 !!---------------------------------------------------------------------- 17 USE timing ! Timing 15 18 USE oce ! ocean dynamics and tracers variables 16 19 USE dom_oce ! ocean space and time domain variables 17 20 USE bdy_oce ! ocean open boundary conditions 21 USE bdydta, ONLY: bf 18 22 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 19 23 USE in_out_manager ! I/O manager … … 22 26 PRIVATE 23 27 24 PUBLIC bdy_tra _frs! routine called in tranxt.F9028 PUBLIC bdy_tra ! routine called in tranxt.F90 25 29 26 30 !!---------------------------------------------------------------------- … … 31 35 CONTAINS 32 36 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 ) 34 63 !!---------------------------------------------------------------------- 35 64 !! *** SUBROUTINE bdy_tra_frs *** 36 65 !! 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. 39 67 !! 40 68 !! Reference : Engedahl H., 1995, Tellus, 365-382. 41 69 !!---------------------------------------------------------------------- 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 43 73 !! 44 74 REAL(wp) :: zwgt ! boundary weight … … 47 77 !!---------------------------------------------------------------------- 48 78 ! 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') 71 97 ! 72 98 END SUBROUTINE bdy_tra_frs … … 77 103 !!---------------------------------------------------------------------- 78 104 CONTAINS 79 SUBROUTINE bdy_tra _frs(kt) ! Empty routine80 WRITE(*,*) 'bdy_tra _frs: You should not have seen this print! error?', kt81 END SUBROUTINE bdy_tra _frs105 SUBROUTINE bdy_tra(kt) ! Empty routine 106 WRITE(*,*) 'bdy_tra: You should not have seen this print! error?', kt 107 END SUBROUTINE bdy_tra 82 108 #endif 83 109
Note: See TracChangeset
for help on using the changeset viewer.