Changeset 12377 for NEMO/trunk/src/OCE/BDY/bdytra.F90
- Timestamp:
- 2020-02-12T15:39:06+01:00 (4 years ago)
- Location:
- NEMO/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEAD ext/AGRIF5 ^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL
-
- Property svn:externals
-
NEMO/trunk/src/OCE/BDY/bdytra.F90
r11536 r12377 40 40 CONTAINS 41 41 42 SUBROUTINE bdy_tra( kt )42 SUBROUTINE bdy_tra( kt, Kbb, pts, Kaa ) 43 43 !!---------------------------------------------------------------------- 44 44 !! *** SUBROUTINE bdy_tra *** … … 47 47 !! 48 48 !!---------------------------------------------------------------------- 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 50 52 ! 51 53 INTEGER :: ib_bdy, jn, igrd, ir ! Loop indeces … … 70 72 CASE('none' ) ; CYCLE 71 73 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 ) 73 75 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 masked76 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), & 77 79 & 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), & 79 81 & 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 ) 81 83 CASE DEFAULT ; CALL ctl_stop( 'bdy_tra : unrecognised option for open boundaries for T and S' ) 82 84 END SELECT … … 98 100 END DO 99 101 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 ) 101 103 END IF 102 104 ! … … 106 108 107 109 108 SUBROUTINE bdy_rnf( idx, pt a, jpa, llrim0 )110 SUBROUTINE bdy_rnf( idx, pt, jpa, llrim0 ) 109 111 !!---------------------------------------------------------------------- 110 112 !! *** SUBROUTINE bdy_rnf *** … … 116 118 !!---------------------------------------------------------------------- 117 119 TYPE(OBC_INDEX), INTENT(in) :: idx ! OBC indices 118 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pt a! tracer trend120 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pt ! tracer trend 119 121 INTEGER, INTENT(in) :: jpa ! TRA index 120 122 LOGICAL, INTENT(in) :: llrim0 ! indicate if rim 0 is treated 121 123 ! 122 124 INTEGER :: ib, ii, ij, igrd ! dummy loop indices 123 INTEGER :: ik, ip, jp ! 2D addresses124 125 !!---------------------------------------------------------------------- 125 126 ! 126 127 igrd = 1 ! Everything is at T-points here 127 128 IF( jpa == jp_tem ) THEN 128 CALL bdy_nmn( idx, igrd, pt a, llrim0 )129 CALL bdy_nmn( idx, igrd, pt, llrim0 ) 129 130 ELSE IF( jpa == jp_sal ) THEN 130 131 IF( .NOT. llrim0 ) RETURN … … 132 133 ii = idx%nbi(ib,igrd) 133 134 ij = idx%nbj(ib,igrd) 134 pt a(ii,ij,1:jpkm1) = 0.1 * tmask(ii,ij,1:jpkm1)135 pt(ii,ij,1:jpkm1) = 0.1 * tmask(ii,ij,1:jpkm1) 135 136 END DO 136 137 END IF … … 139 140 140 141 141 SUBROUTINE bdy_tra_dmp( kt )142 SUBROUTINE bdy_tra_dmp( kt, Kbb, pts, Krhs ) 142 143 !!---------------------------------------------------------------------- 143 144 !! *** SUBROUTINE bdy_tra_dmp *** … … 146 147 !! 147 148 !!---------------------------------------------------------------------- 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 149 152 ! 150 153 REAL(wp) :: zwgt ! boundary weight … … 165 168 zwgt = idx_bdy(ib_bdy)%nbd(ib,igrd) 166 169 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) + zta170 tsa(ii,ij,ik,jp_sal) = tsa(ii,ij,ik,jp_sal) + zsa170 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 171 174 END DO 172 175 END DO
Note: See TracChangeset
for help on using the changeset viewer.