- Timestamp:
- 2010-07-29T17:05:35+02:00 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/TRA/traadv_ubs.F90
r2024 r2034 33 33 # include "vectopt_loop_substitute.h90" 34 34 !!---------------------------------------------------------------------- 35 !! OPA 9.0 , LOCEAN-IPSL (2006)35 !! NEMO/OPA 3.3 , LOCEAN-IPSL (2010) 36 36 !! $Id$ 37 37 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) … … 40 40 CONTAINS 41 41 42 SUBROUTINE tra_adv_ubs ( kt , cdtype, pun, pvn, pwn, &43 & ptrab, ptran , ptraa, kjpt )42 SUBROUTINE tra_adv_ubs ( kt, cdtype, pun, pvn, pwn, & 43 & ptb, ptn, pta, kjpt ) 44 44 !!---------------------------------------------------------------------- 45 45 !! *** ROUTINE tra_adv_ubs *** … … 68 68 !! the UBS have been found to be too diffusive. 69 69 !! 70 !! ** Action : - update (pt raa) with the now advective tracer trends70 !! ** Action : - update (pta) with the now advective tracer trends 71 71 !! 72 72 !! Reference : Shchepetkin, A. F., J. C. McWilliams, 2005, Ocean Modelling, 9, 347-404. … … 81 81 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk) :: pun, pvn, pwn ! 3 ocean velocity components 82 82 INTEGER , INTENT(in ) :: kjpt ! number of tracers 83 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk,kjpt) :: pt rab, ptran ! before and now tracer fields84 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pt raa ! tracer trend83 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk,kjpt) :: ptb, ptn ! before and now tracer fields 84 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend 85 85 !!* Local declarations 86 86 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 124 124 zeeu = e2u(ji,jj) * fse3u(ji,jj,jk) / e1u(ji,jj) * umask(ji,jj,jk) 125 125 zeev = e1v(ji,jj) * fse3v(ji,jj,jk) / e2v(ji,jj) * vmask(ji,jj,jk) 126 ztu(ji,jj,jk) = zeeu * ( pt rab(ji+1,jj ,jk,jn) - ptrab(ji,jj,jk,jn) )127 ztv(ji,jj,jk) = zeev * ( pt rab(ji ,jj+1,jk,jn) - ptrab(ji,jj,jk,jn) )126 ztu(ji,jj,jk) = zeeu * ( ptb(ji+1,jj ,jk,jn) - ptb(ji,jj,jk,jn) ) 127 ztv(ji,jj,jk) = zeev * ( ptb(ji ,jj+1,jk,jn) - ptb(ji,jj,jk,jn) ) 128 128 END DO 129 129 END DO … … 154 154 zfm_vj = pvn(ji,jj,jk) - ABS( pvn(ji,jj,jk) ) 155 155 ! centered scheme 156 zcenut = 0.5 * pun(ji,jj,jk) * ( pt ran(ji,jj,jk,jn) + ptran(ji+1,jj ,jk,jn) )157 zcenvt = 0.5 * pvn(ji,jj,jk) * ( pt ran(ji,jj,jk,jn) + ptran(ji ,jj+1,jk,jn) )156 zcenut = 0.5 * pun(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji+1,jj ,jk,jn) ) 157 zcenvt = 0.5 * pvn(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji ,jj+1,jk,jn) ) 158 158 ! UBS scheme 159 159 zwx(ji,jj,jk) = zcenut - zfp_ui * zltu(ji,jj,jk) - zfm_ui * zltu(ji+1,jj,jk) … … 163 163 ENDDO 164 164 165 zltu(:,:,:) = pt raa(:,:,:,jn) ! store ptraa trends165 zltu(:,:,:) = pta(:,:,:,jn) ! store pta trends 166 166 167 167 ! Horizontal advective trends … … 175 175 & + zwy(ji,jj,jk) - zwy(ji ,jj-1,jk) ) 176 176 ! add it to the general tracer trends 177 pt raa(ji,jj,jk,jn) = ptraa(ji,jj,jk,jn) + ztra177 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra 178 178 END DO 179 179 END DO … … 183 183 184 184 ! Horizontal trend used in tra_adv_ztvd subroutine 185 zltu(:,:,:) = pt raa(:,:,:,jn) - zltu(:,:,:)185 zltu(:,:,:) = pta(:,:,:,jn) - zltu(:,:,:) 186 186 187 187 ! 3. Save the horizontal advective trends for diagnostic … … 189 189 ! ! trend diagnostics (contribution of upstream fluxes) 190 190 IF( l_trd ) THEN 191 CALL trd_tra( kt, cdtype, jn, jpt ra_trd_xad, zwx, pun, ptran(:,:,:,jn) )192 CALL trd_tra( kt, cdtype, jn, jpt ra_trd_yad, zwy, pvn, ptran(:,:,:,jn) )191 CALL trd_tra( kt, cdtype, jn, jpt_trd_xad, zwx, pun, ptn(:,:,:,jn) ) 192 CALL trd_tra( kt, cdtype, jn, jpt_trd_yad, zwy, pvn, ptn(:,:,:,jn) ) 193 193 END IF 194 194 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) … … 209 209 ! TVD scheme for the vertical direction 210 210 ! ---------------------- 211 IF( l_trd ) zltv(:,:,:) = pt raa(:,:,:,jn) ! store pta if trend diag.211 IF( l_trd ) zltv(:,:,:) = pta(:,:,:,jn) ! store pta if trend diag. 212 212 213 213 ! Bottom value : flux set to zero … … 216 216 ! Surface value 217 217 IF( lk_vvl ) THEN ; ztw(:,:,1) = 0.e0 ! variable volume : flux set to zero 218 ELSE ; ztw(:,:,1) = pwn(:,:,1) * pt rab(:,:,1,jn) ! free constant surface218 ELSE ; ztw(:,:,1) = pwn(:,:,1) * ptb(:,:,1,jn) ! free constant surface 219 219 ENDIF 220 220 ! upstream advection with initial mass fluxes & intermediate update … … 226 226 zfp_wk = pwn(ji,jj,jk) + ABS( pwn(ji,jj,jk) ) 227 227 zfm_wk = pwn(ji,jj,jk) - ABS( pwn(ji,jj,jk) ) 228 ztw(ji,jj,jk) = 0.5 * ( zfp_wk * pt rab(ji,jj,jk,jn) + zfm_wk * ptrab(ji,jj,jk-1,jn) )228 ztw(ji,jj,jk) = 0.5 * ( zfp_wk * ptb(ji,jj,jk,jn) + zfm_wk * ptb(ji,jj,jk-1,jn) ) 229 229 END DO 230 230 END DO … … 237 237 zbtr = 1. / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 238 238 ztak = - ( ztw(ji,jj,jk) - ztw(ji,jj,jk+1) ) * zbtr 239 pt raa(ji,jj,jk,jn) = ptraa(ji,jj,jk,jn) + ztak240 zti(ji,jj,jk) = ( pt rab(ji,jj,jk,jn) + z2dtt * ( ztak + zltu(ji,jj,jk) ) ) * tmask(ji,jj,jk)239 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztak 240 zti(ji,jj,jk) = ( ptb(ji,jj,jk,jn) + z2dtt * ( ztak + zltu(ji,jj,jk) ) ) * tmask(ji,jj,jk) 241 241 END DO 242 242 END DO … … 250 250 DO jj = 1, jpj 251 251 DO ji = 1, jpi 252 ztw(ji,jj,jk) = 0.5 * pwn(ji,jj,jk) * ( pt ran(ji,jj,jk,jn) + ptran(ji,jj,jk-1,jn) ) - ztw(ji,jj,jk)252 ztw(ji,jj,jk) = 0.5 * pwn(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji,jj,jk-1,jn) ) - ztw(ji,jj,jk) 253 253 END DO 254 254 END DO 255 255 END DO 256 256 ! 257 CALL nonosc_z( pt rab(:,:,:,jn), ztw, zti, z2 ) ! monotonicity algorithm257 CALL nonosc_z( ptb(:,:,:,jn), ztw, zti, z2 ) ! monotonicity algorithm 258 258 259 259 ! final trend with corrected fluxes … … 265 265 ztra = - zbtr * ( ztw(ji,jj,jk) - ztw(ji,jj,jk+1) ) 266 266 ! added to the general tracer trends 267 pt raa(ji,jj,jk,jn) = ptraa(ji,jj,jk,jn) + ztra267 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra 268 268 END DO 269 269 END DO … … 277 277 zbtr = 1.e0 / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 278 278 z_hdivn = ( pwn(ji,jj,jk) - pwn(ji,jj,jk+1) ) * zbtr 279 zltv(ji,jj,jk) = pt raa(ji,jj,jk,jn) - zltv(ji,jj,jk) + ptran(ji,jj,jk,jn) * z_hdivn279 zltv(ji,jj,jk) = pta(ji,jj,jk,jn) - zltv(ji,jj,jk) + ptn(ji,jj,jk,jn) * z_hdivn 280 280 END DO 281 281 END DO 282 282 END DO 283 CALL trd_tra( kt, cdtype, jn, jpt ra_trd_zad, zltv )283 CALL trd_tra( kt, cdtype, jn, jpt_trd_zad, zltv ) 284 284 ENDIF 285 285 !
Note: See TracChangeset
for help on using the changeset viewer.