- 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/trazdf_exp.F90
r2024 r2034 40 40 # include "vectopt_loop_substitute.h90" 41 41 !!---------------------------------------------------------------------- 42 !! NEMO/OPA 3. 2 , LOCEAN-IPSL (2009)42 !! NEMO/OPA 3.3 , LOCEAN-IPSL (2010) 43 43 !! $Id$ 44 44 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) … … 47 47 CONTAINS 48 48 49 SUBROUTINE tra_zdf_exp( kt 50 & ptrab , ptraa , kjpt)49 SUBROUTINE tra_zdf_exp( kt, cdtype, p2dt, kn_zdfexp, & 50 & ptb , pta , kjpt ) 51 51 !!---------------------------------------------------------------------- 52 52 !! *** ROUTINE tra_zdf_exp *** … … 57 57 !! ** Method : - The after tracer fields due to the vertical diffusion 58 58 !! of tracers alone is given by: 59 !! zwx = pt rab + p2dt difft60 !! where difft = dz( avt dz(pt rab) ) = 1/e3t dk+1( avt/e3w dk(ptrab) )59 !! zwx = ptb + p2dt difft 60 !! where difft = dz( avt dz(ptb) ) = 1/e3t dk+1( avt/e3w dk(ptb) ) 61 61 !! (if lk_zdfddm=T use avs on salinity and passive tracers instead of avt) 62 62 !! difft is evaluated with an Euler split-explit scheme using a … … 65 65 !! - the after tracer fields due to the whole trend is 66 66 !! obtained in leap-frog environment by : 67 !! pt raa = zwx + p2dt ptraa67 !! pta = zwx + p2dt pta 68 68 !! - in case of variable level thickness (lk_vvl=T) the 69 69 !! the leap-frog is applied on thickness weighted tracer. That is: 70 !! pt raa = [ ptrab*e3tb + e3tn*( zwx - ptrab + p2dt ptraa ) ] / e3tn70 !! pta = [ ptb*e3tb + e3tn*( zwx - ptb + p2dt pta ) ] / e3tn 71 71 !! 72 72 !! ** Action : - after tracer fields pta 73 73 !!--------------------------------------------------------------------- 74 !! * Arguments74 !! 75 75 INTEGER , INTENT(in ) :: kt ! ocean time-step index 76 76 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) … … 78 78 INTEGER , INTENT(in ) :: kn_zdfexp ! number of sub-time step 79 79 REAL(wp) , INTENT(in ), DIMENSION(jpk) :: p2dt ! vertical profile of tracer time-step 80 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk,kjpt) :: pt rab ! before and now tracer fields81 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pt raa ! tracer trend82 !! * Local declarations80 REAL(wp) , INTENT(in ), DIMENSION(jpi,jpj,jpk,kjpt) :: ptb ! before and now tracer fields 81 REAL(wp) , INTENT(inout), DIMENSION(jpi,jpj,jpk,kjpt) :: pta ! tracer trend 82 !! 83 83 INTEGER :: ji, jj, jk, jn, jl ! dummy loop indices 84 84 REAL(wp) :: zlavmr, zave3r, ze3tr ! temporary scalars … … 103 103 zwy(:,:,jpk) = 0.e0 ! bottom boundary conditions: no flux 104 104 ! 105 zwx(:,:,:) = pt rab(:,:,:,jn) ! zwx array set to before tracer values105 zwx(:,:,:) = ptb(:,:,:,jn) ! zwx array set to before tracer values 106 106 107 107 ! Split-explicit loop (after tracer due to the vertical diffusion alone) … … 141 141 DO ji = fs_2, fs_jpim1 ! vector opt. 142 142 ze3tb = fse3t_b(ji,jj,jk) / fse3t(ji,jj,jk) ! before e3t 143 ztra = zwx(ji,jj,jk) - pt rab(ji,jj,jk,jn) + p2dt(jk) * ptraa(ji,jj,jk,jn) ! total trends * 2*rdt144 pt raa(ji,jj,jk,jn) = ( ze3tb * ptrab(ji,jj,jk,jn) + ztra ) * tmask(ji,jj,jk)143 ztra = zwx(ji,jj,jk) - ptb(ji,jj,jk,jn) + p2dt(jk) * pta(ji,jj,jk,jn) ! total trends * 2*rdt 144 pta(ji,jj,jk,jn) = ( ze3tb * ptb(ji,jj,jk,jn) + ztra ) * tmask(ji,jj,jk) 145 145 END DO 146 146 END DO … … 150 150 DO jj = 2, jpjm1 151 151 DO ji = fs_2, fs_jpim1 ! vector opt. 152 pt raa(ji,jj,jk,jn) = ( zwx(ji,jj,jk) + p2dt(jk) * ptraa(ji,jj,jk,jn) ) * tmask(ji,jj,jk)152 pta(ji,jj,jk,jn) = ( zwx(ji,jj,jk) + p2dt(jk) * pta(ji,jj,jk,jn) ) * tmask(ji,jj,jk) 153 153 END DO 154 154 END DO
Note: See TracChangeset
for help on using the changeset viewer.