- Timestamp:
- 2015-07-10T13:28:53+02:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4765_CNRS_agrif/NEMOGCM/NEMO/LIM_SRC_3/limadv.F90
r4688 r5581 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 32 35 33 !! * Substitutions … … 65 63 !! 66 64 INTEGER :: ji, jj ! dummy loop indices 67 REAL(wp) :: zs1max, zrdt, zslpmax, ztemp , zin0! local scalars65 REAL(wp) :: zs1max, zrdt, zslpmax, ztemp ! local scalars 68 66 REAL(wp) :: zs1new, zalf , zalfq , zbt ! - - 69 67 REAL(wp) :: zs2new, zalf1, zalf1q, zbt1 ! - - … … 87 85 zs2new = MIN( 2.0 * zslpmax - 0.3334 * ABS( zs1new ), & 88 86 & MAX( ABS( zs1new ) - zslpmax, psxx(ji,jj) ) ) 89 zin0 = ( 1.0 - MAX( 0._wp, SIGN( 1._wp, -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 90 88 91 89 ps0 (ji,jj) = zslpmax 92 psx (ji,jj) = zs1new * zin093 psxx(ji,jj) = zs2new * zin094 psy (ji,jj) = psy (ji,jj) * zin095 psyy(ji,jj) = psyy(ji,jj) * zin096 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 97 95 END DO 98 96 END DO 99 97 100 98 ! Initialize volumes of boxes (=area if adv_x first called, =psm otherwise) 101 psm (:,:) = MAX( pcrh * area(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20 )99 psm (:,:) = MAX( pcrh * e12t(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20 ) 102 100 103 101 ! Calculate fluxes and moments between boxes i<-->i+1 … … 209 207 210 208 !-- Lateral boundary conditions 211 CALL lbc_lnk ( psm , 'T', 1. ) ; CALL lbc_lnk( ps0 , 'T', 1. )212 CALL lbc_lnk( psx , 'T', -1. ) ; CALL lbc_lnk( psy , 'T', -1. )! caution gradient ==> the sign changes213 CALL lbc_lnk( psxx, 'T', 1. ) ; CALL lbc_lnk( psyy, 'T', 1. )214 CALL lbc_lnk(psxy, 'T', 1. )209 CALL lbc_lnk_multi( psm , 'T', 1., ps0 , 'T', 1. & 210 & , psx , 'T', -1., psy , 'T', -1. & ! caution gradient ==> the sign changes 211 & , psxx, 'T', 1., psyy, 'T', 1. & 212 & , psxy, 'T', 1. ) 215 213 216 214 IF(ln_ctl) THEN … … 250 248 !! 251 249 INTEGER :: ji, jj ! dummy loop indices 252 REAL(wp) :: zs1max, zrdt, zslpmax, ztemp , zin0! temporary scalars250 REAL(wp) :: zs1max, zrdt, zslpmax, ztemp ! temporary scalars 253 251 REAL(wp) :: zs1new, zalf , zalfq , zbt ! - - 254 252 REAL(wp) :: zs2new, zalf1, zalf1q, zbt1 ! - - … … 272 270 zs2new = MIN( ( 2.0 * zslpmax - 0.3334 * ABS( zs1new ) ), & 273 271 & MAX( ABS( zs1new )-zslpmax, psyy(ji,jj) ) ) 274 zin0 = ( 1.0 - MAX( 0._wp, SIGN( 1._wp, -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 275 273 ! 276 274 ps0 (ji,jj) = zslpmax 277 psx (ji,jj) = psx (ji,jj) * zin0278 psxx(ji,jj) = psxx(ji,jj) * zin0279 psy (ji,jj) = zs1new * zin0280 psyy(ji,jj) = zs2new * zin0281 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 282 280 END DO 283 281 END DO 284 282 285 283 ! Initialize volumes of boxes (=area if adv_x first called, =psm otherwise) 286 psm(:,:) = MAX( pcrh * area(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20 )284 psm(:,:) = MAX( pcrh * e12t(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20 ) 287 285 288 286 ! Calculate fluxes and moments between boxes j<-->j+1 … … 395 393 396 394 !-- Lateral boundary conditions 397 CALL lbc_lnk ( psm , 'T', 1. ) ; CALL lbc_lnk( ps0 , 'T', 1. )398 CALL lbc_lnk( psx , 'T', -1. ) ; CALL lbc_lnk( psy , 'T', -1. )! caution gradient ==> the sign changes399 CALL lbc_lnk( psxx, 'T', 1. ) ; CALL lbc_lnk( psyy, 'T', 1. )400 CALL lbc_lnk(psxy, 'T', 1. )395 CALL lbc_lnk_multi( psm , 'T', 1., ps0 , 'T', 1. & 396 & , psx , 'T', -1., psy , 'T', -1. & ! caution gradient ==> the sign changes 397 & , psxx, 'T', 1., psyy, 'T', 1. & 398 & , psxy, 'T', 1. ) 401 399 402 400 IF(ln_ctl) THEN
Note: See TracChangeset
for help on using the changeset viewer.