- Timestamp:
- 2015-03-31T19:58:23+02:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90
r5149 r5189 108 108 REAL(wp) :: zmskv, zabe2, zcof2, zcoef4 ! - - 109 109 REAL(wp) :: zcoef0, zbtr, ztra ! - - 110 REAL(wp), POINTER, DIMENSION(:,: ) :: z 2d111 REAL(wp), POINTER, DIMENSION(:,:,:) :: zd kt, zdk1t, zdit, zdjt, ztfw110 REAL(wp), POINTER, DIMENSION(:,: ) :: zdkt, zdk1t, z2d 111 REAL(wp), POINTER, DIMENSION(:,:,:) :: zdit, zdjt , ztfw 112 112 !!---------------------------------------------------------------------- 113 113 ! 114 114 IF( nn_timing == 1 ) CALL timing_start('tra_ldf_iso') 115 115 ! 116 CALL wrk_alloc( jpi, jpj, z 2d)117 CALL wrk_alloc( jpi, jpj, jpk, zdit, zdjt , ztfw, zdkt, zdk1t)116 CALL wrk_alloc( jpi, jpj, zdkt, zdk1t, z2d ) 117 CALL wrk_alloc( jpi, jpj, jpk, zdit, zdjt , ztfw ) 118 118 ! 119 119 … … 168 168 !! II - horizontal trend (full) 169 169 !!---------------------------------------------------------------------- 170 !!!!!!!!!!CDIR PARALLEL DO PRIVATE( zdk1t ) 170 !CDIR PARALLEL DO PRIVATE( zdk1t ) 171 ! ! =============== 172 DO jk = 1, jpkm1 ! Horizontal slab 173 ! ! =============== 171 174 ! 1. Vertical tracer gradient at level jk and jk+1 172 175 ! ------------------------------------------------ 173 ! 174 ! interior value 175 DO jk = 2, jpkm1 176 DO jj = 1, jpj 177 DO ji = 1, jpi ! vector opt. 178 zdk1t(ji,jj,jk) = ( ptb(ji,jj,jk,jn ) - ptb(ji,jj,jk+1,jn) ) * wmask(ji,jj,jk+1) 179 ! 180 zdkt(ji,jj,jk) = ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn ) ) * wmask(ji,jj,jk) 181 END DO 182 END DO 183 END DO 184 ! surface boundary condition: zdkt(jk=1)=zdkt(jk=2) 185 zdk1t(:,:,1) = ( ptb(:,:,1,jn ) - ptb(:,:,2,jn) ) * wmask(:,:,2) 186 zdkt (:,:,1) = zdk1t(:,:,1) 187 IF ( ln_isfcav ) THEN 188 DO jj = 1, jpj 189 DO ji = 1, jpi ! vector opt. 190 ikt = mikt(ji,jj) ! surface level 191 zdk1t(ji,jj,ikt) = ( ptb(ji,jj,ikt,jn ) - ptb(ji,jj,ikt+1,jn) ) * wmask(ji,jj,ikt+1) 192 zdkt (ji,jj,ikt) = zdk1t(ji,jj,ikt) 193 END DO 194 END DO 195 END IF 196 197 ! 2. Horizontal fluxes 198 ! -------------------- 199 DO jk = 1, jpkm1 176 ! surface boundary condition: zdkt(jk=1)=zdkt(jk=2) 177 zdk1t(:,:) = ( ptb(:,:,jk,jn) - ptb(:,:,jk+1,jn) ) * wmask(:,:,jk+1) 178 ! 179 IF( jk == 1 ) THEN ; zdkt(:,:) = zdk1t(:,:) 180 ELSE ; zdkt(:,:) = ( ptb(:,:,jk-1,jn) - ptb(:,:,jk,jn) ) * wmask(:,:,jk) 181 ENDIF 182 183 ! 2. Horizontal fluxes 184 ! -------------------- 200 185 DO jj = 1 , jpjm1 201 186 DO ji = 1, fs_jpim1 ! vector opt. … … 203 188 zabe2 = ( fsahtv(ji,jj,jk) + pahtb0 ) * re1v_e2v(ji,jj) * fse3v_n(ji,jj,jk) 204 189 ! 205 zmsku = 1. / MAX( tmask(ji+1,jj,jk ) + tmask(ji,jj,jk+1) &206 & + tmask(ji+1,jj,jk+1) + tmask(ji,jj,jk ), 1. )207 ! 208 zmskv = 1. / MAX( tmask(ji,jj+1,jk ) + tmask(ji,jj,jk+1) &209 & + tmask(ji,jj+1,jk+1) + tmask(ji,jj,jk ), 1. )190 zmsku = 1. / MAX( wmask(ji+1,jj,jk ) + wmask(ji,jj,jk+1) & 191 & + wmask(ji+1,jj,jk+1) + wmask(ji,jj,jk ), 1. ) 192 ! 193 zmskv = 1. / MAX( wmask(ji,jj+1,jk ) + wmask(ji,jj,jk+1) & 194 & + wmask(ji,jj+1,jk+1) + wmask(ji,jj,jk ), 1. ) 210 195 ! 211 196 zcof1 = - fsahtu(ji,jj,jk) * e2u(ji,jj) * uslp(ji,jj,jk) * zmsku … … 213 198 ! 214 199 zftu(ji,jj,jk ) = ( zabe1 * zdit(ji,jj,jk) & 215 & + zcof1 * ( zdkt (ji+1,jj ,jk) + zdk1t(ji,jj,jk) &216 & + zdk1t(ji+1,jj ,jk) + zdkt (ji,jj,jk) ) ) * umask(ji,jj,jk)200 & + zcof1 * ( zdkt (ji+1,jj ) + zdk1t(ji,jj) & 201 & + zdk1t(ji+1,jj ) + zdkt (ji,jj) ) ) * umask(ji,jj,jk) 217 202 zftv(ji,jj,jk) = ( zabe2 * zdjt(ji,jj,jk) & 218 & + zcof2 * ( zdkt (ji ,jj+1,jk) + zdk1t(ji,jj,jk) &219 & + zdk1t(ji ,jj+1,jk) + zdkt (ji,jj,jk) ) ) * vmask(ji,jj,jk)203 & + zcof2 * ( zdkt (ji ,jj+1) + zdk1t(ji,jj) & 204 & + zdk1t(ji ,jj+1) + zdkt (ji,jj) ) ) * vmask(ji,jj,jk) 220 205 END DO 221 206 END DO … … 322 307 END DO 323 308 ! 324 CALL wrk_dealloc( jpi, jpj, z2d)325 CALL wrk_dealloc( jpi, jpj, jpk, zdit, zdjt , ztfw, zdkt, zdk1t)309 CALL wrk_dealloc( jpi, jpj, zdkt, zdk1t, z2d ) 310 CALL wrk_dealloc( jpi, jpj, jpk, zdit, zdjt , ztfw ) 326 311 ! 327 312 IF( nn_timing == 1 ) CALL timing_stop('tra_ldf_iso')
Note: See TracChangeset
for help on using the changeset viewer.