- Timestamp:
- 2015-02-20T20:11:47+01:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5094_UKMO_ISFCLEAN/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90
r4990 r5098 106 106 ! 107 107 INTEGER :: ji, jj, jk, jn ! dummy loop indices 108 INTEGER :: ikt 108 109 REAL(wp) :: zmsku, zabe1, zcof1, zcoef3 ! local scalars 109 110 REAL(wp) :: zmskv, zabe2, zcof2, zcoef4 ! - - … … 149 150 END DO 150 151 END DO 152 153 ! partial cell correction 151 154 IF( ln_zps ) THEN ! partial steps correction at the last ocean level 152 155 DO jj = 1, jpjm1 153 156 DO ji = 1, fs_jpim1 ! vector opt. 154 157 ! IF useless if zpshde defines pgu everywhere 155 IF (mbku(ji,jj) > 1) zdit(ji,jj,mbku(ji,jj)) = pgu(ji,jj,jn) 156 IF (mbkv(ji,jj) > 1) zdjt(ji,jj,mbkv(ji,jj)) = pgv(ji,jj,jn) 157 ! (ISF) 158 zdit(ji,jj,mbku(ji,jj)) = pgu(ji,jj,jn) 159 zdjt(ji,jj,mbkv(ji,jj)) = pgv(ji,jj,jn) 160 END DO 161 END DO 162 ENDIF 163 IF( ln_zps .AND. ln_isfcav ) THEN ! partial steps correction at the first wet level beneath a cavity 164 DO jj = 1, jpjm1 165 DO ji = 1, fs_jpim1 ! vector opt. 158 166 IF (miku(ji,jj) > 1) zdit(ji,jj,miku(ji,jj)) = pgui(ji,jj,jn) 159 167 IF (mikv(ji,jj) > 1) zdjt(ji,jj,mikv(ji,jj)) = pgvi(ji,jj,jn) 160 168 END DO 161 169 END DO 162 END IF170 END IF 163 171 164 172 !!---------------------------------------------------------------------- 165 173 !! II - horizontal trend (full) 166 174 !!---------------------------------------------------------------------- 167 !CDIR PARALLEL DO PRIVATE( zdk1t ) 168 ! ! =============== 169 DO jj = 1, jpj ! Horizontal slab 170 ! ! =============== 171 DO ji = 1, jpi ! vector opt. 172 DO jk = mikt(ji,jj), jpkm1 173 ! 1. Vertical tracer gradient at level jk and jk+1 174 ! ------------------------------------------------ 175 ! surface boundary condition: zdkt(jk=1)=zdkt(jk=2) 176 zdk1t(ji,jj,jk) = ( ptb(ji,jj,jk,jn) - ptb(ji,jj,jk+1,jn) ) * tmask(ji,jj,jk+1) 177 ! 178 IF( jk == mikt(ji,jj) ) THEN ; zdkt(ji,jj,jk) = zdk1t(ji,jj,jk) 179 ELSE ; zdkt(ji,jj,jk) = ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) * tmask(ji,jj,jk) 180 ENDIF 175 !!!!!!!!!!CDIR PARALLEL DO PRIVATE( zdk1t ) 176 ! 1. Vertical tracer gradient at level jk and jk+1 177 ! ------------------------------------------------ 178 ! 179 ! interior value 180 DO jk = 2, jpkm1 181 DO jj = 1, jpj 182 DO ji = 1, jpi ! vector opt. 183 zdk1t(ji,jj,jk) = ( ptb(ji,jj,jk,jn ) - ptb(ji,jj,jk+1,jn) ) * wmask(ji,jj,jk+1) 184 ! 185 zdkt(ji,jj,jk) = ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn ) ) * wmask(ji,jj,jk) 181 186 END DO 182 187 END DO 183 188 END DO 189 ! surface boundary condition: zdkt(jk=1)=zdkt(jk=2) 190 zdk1t(:,:,1) = ( ptb(:,:,1,jn ) - ptb(:,:,2,jn) ) * wmask(:,:,2) 191 zdkt (:,:,1) = zdk1t(:,:,1) 192 IF ( ln_isfcav ) THEN 193 DO jj = 1, jpj 194 DO ji = 1, jpi ! vector opt. 195 ikt = mikt(ji,jj) ! surface level 196 zdk1t(ji,jj,ikt) = ( ptb(ji,jj,ikt,jn ) - ptb(ji,jj,ikt+1,jn) ) * wmask(ji,jj,ikt+1) 197 zdkt (ji,jj,ikt) = zdk1t(ji,jj,ikt) 198 END DO 199 END DO 200 END IF 184 201 185 202 ! 2. Horizontal fluxes 186 203 ! -------------------- 187 DO j j = 1 , jpjm1188 DO j i = 1, fs_jpim1 ! vector opt.189 DO j k = mikt(ji,jj), jpkm1204 DO jk = 1, jpkm1 205 DO jj = 1 , jpjm1 206 DO ji = 1, fs_jpim1 ! vector opt. 190 207 zabe1 = ( fsahtu(ji,jj,jk) + pahtb0 ) * re2u_e1u(ji,jj) * fse3u_n(ji,jj,jk) 191 208 zabe2 = ( fsahtv(ji,jj,jk) + pahtb0 ) * re1v_e2v(ji,jj) * fse3v_n(ji,jj,jk) … … 208 225 END DO 209 226 END DO 210 END DO211 227 212 228 ! II.4 Second derivative (divergence) and add to the general trend 213 229 ! ---------------------------------------------------------------- 214 DO jj = 2 , jpjm1 215 DO ji = fs_2, fs_jpim1 ! vector opt. 216 DO jk = mikt(ji,jj), jpkm1 217 zbtr = 1.0 / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) ) 230 DO jj = 2 , jpjm1 231 DO ji = fs_2, fs_jpim1 ! vector opt. 232 zbtr = 1.0 / ( e12t(ji,jj) * fse3t_n(ji,jj,jk) ) 218 233 ztra = zbtr * ( zftu(ji,jj,jk) - zftu(ji-1,jj,jk) + zftv(ji,jj,jk) - zftv(ji,jj-1,jk) ) 219 234 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra … … 278 293 DO jj = 2, jpjm1 279 294 DO ji = fs_2, fs_jpim1 ! vector opt. 280 zcoef0 = - fsahtw(ji,jj,jk) * tmask(ji,jj,jk) * tmask(ji,jj,jk-1)295 zcoef0 = - fsahtw(ji,jj,jk) * wmask(ji,jj,jk) 281 296 ! 282 297 zmsku = 1./MAX( umask(ji ,jj,jk-1) + umask(ji-1,jj,jk) &
Note: See TracChangeset
for help on using the changeset viewer.