- 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_muscl2.F90
r2024 r2034 36 36 # include "vectopt_loop_substitute.h90" 37 37 !!---------------------------------------------------------------------- 38 !! OPA 9.0 , LOCEAN-IPSL (2006)38 !! NEMO/OPA 3.3 , LOCEAN-IPSL (2010) 39 39 !! $Id$ 40 40 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) … … 43 43 CONTAINS 44 44 45 SUBROUTINE tra_adv_muscl2( kt , cdtype, pun, pvn, pwn, &46 & ptrab, ptran , ptraa, kjpt )45 SUBROUTINE tra_adv_muscl2( kt, cdtype, pun, pvn, pwn, & 46 & ptb, ptn, pta, kjpt ) 47 47 !!---------------------------------------------------------------------- 48 48 !! *** ROUTINE tra_adv_muscl2 *** … … 54 54 !! ** Method : MUSCL scheme plus centered scheme at ocean boundaries 55 55 !! 56 !! ** Action : - update (pt raa) with the now advective tracer trends56 !! ** Action : - update (pta) with the now advective tracer trends 57 57 !! - save trends 58 58 !! … … 68 68 INTEGER , INTENT(in ) :: kjpt ! number of tracers 69 69 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk) :: pun, pvn, pwn ! 3 ocean velocity components 70 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk,kjpt) :: pt rab, ptran ! before and now tracer fields71 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pt raa ! tracer trend70 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk,kjpt) :: ptb, ptn ! before and now tracer fields 71 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend 72 72 !!* Local declarations 73 73 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 103 103 DO jj = 1, jpjm1 104 104 DO ji = 1, fs_jpim1 ! vector opt. 105 zwx(ji,jj,jk) = umask(ji,jj,jk) * ( pt rab(ji+1,jj,jk,jn) - ptrab(ji,jj,jk,jn) )106 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) ) 107 107 END DO 108 108 END DO … … 146 146 zalpha = 0.5 - z0u 147 147 zu = z0u - 0.5 * pun(ji,jj,jk) * zdt / ( e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) ) 148 zzwx = pt rab(ji+1,jj,jk,jn) + zu * zslpx(ji+1,jj,jk)149 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) 150 150 zwx(ji,jj,jk) = pun(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 151 151 ! … … 153 153 zalpha = 0.5 - z0v 154 154 zv = z0v - 0.5 * pvn(ji,jj,jk) * zdt / ( e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) ) 155 zzwx = pt rab(ji,jj+1,jk,jn) + zv * zslpy(ji,jj+1,jk)156 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) 157 157 zwy(ji,jj,jk) = pvn(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 158 158 END DO … … 166 166 IF( umask(ji,jj,jk) == 0. ) THEN 167 167 IF( pun(ji+1,jj,jk) > 0. .AND. ji /= jpi ) THEN 168 zwx(ji+1,jj,jk) = 0.5 * pun(ji+1,jj,jk) * ( pt ran(ji+1,jj,jk,jn) + ptran(ji+2,jj,jk,jn) )168 zwx(ji+1,jj,jk) = 0.5 * pun(ji+1,jj,jk) * ( ptn(ji+1,jj,jk,jn) + ptn(ji+2,jj,jk,jn) ) 169 169 ENDIF 170 170 IF( pun(ji-1,jj,jk) < 0. ) THEN 171 zwx(ji-1,jj,jk) = 0.5 * pun(ji-1,jj,jk) * ( pt ran(ji-1,jj,jk,jn) + ptran(ji,jj,jk,jn) )171 zwx(ji-1,jj,jk) = 0.5 * pun(ji-1,jj,jk) * ( ptn(ji-1,jj,jk,jn) + ptn(ji,jj,jk,jn) ) 172 172 ENDIF 173 173 ENDIF 174 174 IF( vmask(ji,jj,jk) == 0. ) THEN 175 175 IF( pvn(ji,jj+1,jk) > 0. .AND. jj /= jpj ) THEN 176 zwy(ji,jj+1,jk) = 0.5 * pvn(ji,jj+1,jk) * ( pt ran(ji,jj+1,jk,jn) + ptran(ji,jj+2,jk,jn) )176 zwy(ji,jj+1,jk) = 0.5 * pvn(ji,jj+1,jk) * ( ptn(ji,jj+1,jk,jn) + ptn(ji,jj+2,jk,jn) ) 177 177 ENDIF 178 178 IF( pvn(ji,jj-1,jk) < 0. ) THEN 179 zwy(ji,jj-1,jk) = 0.5 * pvn(ji,jj-1,jk) * ( pt ran(ji,jj-1,jk,jn) + ptran(ji,jj,jk,jn) )179 zwy(ji,jj-1,jk) = 0.5 * pvn(ji,jj-1,jk) * ( ptn(ji,jj-1,jk,jn) + ptn(ji,jj,jk,jn) ) 180 180 ENDIF 181 181 ENDIF … … 195 195 & + zwy(ji,jj,jk) - zwy(ji ,jj-1,jk ) ) 196 196 ! added to the general tracer trends 197 pt raa(ji,jj,jk,jn) = ptraa(ji,jj,jk,jn) + ztra197 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra 198 198 END DO 199 199 END DO … … 201 201 ! ! trend diagnostics (contribution of upstream fluxes) 202 202 IF( l_trd ) THEN 203 CALL trd_tra( kt, cdtype, jn, jpt ra_trd_xad, zwx, pun, ptrab(:,:,:,jn) )204 CALL trd_tra( kt, cdtype, jn, jpt ra_trd_yad, zwy, pvn, ptrab(:,:,:,jn) )203 CALL trd_tra( kt, cdtype, jn, jpt_trd_xad, zwx, pun, ptb(:,:,:,jn) ) 204 CALL trd_tra( kt, cdtype, jn, jpt_trd_yad, zwy, pvn, ptb(:,:,:,jn) ) 205 205 END IF 206 206 … … 225 225 zwx (:,:, 1 ) = 0.e0 ; zwx (:,:,jpk) = 0.e0 ! surface & bottom boundary conditions 226 226 DO jk = 2, jpkm1 ! interior values 227 zwx(:,:,jk) = tmask(:,:,jk) * ( pt rab(:,:,jk-1,jn) - ptrab(:,:,jk,jn) )227 zwx(:,:,jk) = tmask(:,:,jk) * ( ptb(:,:,jk-1,jn) - ptb(:,:,jk,jn) ) 228 228 END DO 229 229 … … 251 251 ! ! surface values (bottom already set to zero) 252 252 IF( lk_vvl ) THEN ; zwx(:,:, 1 ) = 0.e0 ! variable volume 253 ELSE ; zwx(:,:, 1 ) = pwn(:,:,1) * pt rab(:,:,1,jn) ! linear free surface253 ELSE ; zwx(:,:, 1 ) = pwn(:,:,1) * ptb(:,:,1,jn) ! linear free surface 254 254 ENDIF 255 255 ! … … 262 262 zalpha = 0.5 + z0w 263 263 zw = z0w - 0.5 * pwn(ji,jj,jk+1) * zdt * zbtr 264 zzwx = pt rab(ji,jj,jk+1,jn) + zw * zslpx(ji,jj,jk+1)265 zzwy = pt rab(ji,jj,jk ,jn) + zw * zslpx(ji,jj,jk )264 zzwx = ptb(ji,jj,jk+1,jn) + zw * zslpx(ji,jj,jk+1) 265 zzwy = ptb(ji,jj,jk ,jn) + zw * zslpx(ji,jj,jk ) 266 266 zwx(ji,jj,jk+1) = pwn(ji,jj,jk+1) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 267 267 END DO … … 274 274 IF( tmask(ji,jj,jk+1) == 0. ) THEN 275 275 IF( pwn(ji,jj,jk) > 0. ) THEN 276 zwx(ji,jj,jk) = 0.5 * pwn(ji,jj,jk) * ( pt ran(ji,jj,jk-1,jn) + ptran(ji,jj,jk,jn) )276 zwx(ji,jj,jk) = 0.5 * pwn(ji,jj,jk) * ( ptn(ji,jj,jk-1,jn) + ptn(ji,jj,jk,jn) ) 277 277 ENDIF 278 278 ENDIF … … 289 289 ztra = - zbtr * ( zwx(ji,jj,jk) - zwx(ji,jj,jk+1) ) 290 290 ! added to the general tracer trends 291 pt raa(ji,jj,jk,jn) = ptraa(ji,jj,jk,jn) + ztra291 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra 292 292 END DO 293 293 END DO … … 297 297 ! ------------------------------------------------- 298 298 ! ! trend diagnostics (contribution of upstream fluxes) 299 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jpt ra_trd_zad, zwx, pwn, ptrab(:,:,:,jn) )299 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jpt_trd_zad, zwx, pwn, ptb(:,:,:,jn) ) 300 300 ! 301 301 ENDDO
Note: See TracChangeset
for help on using the changeset viewer.