Changeset 12719 for NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/OCE/TRA/traadv_mus.F90
- Timestamp:
- 2020-04-08T17:45:31+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/OCE/TRA/traadv_mus.F90
r12601 r12719 83 83 LOGICAL , INTENT(in ) :: ld_msc_ups ! use upstream scheme within muscl 84 84 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 85 REAL(wp), POINTER, DIMENSION(:,:,: ), INTENT(in ) :: pU, pV, pW ! 3 ocean volume flux components86 REAL(wp), POINTER, DIMENSION(:,:,:,:,:) 85 REAL(wp), POINTER, DIMENSION(:,:,:) , INTENT(in ) :: pU, pV, pW ! 3 ocean volume flux components 86 REAL(wp), POINTER, DIMENSION(:,:,:,:,:) , INTENT(inout) :: pt ! tracers and RHS of tracer equation 87 87 ! 88 88 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 96 96 CALL halo_mng_set(jphls) 97 97 98 ALLOCATE(zwx(jp lbi:jpi,jplbj:jpj,jpk))99 ALLOCATE(zwy(jp lbi:jpi,jplbj:jpj,jpk))100 ALLOCATE(zslpx(jp lbi:jpi,jplbj:jpj,jpk))101 ALLOCATE(zslpy(jp lbi:jpi,jplbj:jpj,jpk))98 ALLOCATE(zwx(jpi,jpj,jpk)) 99 ALLOCATE(zwy(jpi,jpj,jpk)) 100 ALLOCATE(zslpx(jpi,jpj,jpk)) 101 ALLOCATE(zslpy(jpi,jpj,jpk)) 102 102 103 103 CALL halo_mng_resize(r1_e1e2t,'T', 1._wp) … … 105 105 CALL halo_mng_resize(r1_e1e2v,'V', 1._wp) 106 106 CALL halo_mng_resize(tmask,'T', 1._wp) 107 CALL halo_mng_resize(wmask, 108 CALL halo_mng_resize(umask, 109 CALL halo_mng_resize(vmask, 107 CALL halo_mng_resize(wmask,'W', 1._wp) 108 CALL halo_mng_resize(umask,'U', 1._wp) 109 CALL halo_mng_resize(vmask,'V', 1._wp) 110 110 CALL halo_mng_resize(pt, 'T', 1._wp, kjpt=kjpt, fjpt=Kbb ) 111 111 CALL halo_mng_resize(pt, 'T', 1._wp, kjpt=kjpt, fjpt=Krhs ) 112 112 CALL halo_mng_resize(e3t,'T', 1._wp, fillval=1._wp, fjpt=Kmm) 113 CALL halo_mng_resize(e3u, 114 CALL halo_mng_resize(e3v, 115 CALL halo_mng_resize(e3w, 113 CALL halo_mng_resize(e3u,'U', 1._wp, fillval=1._wp, fjpt=Kmm ) 114 CALL halo_mng_resize(e3v,'V', 1._wp, fillval=1._wp, fjpt=Kmm) 115 CALL halo_mng_resize(e3w,'W', 1._wp, fillval=1._wp, fjpt=Kmm) 116 116 CALL halo_mng_resize(pU, 'U', -1._wp) 117 117 CALL halo_mng_resize(pV, 'V', -1._wp) 118 118 CALL halo_mng_resize(pW, 'W', 1._wp) 119 ! 120 IF( ln_isfcav ) CALL halo_mng_resize(mikt, 'T', 1._wp)121 IF( ld_msc_ups) CALL halo_mng_resize(rnfmsk, 122 IF( ld_msc_ups) CALL halo_mng_resize(upsmsk, 119 ! 120 IF( ln_isfcav ) CALL halo_mng_resize(mikt, 'T', 1._wp) 121 IF( ld_msc_ups) CALL halo_mng_resize(rnfmsk,'T', 1._wp) 122 IF( ld_msc_ups) CALL halo_mng_resize(upsmsk,'T', 1._wp) 123 123 124 124 IF( kt == kit000 ) THEN … … 131 131 ! Upstream / MUSCL scheme indicator 132 132 ! 133 ALLOCATE( xind(jp lbi:jpi,jplbj:jpj,jpk), STAT=ierr )133 ALLOCATE( xind(jpi,jpj,jpk), STAT=ierr ) 134 134 xind(:,:,:) = 1._wp ! set equal to 1 where up-stream is not needed 135 135 ! 136 136 IF( ld_msc_ups ) THEN ! define the upstream indicator (if asked) 137 ALLOCATE( upsmsk(jp lbi:jpi,jplbj:jpj), STAT=ierr )137 ALLOCATE( upsmsk(jpi,jpj), STAT=ierr ) 138 138 upsmsk(:,:) = 0._wp ! not upstream by default 139 139 ! … … 146 146 ! 147 147 ENDIF 148 148 ! 149 149 l_trd = .FALSE. 150 150 l_hst = .FALSE. … … 162 162 zwx(:,:,jpk) = 0._wp ! bottom values 163 163 zwy(:,:,jpk) = 0._wp 164 DO_3D_ 20_20( 1, jpkm1 )164 DO_3D_10_10( 1, jpkm1 ) 165 165 zwx(ji,jj,jk) = umask(ji,jj,jk) * ( pt(ji+1,jj,jk,jn,Kbb) - pt(ji,jj,jk,jn,Kbb) ) 166 166 zwy(ji,jj,jk) = vmask(ji,jj,jk) * ( pt(ji,jj+1,jk,jn,Kbb) - pt(ji,jj,jk,jn,Kbb) ) 167 167 END_3D 168 ! 168 ! lateral boundary conditions (changed sign) 169 !CALL lbc_lnk_multi( 'traadv_mus', zwx, 'U', -1. , zwy, 'V', -1. ) 169 170 ! !-- Slopes of tracer 170 171 zslpx(:,:,jpk) = 0._wp ! bottom values 171 172 zslpy(:,:,jpk) = 0._wp 172 DO_3D_ 31_31( 1, jpkm1 )173 DO_3D_01_01( 1, jpkm1 ) 173 174 zslpx(ji,jj,jk) = ( zwx(ji,jj,jk) + zwx(ji-1,jj ,jk) ) & 174 175 & * ( 0.25 + SIGN( 0.25, zwx(ji,jj,jk) * zwx(ji-1,jj ,jk) ) ) … … 177 178 END_3D 178 179 ! 179 DO_3D_ 31_31( 1, jpkm1 )180 DO_3D_01_01( 1, jpkm1 ) 180 181 zslpx(ji,jj,jk) = SIGN( 1., zslpx(ji,jj,jk) ) * MIN( ABS( zslpx(ji ,jj,jk) ), & 181 182 & 2.*ABS( zwx (ji-1,jj,jk) ), & … … 186 187 END_3D 187 188 ! 188 DO_3D_ 30_30( 1, jpkm1 )189 DO_3D_00_00( 1, jpkm1 ) 189 190 ! MUSCL fluxes 190 191 z0u = SIGN( 0.5, pU(ji,jj,jk) ) … … 202 203 zwy(ji,jj,jk) = pV(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 203 204 END_3D 204 ! 205 DO_3D_30_30( 1, jpkm1 ) 205 !CALL lbc_lnk_multi( 'traadv_mus', zwx, 'U', -1. , zwy, 'V', -1. ) ! lateral boundary conditions (changed sign) 206 ! 207 DO_3D_00_00( 1, jpkm1 ) 206 208 pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - ( zwx(ji,jj,jk) - zwx(ji-1,jj ,jk ) & 207 209 & + zwy(ji,jj,jk) - zwy(ji ,jj-1,jk ) ) & … … 228 230 ! !-- Slopes of tracer 229 231 zslpx(:,:,1) = 0._wp ! surface values 230 DO_3D_ 21_21( 2, jpkm1 )232 DO_3D_11_11( 2, jpkm1 ) 231 233 zslpx(ji,jj,jk) = ( zwx(ji,jj,jk) + zwx(ji,jj,jk+1) ) & 232 234 & * ( 0.25 + SIGN( 0.25, zwx(ji,jj,jk) * zwx(ji,jj,jk+1) ) ) 233 235 END_3D 234 DO_3D_ 21_21( 2, jpkm1 )236 DO_3D_11_11( 2, jpkm1 ) 235 237 zslpx(ji,jj,jk) = SIGN( 1., zslpx(ji,jj,jk) ) * MIN( ABS( zslpx(ji,jj,jk ) ), & 236 238 & 2.*ABS( zwx (ji,jj,jk+1) ), & 237 239 & 2.*ABS( zwx (ji,jj,jk ) ) ) 238 240 END_3D 239 DO_3D_ 30_30( 1, jpk-2 )241 DO_3D_00_00( 1, jpk-2 ) 240 242 z0w = SIGN( 0.5, pW(ji,jj,jk+1) ) 241 243 zalpha = 0.5 + z0w … … 247 249 IF( ln_linssh ) THEN ! top values, linear free surface only 248 250 IF( ln_isfcav ) THEN ! ice-shelf cavities (top of the ocean) 249 DO_2D_ 21_21251 DO_2D_11_11 250 252 zwx(ji,jj, mikt(ji,jj) ) = pW(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn,Kbb) 251 253 END_2D … … 255 257 ENDIF 256 258 ! 257 DO_3D_ 30_30( 1, jpkm1 )259 DO_3D_00_00( 1, jpkm1 ) 258 260 pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - ( zwx(ji,jj,jk) - zwx(ji,jj,jk+1) ) * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 259 261 END_3D … … 262 264 ! 263 265 END DO ! end of tracer loop 264 ! 266 265 267 DEALLOCATE(zwx,zwy) 266 268 DEALLOCATE(zslpx,zslpy) 267 269 268 270 CALL halo_mng_set(1) 269 271 ! 270 272 CALL halo_mng_resize(r1_e1e2t,'T', 1._wp) 271 273 CALL halo_mng_resize(r1_e1e2u,'U', 1._wp) 272 274 CALL halo_mng_resize(r1_e1e2v,'V', 1._wp) 273 CALL halo_mng_resize(pt, 274 CALL halo_mng_resize(pt, 275 CALL halo_mng_resize(pt,'T', 1._wp, kjpt=kjpt, fjpt=Kbb ) 276 CALL halo_mng_resize(pt,'T', 1._wp, kjpt=kjpt, fjpt=Krhs ) 275 277 CALL halo_mng_resize(tmask,'T', 1._wp) 276 CALL halo_mng_resize(wmask, 277 CALL halo_mng_resize(umask, 278 CALL halo_mng_resize(vmask, 278 CALL halo_mng_resize(wmask,'W', 1._wp) 279 CALL halo_mng_resize(umask,'U', 1._wp) 280 CALL halo_mng_resize(vmask,'V', 1._wp) 279 281 CALL halo_mng_resize(e3t,'T', 1._wp, fillval=1._wp, fjpt=Kmm) 280 CALL halo_mng_resize(e3u, 281 CALL halo_mng_resize(e3v, 282 CALL halo_mng_resize(e3w, 283 CALL halo_mng_resize(pU, 284 CALL halo_mng_resize(pV, 285 CALL halo_mng_resize(pW, 282 CALL halo_mng_resize(e3u,'U', 1._wp, fillval=1._wp, fjpt=Kmm) 283 CALL halo_mng_resize(e3v,'V', 1._wp, fillval=1._wp, fjpt=Kmm) 284 CALL halo_mng_resize(e3w,'W', 1._wp, fillval=1._wp, fjpt=Kmm) 285 CALL halo_mng_resize(pU,'U', 1._wp) 286 CALL halo_mng_resize(pV,'V', 1._wp) 287 CALL halo_mng_resize(pW,'W', 1._wp) 286 288 287 289 IF( ln_isfcav ) CALL halo_mng_resize(mikt, 'T', 1._wp) 288 290 IF( ld_msc_ups) CALL halo_mng_resize(rnfmsk, 'T', 1._wp) 289 291 IF( ld_msc_ups) CALL halo_mng_resize(upsmsk, 'T', 1._wp) 290 291 292 END SUBROUTINE tra_adv_mus 292 293
Note: See TracChangeset
for help on using the changeset viewer.