Changeset 791 for branches/dev_001_GM/NEMO/OPA_SRC/TRA/traadv_eiv.F90
- Timestamp:
- 2008-01-12T21:33:34+01:00 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/dev_001_GM/NEMO/OPA_SRC/TRA/traadv_eiv.F90
r719 r791 5 5 !!====================================================================== 6 6 !! History : 9.0 ! 05-11 (G. Madec) Original code, from traldf and zdf _iso 7 !! 2.4 ! 2008-01 (G. Madec) merge TRC-TRA + switch from velocity to transport 7 8 !!---------------------------------------------------------------------- 8 9 #if defined key_traldf_eiv || defined key_esopa … … 32 33 # include "vectopt_loop_substitute.h90" 33 34 !!---------------------------------------------------------------------- 34 !! OPA 9.0 , LOCEAN-IPSL (2006)35 !! $ Header$35 !! NEMO/OPA 2.4 , LOCEAN-IPSL (2008) 36 !! $Id:$ 36 37 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 37 38 !!---------------------------------------------------------------------- … … 43 44 !! *** ROUTINE tra_adv_eiv *** 44 45 !! 45 !! ** Purpose : Compute the before horizontal tracer (t & s) diffusive46 !! trend and add it to the general trend of tracer equation.47 !! 48 !! ** Method : The eddy induced advectionis computed from the slope46 !! ** Purpose : Compute the eddy induced transport and add it to the 47 !! effective transport 48 !! 49 !! ** Method : The eddy induced transport is computed from the slope 49 50 !! of iso-neutral surfaces computed in routine ldf_slp as follows: 50 !! zu_eiv = 1/(e2u e3u) dk[ aeiu e2u mi(wslpi) ] 51 !! zv_eiv = 1/(e1v e3v) dk[ aeiv e1v mj(wslpj) 52 !! zw_eiv = -1/(e1t e2t) { di[ aeiu e2u mi(wslpi) ] 53 !! + dj[ aeiv e1v mj(wslpj) ] } 51 !! zu_eiv = dk[ aeiu e2u mi(wslpi) ] 52 !! zv_eiv = dk[ aeiv e1v mj(wslpj) ] 53 !! zw_eiv = - { di[ aeiu e2u mi(wslpi) ] + dj[ aeiv e1v mj(wslpj) ] } 54 54 !! add the eiv component to the model velocity: 55 55 !! p.n = p.n + z._eiv 56 !! CAUTION : the horizontal transports not updated along jpi column and jpj row 57 !! the vertical transports not updated along 1 & jpi columns and 1 & jpj rows 56 58 !! 57 59 !! ** Action : - add to p.n the eiv component 58 60 !!---------------------------------------------------------------------- 59 61 INTEGER , INTENT(in ) :: kt ! ocean time-step index 60 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pun ! in : 3 ocean velocitycomponents61 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pvn ! out: 3 ocean velocitycomponents62 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pun ! in : 3 ocean transport components 63 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pvn ! out: 3 ocean transport components 62 64 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pwn ! increased by the eiv 63 65 !! … … 88 90 zvwk1= ( wslpj(ji,jj,jk+1) + wslpj(ji,jj+1,jk+1) ) * fsaeiv(ji,jj,jk+1) * vmask(ji,jj,jk+1) 89 91 90 zu_eiv = 0.5 * umask(ji,jj,jk) * ( zuwk - zuwk1 ) / fse3u(ji,jj,jk)91 zv_eiv = 0.5 * vmask(ji,jj,jk) * ( zvwk - zvwk1 ) / fse3v(ji,jj,jk)92 zu_eiv = 0.5 * umask(ji,jj,jk) * ( zuwk - zuwk1 ) 93 zv_eiv = 0.5 * vmask(ji,jj,jk) * ( zvwk - zvwk1 ) 92 94 93 pun(ji,jj,jk) = pun(ji,jj,jk) + zu_eiv94 pvn(ji,jj,jk) = pvn(ji,jj,jk) + zv_eiv95 # if defined key_diaeiv 96 u_eiv(ji,jj,jk) = zu_eiv 97 v_eiv(ji,jj,jk) = zv_eiv 95 pun(ji,jj,jk) = pun(ji,jj,jk) + e2u(ji,jj) * zu_eiv 96 pvn(ji,jj,jk) = pvn(ji,jj,jk) + e1v(ji,jj) * zv_eiv 97 # if defined key_diaeiv 98 u_eiv(ji,jj,jk) = zu_eiv / fse3u(ji,jj,jk) 99 v_eiv(ji,jj,jk) = zv_eiv / fse3v(ji,jj,jk) 98 100 # endif 99 101 END DO … … 115 117 zvwj1 = ( wslpj(ji,jj,jk) + wslpj(ji,jj+1,jk) ) * e1v(ji ,jj) * vmask(ji ,jj,jk) 116 118 117 zw_eiv = - 0.5 * tmask(ji,jj,jk) * fsaeiw(ji,jj,jk) * ( zuwi1 - zuwi + zvwj1 - zvwj ) & 118 & / ( e1t(ji,jj)*e2t(ji,jj) ) 119 zw_eiv = - 0.5 * tmask(ji,jj,jk) * fsaeiw(ji,jj,jk) * ( zuwi1 - zuwi + zvwj1 - zvwj ) 119 120 # endif 120 121 pwn(ji,jj,jk) = pwn(ji,jj,jk) + zw_eiv 121 122 122 123 # if defined key_diaeiv 123 w_eiv(ji,jj,jk) = zw_eiv 124 w_eiv(ji,jj,jk) = zw_eiv / ( e1t(ji,jj)*e2t(ji,jj) ) 124 125 # endif 125 126 END DO … … 130 131 ! ! ================= 131 132 END SUBROUTINE tra_adv_eiv 133 134 135 !!gm test tra_adv_eiv better (faster) coded? to be verified 136 137 SUBROUTINE tra_adv_eiv2( kt, pun, pvn, pwn ) 138 !!---------------------------------------------------------------------- 139 !! *** ROUTINE tra_adv_eiv *** 140 !! 141 !! ** Purpose : Compute the eddy induced transport and add it to the 142 !! effective transport 143 !! 144 !! ** Method : The eddy induced transport is computed from the slope 145 !! of iso-neutral surfaces (see ldfslp.F90) as follows: 146 !! zu_eiv = dk[ aeiu e2u mi(wslpi) ] 147 !! zv_eiv = dk[ aeiv e1v mj(wslpj) ] 148 !! zw_eiv = - { di[ aeiu e2u mi(wslpi) ] + dj[ aeiv e1v mj(wslpj) ] } 149 !! add the eiv component to the model velocity: 150 !! p.n = p.n + z._eiv 151 !! CAUTION : the horizontal transports not updated along jpi column and jpj row 152 !! the vertical transports not updated along 1 & jpi columns and 1 & jpj rows 153 !! 154 !! ** Action : - add to p.n the eiv transport component 155 !!---------------------------------------------------------------------- 156 INTEGER , INTENT(in ) :: kt ! ocean time-step index 157 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pun ! in : 3 ocean transport components 158 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pvn ! out: 3 ocean transport components 159 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pwn ! increased by the eiv 160 !! 161 INTEGER :: ji, jj, jk ! dummy loop indices 162 REAL(wp) :: zuwslpi, zvwslpj ! temporary scalar 163 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zsfu, zsfv ! eiv stream-function in u and v directions 164 !!---------------------------------------------------------------------- 165 166 IF( kt == nit000 ) THEN 167 IF(lwp) WRITE(numout,*) 168 IF(lwp) WRITE(numout,*) 'tra_adv_eiv : eddy induced advection :' 169 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ add to velocity fields the eiv component' 170 ENDIF 171 172 ! eiv stream-function in u- and v-directions 173 ! NB: UW-point mask at level k is umask(:,:,k) idem form VW-point mask 174 zsfu(:,:, 1 ) = 0.e0 ; zsfv(:,:, 1 ) = 0.e0 ! surface value set to zero 175 zsfu(:,:,jpk) = 0.e0 ; zsfv(:,:,jpk) = 0.e0 ! bottom value set to zero 176 DO jk = 2, jpkm1 177 DO jj = 1, jpjm1 178 DO ji = 1, fs_jpim1 ! vector opt. 179 zuwslpi = 0.5 * ( wslpi(ji+1,jj,jk) + wslpi(ji,jj,jk) ) 180 zvwslpj = 0.5 * ( wslpj(ji,jj+1,jk) + wslpj(ji,jj,jk) ) 181 zsfu(ji,jj,jk) = zuwslpi * e2u(ji,jj) * fsaeiu(ji,jj,jk) * umask(ji,jj,jk) 182 zsfv(ji,jj,jk) = zvwslpj * e1v(ji,jj) * fsaeiv(ji,jj,jk) * vmask(ji,jj,jk) 183 END DO 184 END DO 185 END DO 186 # if defined key_diaeiv 187 ! save eiv stream function in the output 188 !!gm to be done, u_sfeiv and v_sfeiv not defined ==> new IOM.... 189 !!gm and zsfu, zfv notdefined for jpi column and jpj row 190 ! u_sfeiv(:,:,:) = zsfu(:,:,:) 191 ! v_sfeiv(:,:,:) = zsfu(:,:,:) 192 # endif 193 194 ! increase the transport with the eiv transport 195 DO jk = 1, jpkm1 196 DO jj = 1, jpjm1 197 DO ji = 1, fs_jpim1 ! vector opt. 198 pun(ji,jj,jk) = pun(ji,jj,jk) + ( zsfu(ji,jj,jk) - zsfu(ji,jj,jk+1) ) 199 pvn(ji,jj,jk) = pvn(ji,jj,jk) + ( zsfv(ji,jj,jk) - zsfv(ji,jj,jk+1) ) 200 END DO 201 END DO 202 END DO 203 DO jk = 2, jpkm1 204 DO jj = 2, jpjm1 205 DO ji = fs_2, fs_jpim1 ! vector opt. 206 pwn(ji,jj,jk) = pwn(ji,jj,jk) - ( zsfu(ji,jj,jk) - zsfu(ji-1,jj ,jk) & 207 & + zsfv(ji,jj,jk) - zsfv(ji ,jj-1,jk) ) * tmask(ji,jj,jk) 208 END DO 209 END DO 210 END DO 211 ! 212 END SUBROUTINE tra_adv_eiv2 132 213 133 214 #else
Note: See TracChangeset
for help on using the changeset viewer.