- 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_tvd.F90
r2024 r2034 8 8 !! ! 00-10 (MA Foujols E.Kestenare) include file not routine 9 9 !! ! 00-12 (E. Kestenare M. Levy) fix bug in trtrd indexes 10 !! ! 01-07 (E. Durand G. Madec) adapt raation to ORCA config10 !! ! 01-07 (E. Durand G. Madec) adaptation to ORCA config 11 11 !! 8.5 ! 02-06 (G. Madec) F90: Free form and module 12 12 !! 9.0 ! 04-01 (A. de Miranda, G. Madec, J.M. Molines ): advective bbl 13 13 !! 9.0 ! 08-04 (S. Cravatte) add the i-, j- & k- trends computation 14 14 !! " " ! 09-11 (V. Garnier) Surface pressure gradient organization 15 !! 3.3 ! 10-05 (C. Ethe, G. Madec) merge TRC-TRA + switch from velocity to transport15 !! 3.3 ! 10-05 (C. Ethe, G. Madec) merge TRC-TRA + switch from velocity to transport 16 16 !!---------------------------------------------------------------------- 17 17 … … 45 45 # include "vectopt_loop_substitute.h90" 46 46 !!---------------------------------------------------------------------- 47 !! OPA 9.0 , LOCEAN-IPSL (2006)47 !! NEMO/OPA 3.3 , LOCEAN-IPSL (2010) 48 48 !! $Id$ 49 49 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) … … 52 52 CONTAINS 53 53 54 SUBROUTINE tra_adv_tvd ( kt , cdtype, pun, pvn, pwn, &55 & ptrab, ptran , ptraa, kjpt )54 SUBROUTINE tra_adv_tvd ( kt, cdtype, pun, pvn, pwn, & 55 & ptb, ptn, pta, kjpt ) 56 56 !!---------------------------------------------------------------------- 57 57 !! *** ROUTINE tra_adv_tvd *** … … 64 64 !! note: - this advection scheme needs a leap-frog time scheme 65 65 !! 66 !! ** Action : - update (pt raa) with the now advective tracer trends66 !! ** Action : - update (pta) with the now advective tracer trends 67 67 !! - save the trends 68 68 !!---------------------------------------------------------------------- 69 !!* Module used70 69 USE oce , zwx => ua ! use ua as workspace 71 70 USE oce , zwy => va ! use va as workspace 72 !! * Arguments71 !! 73 72 INTEGER , INTENT(in ) :: kt ! ocean time-step index 74 73 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 75 74 INTEGER , INTENT(in ) :: kjpt ! number of tracers 76 75 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk) :: pun, pvn, pwn ! 3 ocean velocity components 77 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk,kjpt) :: pt rab, ptran ! before and now tracer fields78 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pt raa ! tracer trend79 !! * Local declarations76 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk,kjpt) :: ptb, ptn ! before and now tracer fields 77 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend 78 !! 80 79 INTEGER :: ji, jj, jk, jn ! dummy loop indices 81 80 REAL(wp) :: & … … 127 126 zfp_vj = pvn(ji,jj,jk) + ABS( pvn(ji,jj,jk) ) 128 127 zfm_vj = pvn(ji,jj,jk) - ABS( pvn(ji,jj,jk) ) 129 zwx(ji,jj,jk) = 0.5 * ( zfp_ui * pt rab(ji,jj,jk,jn) + zfm_ui * ptrab(ji+1,jj ,jk,jn) )130 zwy(ji,jj,jk) = 0.5 * ( zfp_vj * pt rab(ji,jj,jk,jn) + zfm_vj * ptrab(ji ,jj+1,jk,jn) )128 zwx(ji,jj,jk) = 0.5 * ( zfp_ui * ptb(ji,jj,jk,jn) + zfm_ui * ptb(ji+1,jj ,jk,jn) ) 129 zwy(ji,jj,jk) = 0.5 * ( zfp_vj * ptb(ji,jj,jk,jn) + zfm_vj * ptb(ji ,jj+1,jk,jn) ) 131 130 END DO 132 131 END DO … … 136 135 ! Surface value 137 136 IF( lk_vvl ) THEN ; zwz(:,:, 1 ) = 0.e0 ! volume variable 138 ELSE ; zwz(:,:, 1 ) = pwn(:,:,1) * pt rab(:,:,1,jn) ! linear free surface137 ELSE ; zwz(:,:, 1 ) = pwn(:,:,1) * ptb(:,:,1,jn) ! linear free surface 139 138 ENDIF 140 139 ! Interior value … … 144 143 zfp_wk = pwn(ji,jj,jk) + ABS( pwn(ji,jj,jk) ) 145 144 zfm_wk = pwn(ji,jj,jk) - ABS( pwn(ji,jj,jk) ) 146 zwz(ji,jj,jk) = 0.5 * ( zfp_wk * pt rab(ji,jj,jk,jn) + zfm_wk * ptrab(ji,jj,jk-1,jn) )145 zwz(ji,jj,jk) = 0.5 * ( zfp_wk * ptb(ji,jj,jk,jn) + zfm_wk * ptb(ji,jj,jk-1,jn) ) 147 146 END DO 148 147 END DO … … 160 159 & + zwz(ji,jj,jk) - zwz(ji ,jj ,jk+1) ) 161 160 ! update and guess with monotonic sheme 162 pt raa(ji,jj,jk,jn) = ptraa(ji,jj,jk,jn) + ztra163 zwi(ji,jj,jk) = ( pt rab(ji,jj,jk,jn) + z2dtt * ztra ) * tmask(ji,jj,jk)161 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra 162 zwi(ji,jj,jk) = ( ptb(ji,jj,jk,jn) + z2dtt * ztra ) * tmask(ji,jj,jk) 164 163 END DO 165 164 END DO … … 185 184 DO jj = 1, jpjm1 186 185 DO ji = 1, fs_jpim1 ! vector opt. 187 zwx(ji,jj,jk) = 0.5 * pun(ji,jj,jk) * ( pt ran(ji,jj,jk,jn) + ptran(ji+1,jj,jk,jn) ) - zwx(ji,jj,jk)188 zwy(ji,jj,jk) = 0.5 * pvn(ji,jj,jk) * ( pt ran(ji,jj,jk,jn) + ptran(ji,jj+1,jk,jn) ) - zwy(ji,jj,jk)186 zwx(ji,jj,jk) = 0.5 * pun(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji+1,jj,jk,jn) ) - zwx(ji,jj,jk) 187 zwy(ji,jj,jk) = 0.5 * pvn(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji,jj+1,jk,jn) ) - zwy(ji,jj,jk) 189 188 END DO 190 189 END DO … … 198 197 DO jj = 1, jpj 199 198 DO ji = 1, jpi 200 zwz(ji,jj,jk) = 0.5 * pwn(ji,jj,jk) * ( pt ran(ji,jj,jk,jn) + ptran(ji,jj,jk-1,jn) ) - zwz(ji,jj,jk)199 zwz(ji,jj,jk) = 0.5 * pwn(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji,jj,jk-1,jn) ) - zwz(ji,jj,jk) 201 200 END DO 202 201 END DO … … 210 209 ! 4. monotonicity algorithm 211 210 ! ------------------------- 212 CALL nonosc( pt rab(:,:,:,jn), zwx, zwy, zwz, zwi, z2 )211 CALL nonosc( ptb(:,:,:,jn), zwx, zwy, zwz, zwi, z2 ) 213 212 214 213 … … 224 223 & + zwz(ji,jj,jk) - zwz(ji ,jj ,jk+1) ) 225 224 ! add them to the general tracer trends 226 pt raa(ji,jj,jk,jn) = ptraa(ji,jj,jk,jn) + ztra225 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra 227 226 END DO 228 227 END DO … … 235 234 ztrdz(:,:,:) = ztrdz(:,:,:) + zwz(:,:,:) ! <<< Add to previously computed 236 235 237 CALL trd_tra( kt, cdtype, jn, jpt ra_trd_xad, ztrdx, pun, ptran(:,:,:,jn) )238 CALL trd_tra( kt, cdtype, jn, jpt ra_trd_yad, ztrdy, pvn, ptran(:,:,:,jn) )239 CALL trd_tra( kt, cdtype, jn, jpt ra_trd_zad, ztrdz, pwn, ptran(:,:,:,jn) )236 CALL trd_tra( kt, cdtype, jn, jpt_trd_xad, ztrdx, pun, ptn(:,:,:,jn) ) 237 CALL trd_tra( kt, cdtype, jn, jpt_trd_yad, ztrdy, pvn, ptn(:,:,:,jn) ) 238 CALL trd_tra( kt, cdtype, jn, jpt_trd_zad, ztrdz, pwn, ptn(:,:,:,jn) ) 240 239 END IF 241 240 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes)
Note: See TracChangeset
for help on using the changeset viewer.