- 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_cen2.F90
r2024 r2034 47 47 # include "vectopt_loop_substitute.h90" 48 48 !!---------------------------------------------------------------------- 49 !! NEMO/OPA 3. 2 , LOCEAN-IPSL (2009)49 !! NEMO/OPA 3.3 , LOCEAN-IPSL (2010) 50 50 !! $Id$ 51 51 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) … … 54 54 CONTAINS 55 55 56 SUBROUTINE tra_adv_cen2( kt , cdtype, pun, pvn, pwn, &57 & ptrab, ptran , ptraa, kjpt )56 SUBROUTINE tra_adv_cen2( kt, cdtype, pun, pvn, pwn, & 57 & ptb, ptn, pta, kjpt ) 58 58 !!---------------------------------------------------------------------- 59 59 !! *** ROUTINE tra_adv_cen2 *** … … 71 71 !! Part I : horizontal advection 72 72 !! * centered flux: 73 !! zcenu = e2u*e3u un mi(pt ran)74 !! zcenv = e1v*e3v vn mj(pt ran)73 !! zcenu = e2u*e3u un mi(ptn) 74 !! zcenv = e1v*e3v vn mj(ptn) 75 75 !! * upstream flux: 76 !! zupsu = e2u*e3u un (pt rab(i) or ptrab(i-1) ) [un>0 or <0]77 !! zupsv = e1v*e3v vn (pt rab(j) or ptrab(j-1) ) [vn>0 or <0]76 !! zupsu = e2u*e3u un (ptb(i) or ptb(i-1) ) [un>0 or <0] 77 !! zupsv = e1v*e3v vn (ptb(j) or ptb(j-1) ) [vn>0 or <0] 78 78 !! * mixed upstream / centered horizontal advection scheme 79 79 !! zcofi = max(zind(i+1), zind(i)) … … 84 84 !! ztra = 1/(e1t*e2t*e3t) { di-1[zwx] + dj-1[zwy] } 85 85 !! * Add this trend now to the general trend of tracer (ta,sa): 86 !! pt raa = ptraa + ztra86 !! pta = pta + ztra 87 87 !! * trend diagnostic ('key_trdtra' defined): the trend is 88 88 !! saved for diagnostics. The trends saved is expressed as 89 89 !! Uh.gradh(T), i.e. 90 !! save trend = ztra + pt ran divn90 !! save trend = ztra + ptn divn 91 91 !! 92 92 !! Part II : vertical advection … … 97 97 !! zwz = zcofk * zupst + (1-zcofk) * zcent 98 98 !! with 99 !! zupsv = upstream flux = wn * (pt rab(k) or ptrab(k-1) ) [wn>0 or <0]99 !! zupsv = upstream flux = wn * (ptb(k) or ptb(k-1) ) [wn>0 or <0] 100 100 !! zcenu = centered flux = wn * mk(tn) 101 101 !! The surface boundary condition is : 102 102 !! variable volume (lk_vvl = T) : zero advective flux 103 !! lin. free-surf (lk_vvl = F) : wn(:,:,1) * pt ran(:,:,1)103 !! lin. free-surf (lk_vvl = F) : wn(:,:,1) * ptn(:,:,1) 104 104 !! Add this trend now to the general trend of tracer (ta,sa): 105 !! pt raa = ptraa + ztra105 !! pta = pta + ztra 106 106 !! Trend diagnostic ('key_trdtra' defined): the trend is 107 107 !! saved for diagnostics. The trends saved is expressed as : 108 !! save trend = w.gradz(T) = ztra - pt ran divn.109 !! 110 !! ** Action : - update pt raa with the now advective tracer trends108 !! save trend = w.gradz(T) = ztra - ptn divn. 109 !! 110 !! ** Action : - update pta with the now advective tracer trends 111 111 !! - save trends if needed 112 112 !!---------------------------------------------------------------------- 113 !!* Module used114 113 USE oce , zwx => ua ! use ua as workspace 115 114 USE oce , zwy => va ! use va as workspace 116 !! * Arguments115 !! 117 116 INTEGER , INTENT(in ) :: kt ! ocean time-step index 118 117 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 119 118 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk) :: pun, pvn, pwn ! 3 ocean velocity components 120 119 INTEGER , INTENT(in ) :: kjpt ! number of tracers 121 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk,kjpt) :: pt rab, ptran ! before and now tracer fields122 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pt raa ! tracer trend123 !! * Local declarations120 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk,kjpt) :: ptb, ptn ! before and now tracer fields 121 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend 122 !! 124 123 INTEGER :: ji, jj, jk, jn ! dummy loop indices 125 124 REAL(wp) :: zbtr, ztra ! temporary scalars … … 196 195 zfp_vj = pvn(ji,jj,jk) + ABS( pvn(ji,jj,jk) ) 197 196 zfm_vj = pvn(ji,jj,jk) - ABS( pvn(ji,jj,jk) ) 198 zupsut = zfp_ui * pt rab(ji,jj,jk,jn) + zfm_ui * ptrab(ji+1,jj ,jk,jn)199 zupsvt = zfp_vj * pt rab(ji,jj,jk,jn) + zfm_vj * ptrab(ji ,jj+1,jk,jn)197 zupsut = zfp_ui * ptb(ji,jj,jk,jn) + zfm_ui * ptb(ji+1,jj ,jk,jn) 198 zupsvt = zfp_vj * ptb(ji,jj,jk,jn) + zfm_vj * ptb(ji ,jj+1,jk,jn) 200 199 ! centered scheme 201 zcenut = pun(ji,jj,jk) * ( pt ran(ji,jj,jk,jn) + ptran(ji+1,jj ,jk,jn) )202 zcenvt = pvn(ji,jj,jk) * ( pt ran(ji,jj,jk,jn) + ptran(ji ,jj+1,jk,jn) )200 zcenut = pun(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji+1,jj ,jk,jn) ) 201 zcenvt = pvn(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji ,jj+1,jk,jn) ) 203 202 ! mixed centered / upstream scheme 204 203 zwx(ji,jj,jk) = 0.5 * ( zcofi * zupsut + (1.-zcofi) * zcenut ) … … 215 214 ! ! Surface value : 216 215 IF( lk_vvl ) THEN ; zwz(:,:, 1 ) = 0.e0 ! volume variable 217 ELSE ; zwz(:,:, 1 ) = pwn(:,:,1) * pt ran(:,:,1,jn) ! linear free surface216 ELSE ; zwz(:,:, 1 ) = pwn(:,:,1) * ptn(:,:,1,jn) ! linear free surface 218 217 ENDIF 219 218 ! … … 226 225 zfp_w = pwn(ji,jj,jk) + ABS( pwn(ji,jj,jk) ) 227 226 zfm_w = pwn(ji,jj,jk) - ABS( pwn(ji,jj,jk) ) 228 zupst = zfp_w * pt rab(ji,jj,jk,jn) + zfm_w * ptrab(ji,jj,jk-1,jn)227 zupst = zfp_w * ptb(ji,jj,jk,jn) + zfm_w * ptb(ji,jj,jk-1,jn) 229 228 ! centered scheme 230 zcent = pwn(ji,jj,jk) * ( pt ran(ji,jj,jk,jn) + ptran(ji,jj,jk-1,jn) )229 zcent = pwn(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji,jj,jk-1,jn) ) 231 230 ! mixed centered / upstream scheme 232 231 zwz(ji,jj,jk) = 0.5 * ( zcofk * zupst + (1.-zcofk) * zcent ) … … 246 245 & + zwz(ji,jj,jk) - zwz(ji ,jj ,jk+1) ) 247 246 ! advective trends added to the general tracer trends 248 pt raa(ji,jj,jk,jn) = ptraa(ji,jj,jk,jn) + ztra247 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra 249 248 END DO 250 249 END DO … … 253 252 ! ! trend diagnostics (contribution of upstream fluxes) 254 253 IF( l_trd ) THEN 255 CALL trd_tra( kt, cdtype, jn, jptra_trd_xad, zwx, pun, pt ran(:,:,:,jn) )256 CALL trd_tra( kt, cdtype, jn, jptra_trd_yad, zwy, pvn, pt ran(:,:,:,jn) )257 CALL trd_tra( kt, cdtype, jn, jptra_trd_zad, zwz, pwn, pt ran(:,:,:,jn) )254 CALL trd_tra( kt, cdtype, jn, jptra_trd_xad, zwx, pun, ptn(:,:,:,jn) ) 255 CALL trd_tra( kt, cdtype, jn, jptra_trd_yad, zwy, pvn, ptn(:,:,:,jn) ) 256 CALL trd_tra( kt, cdtype, jn, jptra_trd_zad, zwz, pwn, ptn(:,:,:,jn) ) 258 257 END IF 259 258 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes)
Note: See TracChangeset
for help on using the changeset viewer.