- 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_muscl.F90
r2024 r2034 37 37 # include "vectopt_loop_substitute.h90" 38 38 !!---------------------------------------------------------------------- 39 !! OPA 9.0 , LOCEAN-IPSL (2006)39 !! NEMO/OPA 3.3 , LOCEAN-IPSL (2010) 40 40 !! $Id$ 41 41 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) … … 44 44 CONTAINS 45 45 46 SUBROUTINE tra_adv_muscl( kt 47 & ptrab, ptraa, kjpt )46 SUBROUTINE tra_adv_muscl( kt, cdtype, pun, pvn, pwn, & 47 & ptb, pta, kjpt ) 48 48 !!---------------------------------------------------------------------- 49 49 !! *** ROUTINE tra_adv_muscl *** … … 61 61 !! IPSL, Sept. 2000 (http://www.lodyc.jussieu.fr/opa) 62 62 !!---------------------------------------------------------------------- 63 !!* Module used64 63 USE oce , zwx => ua ! use ua as workspace 65 64 USE oce , zwy => va ! use va as workspace 66 !! * Arguments65 !! 67 66 INTEGER , INTENT(in ) :: kt ! ocean time-step index 68 67 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 69 68 INTEGER , INTENT(in ) :: kjpt ! number of tracers 70 69 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk) :: pun, pvn, pwn ! 3 ocean velocity components 71 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk,kjpt) :: pt rab ! before and now tracer fields72 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pt raa ! tracer trend73 !! * Local declarations70 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk,kjpt) :: ptb ! before and now tracer fields 71 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend 72 !! 74 73 INTEGER :: ji, jj, jk, jn ! dummy loop indices 75 74 REAL(wp) :: zu, z0u, zzwx … … 104 103 DO jj = 1, jpjm1 105 104 DO ji = 1, fs_jpim1 ! vector opt. 106 zwx(ji,jj,jk) = umask(ji,jj,jk) * ( pt rab(ji+1,jj,jk,jn) - ptrab(ji,jj,jk,jn) )107 zwy(ji,jj,jk) = vmask(ji,jj,jk) * ( pt rab(ji,jj+1,jk,jn) - ptrab(ji,jj,jk,jn) )105 zwx(ji,jj,jk) = umask(ji,jj,jk) * ( ptb(ji+1,jj,jk,jn) - ptb(ji,jj,jk,jn) ) 106 zwy(ji,jj,jk) = vmask(ji,jj,jk) * ( ptb(ji,jj+1,jk,jn) - ptb(ji,jj,jk,jn) ) 108 107 END DO 109 108 END DO … … 147 146 zalpha = 0.5 - z0u 148 147 zu = z0u - 0.5 * pun(ji,jj,jk) * zdt / ( e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) ) 149 zzwx = pt rab(ji+1,jj,jk,jn) + zu * zslpx(ji+1,jj,jk)150 zzwy = pt rab(ji ,jj,jk,jn) + zu * zslpx(ji ,jj,jk)148 zzwx = ptb(ji+1,jj,jk,jn) + zu * zslpx(ji+1,jj,jk) 149 zzwy = ptb(ji ,jj,jk,jn) + zu * zslpx(ji ,jj,jk) 151 150 zwx(ji,jj,jk) = pun(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 152 151 ! … … 154 153 zalpha = 0.5 - z0v 155 154 zv = z0v - 0.5 * pvn(ji,jj,jk) * zdt / ( e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) ) 156 zzwx = pt rab(ji,jj+1,jk,jn) + zv * zslpy(ji,jj+1,jk)157 zzwy = pt rab(ji,jj ,jk,jn) + zv * zslpy(ji,jj ,jk)155 zzwx = ptb(ji,jj+1,jk,jn) + zv * zslpy(ji,jj+1,jk) 156 zzwy = ptb(ji,jj ,jk,jn) + zv * zslpy(ji,jj ,jk) 158 157 zwy(ji,jj,jk) = pvn(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 159 158 END DO … … 172 171 & + zwy(ji,jj,jk) - zwy(ji ,jj-1,jk ) ) 173 172 ! add it to the general tracer trends 174 pt raa(ji,jj,jk,jn) = ptraa(ji,jj,jk,jn) + ztra173 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra 175 174 END DO 176 175 END DO … … 178 177 ! ! trend diagnostics (contribution of upstream fluxes) 179 178 IF( l_trd ) THEN 180 CALL trd_tra( kt, cdtype, jn, jpt ra_trd_xad, zwx, pun, ptrab(:,:,:,jn) )181 CALL trd_tra( kt, cdtype, jn, jpt ra_trd_yad, zwy, pvn, ptrab(:,:,:,jn) )179 CALL trd_tra( kt, cdtype, jn, jpt_trd_xad, zwx, pun, ptb(:,:,:,jn) ) 180 CALL trd_tra( kt, cdtype, jn, jpt_trd_yad, zwy, pvn, ptb(:,:,:,jn) ) 182 181 END IF 183 182 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) … … 201 200 zwx (:,:, 1 ) = 0.e0 ; zwx (:,:,jpk) = 0.e0 ! surface & bottom boundary conditions 202 201 DO jk = 2, jpkm1 ! interior values 203 zwx(:,:,jk) = tmask(:,:,jk) * ( pt rab(:,:,jk-1,jn) - ptrab(:,:,jk,jn) )202 zwx(:,:,jk) = tmask(:,:,jk) * ( ptb(:,:,jk-1,jn) - ptb(:,:,jk,jn) ) 204 203 END DO 205 204 … … 227 226 ! ! surface values (bottom already set to zero) 228 227 IF( lk_vvl ) THEN ; zwx(:,:, 1 ) = 0.e0 ! variable volume 229 ELSE ; zwx(:,:, 1 ) = pwn(:,:,1) * pt rab(:,:,1,jn) ! linear free surface228 ELSE ; zwx(:,:, 1 ) = pwn(:,:,1) * ptb(:,:,1,jn) ! linear free surface 230 229 ENDIF 231 230 ! … … 238 237 zalpha = 0.5 + z0w 239 238 zw = z0w - 0.5 * pwn(ji,jj,jk+1) * zdt * zbtr 240 zzwx = pt rab(ji,jj,jk+1,jn) + zw * zslpx(ji,jj,jk+1)241 zzwy = pt rab(ji,jj,jk ,jn) + zw * zslpx(ji,jj,jk )239 zzwx = ptb(ji,jj,jk+1,jn) + zw * zslpx(ji,jj,jk+1) 240 zzwy = ptb(ji,jj,jk ,jn) + zw * zslpx(ji,jj,jk ) 242 241 zwx(ji,jj,jk+1) = pwn(ji,jj,jk+1) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 243 242 END DO … … 253 252 ztra = - zbtr * ( zwx(ji,jj,jk) - zwx(ji,jj,jk+1) ) 254 253 ! add it to the general tracer trends 255 pt raa(ji,jj,jk,jn) = ptraa(ji,jj,jk,jn) + ztra254 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra 256 255 END DO 257 256 END DO 258 257 END DO 259 258 ! ! Save the vertical advective trends for diagnostic 260 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jpt ra_trd_zad, zwx, pwn, ptrab(:,:,:,jn) )259 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jpt_trd_zad, zwx, pwn, ptb(:,:,:,jn) ) 261 260 ! 262 261 ENDDO
Note: See TracChangeset
for help on using the changeset viewer.