Changeset 5260 for branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/LIM_SRC_3/limadv.F90
- Timestamp:
- 2015-05-12T12:37:15+02:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/LIM_SRC_3/limadv.F90
r4161 r5260 30 30 PUBLIC lim_adv_x ! called by lim_trp 31 31 PUBLIC lim_adv_y ! called by lim_trp 32 33 REAL(wp) :: epsi20 = 1.e-20_wp ! constant values34 REAL(wp) :: rzero = 0._wp ! - -35 REAL(wp) :: rone = 1._wp ! - -36 32 37 33 !! * Substitutions … … 67 63 !! 68 64 INTEGER :: ji, jj ! dummy loop indices 69 REAL(wp) :: zs1max, zrdt, zslpmax, ztemp , zin0! local scalars65 REAL(wp) :: zs1max, zrdt, zslpmax, ztemp ! local scalars 70 66 REAL(wp) :: zs1new, zalf , zalfq , zbt ! - - 71 67 REAL(wp) :: zs2new, zalf1, zalf1q, zbt1 ! - - … … 84 80 DO jj = 1, jpj 85 81 DO ji = 1, jpi 86 zslpmax = MAX( rzero, ps0(ji,jj) )82 zslpmax = MAX( 0._wp, ps0(ji,jj) ) 87 83 zs1max = 1.5 * zslpmax 88 84 zs1new = MIN( zs1max, MAX( -zs1max, psx(ji,jj) ) ) 89 85 zs2new = MIN( 2.0 * zslpmax - 0.3334 * ABS( zs1new ), & 90 86 & MAX( ABS( zs1new ) - zslpmax, psxx(ji,jj) ) ) 91 zin0 = ( 1.0 - MAX( rzero, SIGN( rone, -zslpmax) ) ) * tms(ji,jj) ! Case of empty boxes & Apply mask87 rswitch = ( 1.0 - MAX( 0._wp, SIGN( 1._wp, -zslpmax) ) ) * tmask(ji,jj,1) ! Case of empty boxes & Apply mask 92 88 93 89 ps0 (ji,jj) = zslpmax 94 psx (ji,jj) = zs1new * zin095 psxx(ji,jj) = zs2new * zin096 psy (ji,jj) = psy (ji,jj) * zin097 psyy(ji,jj) = psyy(ji,jj) * zin098 psxy(ji,jj) = MIN( zslpmax, MAX( -zslpmax, psxy(ji,jj) ) ) * zin090 psx (ji,jj) = zs1new * rswitch 91 psxx(ji,jj) = zs2new * rswitch 92 psy (ji,jj) = psy (ji,jj) * rswitch 93 psyy(ji,jj) = psyy(ji,jj) * rswitch 94 psxy(ji,jj) = MIN( zslpmax, MAX( -zslpmax, psxy(ji,jj) ) ) * rswitch 99 95 END DO 100 96 END DO 101 97 102 98 ! Initialize volumes of boxes (=area if adv_x first called, =psm otherwise) 103 psm (:,:) = MAX( pcrh * area(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20 )99 psm (:,:) = MAX( pcrh * e12t(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20 ) 104 100 105 101 ! Calculate fluxes and moments between boxes i<-->i+1 106 102 DO jj = 1, jpj ! Flux from i to i+1 WHEN u GT 0 107 103 DO ji = 1, jpi 108 zbet(ji,jj) = MAX( rzero, SIGN( rone, put(ji,jj) ) )109 zalf = MAX( rzero, put(ji,jj) ) * zrdt * e2u(ji,jj) / psm(ji,jj)104 zbet(ji,jj) = MAX( 0._wp, SIGN( 1._wp, put(ji,jj) ) ) 105 zalf = MAX( 0._wp, put(ji,jj) ) * zrdt * e2u(ji,jj) / psm(ji,jj) 110 106 zalfq = zalf * zalf 111 107 zalf1 = 1.0 - zalf … … 133 129 DO jj = 1, jpjm1 ! Flux from i+1 to i when u LT 0. 134 130 DO ji = 1, fs_jpim1 135 zalf = MAX( rzero, -put(ji,jj) ) * zrdt * e2u(ji,jj) / psm(ji+1,jj)131 zalf = MAX( 0._wp, -put(ji,jj) ) * zrdt * e2u(ji,jj) / psm(ji+1,jj) 136 132 zalg (ji,jj) = zalf 137 133 zalfq = zalf * zalf … … 252 248 !! 253 249 INTEGER :: ji, jj ! dummy loop indices 254 REAL(wp) :: zs1max, zrdt, zslpmax, ztemp , zin0! temporary scalars250 REAL(wp) :: zs1max, zrdt, zslpmax, ztemp ! temporary scalars 255 251 REAL(wp) :: zs1new, zalf , zalfq , zbt ! - - 256 252 REAL(wp) :: zs2new, zalf1, zalf1q, zbt1 ! - - … … 269 265 DO jj = 1, jpj 270 266 DO ji = 1, jpi 271 zslpmax = MAX( rzero, ps0(ji,jj) )267 zslpmax = MAX( 0._wp, ps0(ji,jj) ) 272 268 zs1max = 1.5 * zslpmax 273 269 zs1new = MIN( zs1max, MAX( -zs1max, psy(ji,jj) ) ) 274 270 zs2new = MIN( ( 2.0 * zslpmax - 0.3334 * ABS( zs1new ) ), & 275 271 & MAX( ABS( zs1new )-zslpmax, psyy(ji,jj) ) ) 276 zin0 = ( 1.0 - MAX( rzero, SIGN( rone, -zslpmax) ) ) * tms(ji,jj) ! Case of empty boxes & Apply mask272 rswitch = ( 1.0 - MAX( 0._wp, SIGN( 1._wp, -zslpmax) ) ) * tmask(ji,jj,1) ! Case of empty boxes & Apply mask 277 273 ! 278 274 ps0 (ji,jj) = zslpmax 279 psx (ji,jj) = psx (ji,jj) * zin0280 psxx(ji,jj) = psxx(ji,jj) * zin0281 psy (ji,jj) = zs1new * zin0282 psyy(ji,jj) = zs2new * zin0283 psxy(ji,jj) = MIN( zslpmax, MAX( -zslpmax, psxy(ji,jj) ) ) * zin0275 psx (ji,jj) = psx (ji,jj) * rswitch 276 psxx(ji,jj) = psxx(ji,jj) * rswitch 277 psy (ji,jj) = zs1new * rswitch 278 psyy(ji,jj) = zs2new * rswitch 279 psxy(ji,jj) = MIN( zslpmax, MAX( -zslpmax, psxy(ji,jj) ) ) * rswitch 284 280 END DO 285 281 END DO 286 282 287 283 ! Initialize volumes of boxes (=area if adv_x first called, =psm otherwise) 288 psm(:,:) = MAX( pcrh * area(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20 )284 psm(:,:) = MAX( pcrh * e12t(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20 ) 289 285 290 286 ! Calculate fluxes and moments between boxes j<-->j+1 291 287 DO jj = 1, jpj ! Flux from j to j+1 WHEN v GT 0 292 288 DO ji = 1, jpi 293 zbet(ji,jj) = MAX( rzero, SIGN( rone, pvt(ji,jj) ) )294 zalf = MAX( rzero, pvt(ji,jj) ) * zrdt * e1v(ji,jj) / psm(ji,jj)289 zbet(ji,jj) = MAX( 0._wp, SIGN( 1._wp, pvt(ji,jj) ) ) 290 zalf = MAX( 0._wp, pvt(ji,jj) ) * zrdt * e1v(ji,jj) / psm(ji,jj) 295 291 zalfq = zalf * zalf 296 292 zalf1 = 1.0 - zalf … … 318 314 DO jj = 1, jpjm1 ! Flux from j+1 to j when v LT 0. 319 315 DO ji = 1, jpi 320 zalf = ( MAX( rzero, -pvt(ji,jj) ) * zrdt * e1v(ji,jj) ) / psm(ji,jj+1)316 zalf = ( MAX(0._wp, -pvt(ji,jj) ) * zrdt * e1v(ji,jj) ) / psm(ji,jj+1) 321 317 zalg (ji,jj) = zalf 322 318 zalfq = zalf * zalf
Note: See TracChangeset
for help on using the changeset viewer.