- Timestamp:
- 2015-12-15T10:46:14+01:00 (9 years ago)
- Location:
- branches/2015/dev_CMCC_merge_2015/NEMOGCM/NEMO/OPA_SRC/TRA
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_CMCC_merge_2015/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90
r5930 r6051 96 96 ! ! set time step 97 97 IF( neuler == 0 .AND. kt == nit000 ) THEN ! at nit000 98 r2dt ra(:) = rdttra(:) ! = rdtra(restarting with Euler time stepping)98 r2dt = rdt ! = rdt (restarting with Euler time stepping) 99 99 ELSEIF( kt <= nit000 + 1) THEN ! at nit000 or nit000+1 100 r2dt ra(:) = 2._wp * rdttra(:) ! = 2 rdttra(leapfrog)100 r2dt = 2._wp * rdt ! = 2 rdt (leapfrog) 101 101 ENDIF 102 102 ! … … 135 135 CALL tra_adv_cen ( kt, nit000, 'TRA', zun, zvn, zwn , tsn, tsa, jpts, nn_cen_h, nn_cen_v ) 136 136 CASE ( np_FCT ) ! FCT scheme : 2nd / 4th order 137 CALL tra_adv_fct ( kt, nit000, 'TRA', r2dt ra, zun, zvn, zwn, tsb, tsn, tsa, jpts, nn_fct_h, nn_fct_v )137 CALL tra_adv_fct ( kt, nit000, 'TRA', r2dt, zun, zvn, zwn, tsb, tsn, tsa, jpts, nn_fct_h, nn_fct_v ) 138 138 CASE ( np_FCT_zts ) ! 2nd order FCT with vertical time-splitting 139 CALL tra_adv_fct_zts( kt, nit000, 'TRA', r2dt ra, zun, zvn, zwn, tsb, tsn, tsa, jpts , nn_fct_zts )139 CALL tra_adv_fct_zts( kt, nit000, 'TRA', r2dt, zun, zvn, zwn, tsb, tsn, tsa, jpts , nn_fct_zts ) 140 140 CASE ( np_MUS ) ! MUSCL 141 CALL tra_adv_mus ( kt, nit000, 'TRA', r2dt ra, zun, zvn, zwn, tsb, tsa, jpts , ln_mus_ups )141 CALL tra_adv_mus ( kt, nit000, 'TRA', r2dt, zun, zvn, zwn, tsb, tsa, jpts , ln_mus_ups ) 142 142 CASE ( np_UBS ) ! UBS 143 CALL tra_adv_ubs ( kt, nit000, 'TRA', r2dt ra, zun, zvn, zwn, tsb, tsn, tsa, jpts , nn_ubs_v )143 CALL tra_adv_ubs ( kt, nit000, 'TRA', r2dt, zun, zvn, zwn, tsb, tsn, tsa, jpts , nn_ubs_v ) 144 144 CASE ( np_QCK ) ! QUICKEST 145 CALL tra_adv_qck ( kt, nit000, 'TRA', r2dt ra, zun, zvn, zwn, tsb, tsn, tsa, jpts )145 CALL tra_adv_qck ( kt, nit000, 'TRA', r2dt, zun, zvn, zwn, tsb, tsn, tsa, jpts ) 146 146 ! 147 147 END SELECT -
branches/2015/dev_CMCC_merge_2015/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_fct.F90
r5930 r6051 70 70 INTEGER , INTENT(in ) :: kn_fct_h ! order of the FCT scheme (=2 or 4) 71 71 INTEGER , INTENT(in ) :: kn_fct_v ! order of the FCT scheme (=2 or 4) 72 REAL(wp) , DIMENSION( jpk ), INTENT(in ) :: p2dt ! vertical profile oftracer time-step72 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 73 73 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pun, pvn, pwn ! 3 ocean velocity components 74 74 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb, ptn ! before and now tracer fields … … 76 76 ! 77 77 INTEGER :: ji, jj, jk, jn ! dummy loop indices 78 REAL(wp) :: z 2dtt, ztra ! local scalar78 REAL(wp) :: ztra ! local scalar 79 79 REAL(wp) :: zfp_ui, zfp_vj, zfp_wk, zC2t_u, zC4t_u ! - - 80 80 REAL(wp) :: zfm_ui, zfm_vj, zfm_wk, zC2t_v, zC4t_v ! - - … … 149 149 ! 150 150 DO jk = 1, jpkm1 !* trend and after field with monotonic scheme 151 z2dtt = p2dt(jk)152 151 DO jj = 2, jpjm1 153 152 DO ji = fs_2, fs_jpim1 ! vector opt. … … 159 158 !!gm why tmask added in the two following lines ??? the mask is done in tranxt ! 160 159 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra * tmask(ji,jj,jk) 161 zwi(ji,jj,jk) = ( ptb(ji,jj,jk,jn) + z2dtt * ztra ) * tmask(ji,jj,jk)160 zwi(ji,jj,jk) = ( ptb(ji,jj,jk,jn) + p2dt * ztra ) * tmask(ji,jj,jk) 162 161 END DO 163 162 END DO … … 348 347 INTEGER , INTENT(in ) :: kjpt ! number of tracers 349 348 INTEGER , INTENT(in ) :: kn_fct_zts ! number of number of vertical sub-timesteps 350 REAL(wp) , DIMENSION( jpk ), INTENT(in ) :: p2dt ! vertical profile oftracer time-step349 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 351 350 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pun, pvn, pwn ! 3 ocean velocity components 352 351 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb, ptn ! before and now tracer fields … … 354 353 ! 355 354 REAL(wp), DIMENSION( jpk ) :: zts ! length of sub-timestep for vertical advection 356 REAL(wp) , DIMENSION( jpk ):: zr_p2dt ! reciprocal of tracer timestep355 REAL(wp) :: zr_p2dt ! reciprocal of tracer timestep 357 356 INTEGER :: ji, jj, jk, jl, jn ! dummy loop indices 358 357 INTEGER :: jtb, jtn, jta ! sub timestep pointers for leap-frog/euler forward steps 359 358 INTEGER :: jtaken ! toggle for collecting appropriate fluxes from sub timesteps 360 359 REAL(wp) :: z_rzts ! Fractional length of Euler forward sub-timestep for vertical advection 361 REAL(wp) :: z 2dtt, ztra ! local scalar360 REAL(wp) :: ztra ! local scalar 362 361 REAL(wp) :: zfp_ui, zfp_vj, zfp_wk ! - - 363 362 REAL(wp) :: zfm_ui, zfm_vj, zfm_wk ! - - … … 390 389 zwi(:,:,:) = 0._wp 391 390 z_rzts = 1._wp / REAL( kn_fct_zts, wp ) 392 zr_p2dt (:) = 1._wp / p2dt(:)391 zr_p2dt = 1._wp / p2dt 393 392 ! 394 393 ! ! =========== … … 443 442 ! 444 443 DO jk = 1, jpkm1 ! total advective trend 445 z2dtt = p2dt(jk)446 444 DO jj = 2, jpjm1 447 445 DO ji = fs_2, fs_jpim1 ! vector opt. … … 452 450 ! update and guess with monotonic sheme 453 451 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra 454 zwi(ji,jj,jk) = ( ptb(ji,jj,jk,jn) + z2dtt * ztra ) * tmask(ji,jj,jk)452 zwi(ji,jj,jk) = ( ptb(ji,jj,jk,jn) + p2dt * ztra ) * tmask(ji,jj,jk) 455 453 END DO 456 454 END DO … … 508 506 IF( jl == 1 ) THEN ! Euler forward to kick things off 509 507 jtb = 1 ; jtn = 1 ; jta = 2 510 zts(:) = p2dt (:)* z_rzts508 zts(:) = p2dt * z_rzts 511 509 jtaken = MOD( kn_fct_zts + 1 , 2) ! Toggle to collect every second flux 512 510 ! ! starting at jl =1 if kn_fct_zts is odd; … … 514 512 ELSEIF( jl == 2 ) THEN ! First leapfrog step 515 513 jtb = 1 ; jtn = 2 ; jta = 3 516 zts(:) = 2._wp * p2dt (:)* z_rzts514 zts(:) = 2._wp * p2dt * z_rzts 517 515 ELSE ! Shuffle pointers for subsequent leapfrog steps 518 516 jtb = MOD(jtb,3) + 1 … … 557 555 DO jj = 2, jpjm1 558 556 DO ji = fs_2, fs_jpim1 559 zwz(ji,jj,jk) = ( zwzts(ji,jj,jk) * zr_p2dt (jk)- zwz_sav(ji,jj,jk) ) * wmask(ji,jj,jk)557 zwz(ji,jj,jk) = ( zwzts(ji,jj,jk) * zr_p2dt - zwz_sav(ji,jj,jk) ) * wmask(ji,jj,jk) 560 558 END DO 561 559 END DO … … 623 621 !! in-space based differencing for fluid 624 622 !!---------------------------------------------------------------------- 625 REAL(wp) , DIMENSION(jpk) , INTENT(in ) :: p2dt ! vertical profile oftracer time-step623 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 626 624 REAL(wp), DIMENSION (jpi,jpj,jpk), INTENT(in ) :: pbef, paft ! before & after field 627 625 REAL(wp), DIMENSION (jpi,jpj,jpk), INTENT(inout) :: paa, pbb, pcc ! monotonic fluxes in the 3 directions … … 629 627 INTEGER :: ji, jj, jk ! dummy loop indices 630 628 INTEGER :: ikm1 ! local integer 631 REAL(wp) :: zpos, zneg, zbt, za, zb, zc, zbig, zrtrn , z2dtt! local scalars629 REAL(wp) :: zpos, zneg, zbt, za, zb, zc, zbig, zrtrn ! local scalars 632 630 REAL(wp) :: zau, zbu, zcu, zav, zbv, zcv, zup, zdo ! - - 633 631 REAL(wp), POINTER, DIMENSION(:,:,:) :: zbetup, zbetdo, zbup, zbdo … … 652 650 DO jk = 1, jpkm1 653 651 ikm1 = MAX(jk-1,1) 654 z2dtt = p2dt(jk)655 652 DO jj = 2, jpjm1 656 653 DO ji = fs_2, fs_jpim1 ! vector opt. … … 679 676 680 677 ! up & down beta terms 681 zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) / z2dtt678 zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) / p2dt 682 679 zbetup(ji,jj,jk) = ( zup - paft(ji,jj,jk) ) / ( zpos + zrtrn ) * zbt 683 680 zbetdo(ji,jj,jk) = ( paft(ji,jj,jk) - zdo ) / ( zneg + zrtrn ) * zbt -
branches/2015/dev_CMCC_merge_2015/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_mus.F90
r5930 r6051 73 73 INTEGER , INTENT(in ) :: kjpt ! number of tracers 74 74 LOGICAL , INTENT(in ) :: ld_msc_ups ! use upstream scheme within muscl 75 REAL(wp) , DIMENSION( jpk ), INTENT(in ) :: p2dt ! vertical profile oftracer time-step75 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 76 76 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pun, pvn, pwn ! 3 ocean velocity components 77 77 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before tracer field … … 82 82 REAL(wp) :: zu, z0u, zzwx, zw ! local scalars 83 83 REAL(wp) :: zv, z0v, zzwy, z0w ! - - 84 REAL(wp) :: z dt, zalpha ! - -84 REAL(wp) :: zalpha ! - - 85 85 REAL(wp), POINTER, DIMENSION(:,:,:) :: zslpx, zslpy ! 3D workspace 86 86 REAL(wp), POINTER, DIMENSION(:,:,:) :: zwx , zwy ! - - … … 163 163 ! !-- MUSCL horizontal advective fluxes 164 164 DO jk = 1, jpkm1 ! interior values 165 zdt = p2dt(jk)166 165 DO jj = 2, jpjm1 167 166 DO ji = fs_2, fs_jpim1 ! vector opt. … … 169 168 z0u = SIGN( 0.5, pun(ji,jj,jk) ) 170 169 zalpha = 0.5 - z0u 171 zu = z0u - 0.5 * pun(ji,jj,jk) * zdt / ( e1e2u(ji,jj) * fse3u(ji,jj,jk) )170 zu = z0u - 0.5 * pun(ji,jj,jk) * p2dt / ( e1e2u(ji,jj) * fse3u(ji,jj,jk) ) 172 171 zzwx = ptb(ji+1,jj,jk,jn) + xind(ji,jj,jk) * zu * zslpx(ji+1,jj,jk) 173 172 zzwy = ptb(ji ,jj,jk,jn) + xind(ji,jj,jk) * zu * zslpx(ji ,jj,jk) … … 176 175 z0v = SIGN( 0.5, pvn(ji,jj,jk) ) 177 176 zalpha = 0.5 - z0v 178 zv = z0v - 0.5 * pvn(ji,jj,jk) * zdt / ( e1e2v(ji,jj) * fse3v(ji,jj,jk) )177 zv = z0v - 0.5 * pvn(ji,jj,jk) * p2dt / ( e1e2v(ji,jj) * fse3v(ji,jj,jk) ) 179 178 zzwx = ptb(ji,jj+1,jk,jn) + xind(ji,jj,jk) * zv * zslpy(ji,jj+1,jk) 180 179 zzwy = ptb(ji,jj ,jk,jn) + xind(ji,jj,jk) * zv * zslpy(ji,jj ,jk) … … 237 236 ! !-- vertical advective flux 238 237 DO jk = 1, jpkm1 ! interior values 239 zdt = p2dt(jk)240 238 DO jj = 2, jpjm1 241 239 DO ji = fs_2, fs_jpim1 ! vector opt. 242 240 z0w = SIGN( 0.5, pwn(ji,jj,jk+1) ) 243 241 zalpha = 0.5 + z0w 244 zw = z0w - 0.5 * pwn(ji,jj,jk+1) * zdt / ( e1e2t(ji,jj) * fse3w(ji,jj,jk+1) )242 zw = z0w - 0.5 * pwn(ji,jj,jk+1) * p2dt / ( e1e2t(ji,jj) * fse3w(ji,jj,jk+1) ) 245 243 zzwx = ptb(ji,jj,jk+1,jn) + xind(ji,jj,jk) * zw * zslpx(ji,jj,jk+1) 246 244 zzwy = ptb(ji,jj,jk ,jn) + xind(ji,jj,jk) * zw * zslpx(ji,jj,jk ) -
branches/2015/dev_CMCC_merge_2015/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_qck.F90
r5930 r6051 87 87 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 88 88 INTEGER , INTENT(in ) :: kjpt ! number of tracers 89 REAL(wp) , DIMENSION( jpk ), INTENT(in ) :: p2dt ! vertical profile oftracer time-step89 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 90 90 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pun, pvn, pwn ! 3 ocean velocity components 91 91 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb, ptn ! before and now tracer fields … … 125 125 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 126 126 INTEGER , INTENT(in ) :: kjpt ! number of tracers 127 REAL(wp) , DIMENSION( jpk ), INTENT(in ) :: p2dt ! vertical profile oftracer time-step127 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 128 128 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pun ! i-velocity components 129 129 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb, ptn ! before and now tracer fields … … 131 131 !! 132 132 INTEGER :: ji, jj, jk, jn ! dummy loop indices 133 REAL(wp) :: ztra, zbtr, zdir, zdx, z dt, zmsk ! local scalars133 REAL(wp) :: ztra, zbtr, zdir, zdx, zmsk ! local scalars 134 134 REAL(wp), POINTER, DIMENSION(:,:,:) :: zwx, zfu, zfc, zfd 135 135 !---------------------------------------------------------------------- … … 166 166 ! 167 167 DO jk = 1, jpkm1 168 zdt = p2dt(jk)169 168 DO jj = 2, jpjm1 170 169 DO ji = fs_2, fs_jpim1 ! vector opt. 171 170 zdir = 0.5 + SIGN( 0.5, pun(ji,jj,jk) ) ! if pun > 0 : zdir = 1 otherwise zdir = 0 172 171 zdx = ( zdir * e1t(ji,jj) + ( 1. - zdir ) * e1t(ji+1,jj) ) * e2u(ji,jj) * fse3u(ji,jj,jk) 173 zwx(ji,jj,jk) = ABS( pun(ji,jj,jk) ) * zdt / zdx ! (0<zc_cfl<1 : Courant number on x-direction)172 zwx(ji,jj,jk) = ABS( pun(ji,jj,jk) ) * p2dt / zdx ! (0<zc_cfl<1 : Courant number on x-direction) 174 173 zfc(ji,jj,jk) = zdir * ptb(ji ,jj,jk,jn) + ( 1. - zdir ) * ptb(ji+1,jj,jk,jn) ! FC in the x-direction for T 175 174 zfd(ji,jj,jk) = zdir * ptb(ji+1,jj,jk,jn) + ( 1. - zdir ) * ptb(ji ,jj,jk,jn) ! FD in the x-direction for T … … 242 241 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 243 242 INTEGER , INTENT(in ) :: kjpt ! number of tracers 244 REAL(wp) , DIMENSION( jpk ), INTENT(in ) :: p2dt ! vertical profile oftracer time-step243 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 245 244 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pvn ! j-velocity components 246 245 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb, ptn ! before and now tracer fields … … 248 247 !! 249 248 INTEGER :: ji, jj, jk, jn ! dummy loop indices 250 REAL(wp) :: ztra, zbtr, zdir, zdx, z dt, zmsk ! local scalars249 REAL(wp) :: ztra, zbtr, zdir, zdx, zmsk ! local scalars 251 250 REAL(wp), POINTER, DIMENSION(:,:,:) :: zwy, zfu, zfc, zfd 252 251 !---------------------------------------------------------------------- … … 289 288 ! 290 289 DO jk = 1, jpkm1 291 zdt = p2dt(jk)292 290 DO jj = 2, jpjm1 293 291 DO ji = fs_2, fs_jpim1 ! vector opt. 294 292 zdir = 0.5 + SIGN( 0.5, pvn(ji,jj,jk) ) ! if pun > 0 : zdir = 1 otherwise zdir = 0 295 293 zdx = ( zdir * e2t(ji,jj) + ( 1. - zdir ) * e2t(ji,jj+1) ) * e1v(ji,jj) * fse3v(ji,jj,jk) 296 zwy(ji,jj,jk) = ABS( pvn(ji,jj,jk) ) * zdt / zdx ! (0<zc_cfl<1 : Courant number on x-direction)294 zwy(ji,jj,jk) = ABS( pvn(ji,jj,jk) ) * p2dt / zdx ! (0<zc_cfl<1 : Courant number on x-direction) 297 295 zfc(ji,jj,jk) = zdir * ptb(ji,jj ,jk,jn) + ( 1. - zdir ) * ptb(ji,jj+1,jk,jn) ! FC in the x-direction for T 298 296 zfd(ji,jj,jk) = zdir * ptb(ji,jj+1,jk,jn) + ( 1. - zdir ) * ptb(ji,jj ,jk,jn) ! FD in the x-direction for T -
branches/2015/dev_CMCC_merge_2015/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_ubs.F90
r5930 r6051 85 85 INTEGER , INTENT(in ) :: kjpt ! number of tracers 86 86 INTEGER , INTENT(in ) :: kn_ubs_v ! number of tracers 87 REAL(wp) , DIMENSION( jpk ), INTENT(in ) :: p2dt ! vertical profile oftracer time-step87 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 88 88 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pun, pvn, pwn ! 3 ocean transport components 89 89 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb, ptn ! before and now tracer fields … … 91 91 ! 92 92 INTEGER :: ji, jj, jk, jn ! dummy loop indices 93 REAL(wp) :: ztra, zbtr, zcoef , z2dtt! local scalars93 REAL(wp) :: ztra, zbtr, zcoef ! local scalars 94 94 REAL(wp) :: zfp_ui, zfm_ui, zcenut, ztak, zfp_wk, zfm_wk ! - - 95 95 REAL(wp) :: zfp_vj, zfm_vj, zcenvt, zeeu, zeev, z_hdivn ! - - … … 212 212 ! 213 213 DO jk = 1, jpkm1 !* trend and after field with monotonic scheme 214 z2dtt = p2dt(jk)215 214 DO jj = 2, jpjm1 216 215 DO ji = fs_2, fs_jpim1 ! vector opt. 217 216 ztak = - ( ztw(ji,jj,jk) - ztw(ji,jj,jk+1) ) / ( e1e2t(ji,jj) * fse3t_n(ji,jj,jk) ) 218 217 pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztak 219 zti(ji,jj,jk) = ( ptb(ji,jj,jk,jn) + z2dtt * ( ztak + zltu(ji,jj,jk) ) ) * tmask(ji,jj,jk)218 zti(ji,jj,jk) = ( ptb(ji,jj,jk,jn) + p2dt * ( ztak + zltu(ji,jj,jk) ) ) * tmask(ji,jj,jk) 220 219 END DO 221 220 END DO … … 293 292 !! in-space based differencing for fluid 294 293 !!---------------------------------------------------------------------- 295 REAL(wp), INTENT(in ) , DIMENSION(jpk) :: p2dt ! vertical profile oftracer time-step294 REAL(wp), INTENT(in ) :: p2dt ! tracer time-step 296 295 REAL(wp), DIMENSION (jpi,jpj,jpk) :: pbef ! before field 297 296 REAL(wp), INTENT(inout), DIMENSION (jpi,jpj,jpk) :: paft ! after field … … 300 299 INTEGER :: ji, jj, jk ! dummy loop indices 301 300 INTEGER :: ikm1 ! local integer 302 REAL(wp) :: zpos, zneg, zbt, za, zb, zc, zbig, zrtrn , z2dtt! local scalars301 REAL(wp) :: zpos, zneg, zbt, za, zb, zc, zbig, zrtrn ! local scalars 303 302 REAL(wp), POINTER, DIMENSION(:,:,:) :: zbetup, zbetdo 304 303 !!---------------------------------------------------------------------- … … 349 348 ! --------------------------------------------------- 350 349 DO jk = 1, jpkm1 351 z2dtt = p2dt(jk)352 350 DO jj = 2, jpjm1 353 351 DO ji = fs_2, fs_jpim1 ! vector opt. … … 356 354 zneg = MAX( 0., pcc(ji ,jj ,jk ) ) - MIN( 0., pcc(ji ,jj ,jk+1) ) 357 355 ! up & down beta terms 358 zbt = e1e2t(ji,jj) * fse3t(ji,jj,jk) / z2dtt356 zbt = e1e2t(ji,jj) * fse3t(ji,jj,jk) / p2dt 359 357 zbetup(ji,jj,jk) = ( zbetup(ji,jj,jk) - paft(ji,jj,jk) ) / (zpos+zrtrn) * zbt 360 358 zbetdo(ji,jj,jk) = ( paft(ji,jj,jk) - zbetdo(ji,jj,jk) ) / (zneg+zrtrn) * zbt -
branches/2015/dev_CMCC_merge_2015/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90
r5836 r6051 129 129 ! 130 130 ! ! set time step size (Euler/Leapfrog) 131 IF( neuler == 0 .AND. kt == nit000 ) THEN ; z2dt = rdt tra(1)! at nit000 (Euler)132 ELSE ; z2dt = 2.* rdt tra(1)! (Leapfrog)131 IF( neuler == 0 .AND. kt == nit000 ) THEN ; z2dt = rdt ! at nit000 (Euler) 132 ELSE ; z2dt = 2.* rdt ! (Leapfrog) 133 133 ENDIF 134 134 z1_2dt = 1._wp / z2dt -
branches/2015/dev_CMCC_merge_2015/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_triad.F90
r5836 r6051 115 115 ! 116 116 ! ! set time step size (Euler/Leapfrog) 117 IF( neuler == 0 .AND. kt == kit000 ) THEN ; z2dt = rdt tra(1)! at nit000 (Euler)118 ELSE ; z2dt = 2.* rdt tra(1)! (Leapfrog)117 IF( neuler == 0 .AND. kt == kit000 ) THEN ; z2dt = rdt ! at nit000 (Euler) 118 ELSE ; z2dt = 2.* rdt ! (Leapfrog) 119 119 ENDIF 120 120 z1_2dt = 1._wp / z2dt -
branches/2015/dev_CMCC_merge_2015/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90
r5930 r6051 119 119 120 120 ! set time step size (Euler/Leapfrog) 121 IF( neuler == 0 .AND. kt == nit000 ) THEN ; r2dt ra(:) = rdttra(:)! at nit000 (Euler)122 ELSEIF( kt <= nit000 + 1 ) THEN ; r2dt ra(:) = 2._wp* rdttra(:)! at nit000 or nit000+1 (Leapfrog)121 IF( neuler == 0 .AND. kt == nit000 ) THEN ; r2dt = rdt ! at nit000 (Euler) 122 ELSEIF( kt <= nit000 + 1 ) THEN ; r2dt = 2._wp* rdt ! at nit000 or nit000+1 (Leapfrog) 123 123 ENDIF 124 124 … … 142 142 ELSE ! Leap-Frog + Asselin filter time stepping 143 143 ! 144 IF( lk_vvl ) THEN ; CALL tra_nxt_vvl( kt, nit000, rdt tra, 'TRA', tsb, tsn, tsa, &144 IF( lk_vvl ) THEN ; CALL tra_nxt_vvl( kt, nit000, rdt, 'TRA', tsb, tsn, tsa, & 145 145 & sbc_tsc, sbc_tsc_b, jpts ) ! variable volume level (vvl) 146 ELSE ; CALL tra_nxt_fix( kt, nit000, 146 ELSE ; CALL tra_nxt_fix( kt, nit000, 'TRA', tsb, tsn, tsa, jpts ) ! fixed volume level 147 147 ENDIF 148 148 ENDIF … … 151 151 IF( l_trdtra ) THEN ! trend of the Asselin filter (tb filtered - tb)/dt 152 152 DO jk = 1, jpkm1 153 zfact = 1._wp / r2dt ra(jk)153 zfact = 1._wp / r2dt 154 154 ztrdt(:,:,jk) = ( tsb(:,:,jk,jp_tem) - ztrdt(:,:,jk) ) * zfact 155 155 ztrds(:,:,jk) = ( tsb(:,:,jk,jp_sal) - ztrds(:,:,jk) ) * zfact … … 237 237 INTEGER , INTENT(in ) :: kt ! ocean time-step index 238 238 INTEGER , INTENT(in ) :: kit000 ! first time step index 239 REAL(wp) , INTENT(in ) , DIMENSION(jpk):: p2dt ! time-step239 REAL(wp) , INTENT(in ) :: p2dt ! time-step 240 240 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 241 241 INTEGER , INTENT(in ) :: kjpt ! number of tracers … … 275 275 DO jn = 1, kjpt 276 276 DO jk = 1, jpkm1 277 zfact1 = atfp * p2dt (jk)277 zfact1 = atfp * p2dt 278 278 zfact2 = zfact1 / rau0 279 279 DO jj = 1, jpj -
branches/2015/dev_CMCC_merge_2015/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf.F90
r5930 r6051 68 68 ! 69 69 IF( neuler == 0 .AND. kt == nit000 ) THEN ! at nit000 70 r2dt ra(:) = rdttra(:) ! = rdtra(restarting with Euler time stepping)70 r2dt = rdt ! = rdt (restarting with Euler time stepping) 71 71 ELSEIF( kt <= nit000 + 1) THEN ! at nit000 or nit000+1 72 r2dt ra(:) = 2. * rdttra(:) ! = 2 rdttra(leapfrog)72 r2dt = 2. * rdt ! = 2 rdt (leapfrog) 73 73 ENDIF 74 74 … … 80 80 81 81 SELECT CASE ( nzdf ) ! compute lateral mixing trend and add it to the general trend 82 CASE ( 0 ) ; CALL tra_zdf_exp( kt, nit000, 'TRA', r2dt ra, nn_zdfexp, tsb, tsa, jpts ) ! explicit scheme83 CASE ( 1 ) ; CALL tra_zdf_imp( kt, nit000, 'TRA', r2dt ra, tsb, tsa, jpts ) ! implicit scheme82 CASE ( 0 ) ; CALL tra_zdf_exp( kt, nit000, 'TRA', r2dt, nn_zdfexp, tsb, tsa, jpts ) ! explicit scheme 83 CASE ( 1 ) ; CALL tra_zdf_imp( kt, nit000, 'TRA', r2dt, tsb, tsa, jpts ) ! implicit scheme 84 84 END SELECT 85 85 !!gm WHY here ! and I don't like that ! … … 92 92 IF( l_trdtra ) THEN ! save the vertical diffusive trends for further diagnostics 93 93 DO jk = 1, jpkm1 94 ztrdt(:,:,jk) = ( ( tsa(:,:,jk,jp_tem) - tsb(:,:,jk,jp_tem) ) / r2dt ra(jk)) - ztrdt(:,:,jk)95 ztrds(:,:,jk) = ( ( tsa(:,:,jk,jp_sal) - tsb(:,:,jk,jp_sal) ) / r2dt ra(jk)) - ztrds(:,:,jk)94 ztrdt(:,:,jk) = ( ( tsa(:,:,jk,jp_tem) - tsb(:,:,jk,jp_tem) ) / r2dt ) - ztrdt(:,:,jk) 95 ztrds(:,:,jk) = ( ( tsa(:,:,jk,jp_sal) - tsb(:,:,jk,jp_sal) ) / r2dt ) - ztrds(:,:,jk) 96 96 END DO 97 97 !!gm this should be moved in trdtra.F90 and done on all trends -
branches/2015/dev_CMCC_merge_2015/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_exp.F90
r3294 r6051 81 81 INTEGER , INTENT(in ) :: kjpt ! number of tracers 82 82 INTEGER , INTENT(in ) :: kn_zdfexp ! number of sub-time step 83 REAL(wp) , DIMENSION( jpk ), INTENT(in ) :: p2dt ! vertical profile oftracer time-step83 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 84 84 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields 85 85 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend … … 136 136 DO ji = fs_2, fs_jpim1 ! vector opt. 137 137 ze3tr = zlavmr / fse3t_n(ji,jj,jk) 138 zwx(ji,jj,jk) = zwx(ji,jj,jk) + p2dt (jk)* ( zwy(ji,jj,jk) - zwy(ji,jj,jk+1) ) * ze3tr138 zwx(ji,jj,jk) = zwx(ji,jj,jk) + p2dt * ( zwy(ji,jj,jk) - zwy(ji,jj,jk+1) ) * ze3tr 139 139 END DO 140 140 END DO … … 150 150 DO ji = fs_2, fs_jpim1 ! vector opt. 151 151 ze3tb = fse3t_b(ji,jj,jk) / fse3t(ji,jj,jk) ! before e3t 152 ztra = zwx(ji,jj,jk) - ptb(ji,jj,jk,jn) + p2dt (jk) * pta(ji,jj,jk,jn) ! total trends * 2*rdt152 ztra = zwx(ji,jj,jk) - ptb(ji,jj,jk,jn) + p2dt * pta(ji,jj,jk,jn) ! total trends * 2*rdt 153 153 pta(ji,jj,jk,jn) = ( ze3tb * ptb(ji,jj,jk,jn) + ztra ) * tmask(ji,jj,jk) 154 154 END DO … … 159 159 DO jj = 2, jpjm1 160 160 DO ji = fs_2, fs_jpim1 ! vector opt. 161 pta(ji,jj,jk,jn) = ( zwx(ji,jj,jk) + p2dt (jk)* pta(ji,jj,jk,jn) ) * tmask(ji,jj,jk)161 pta(ji,jj,jk,jn) = ( zwx(ji,jj,jk) + p2dt * pta(ji,jj,jk,jn) ) * tmask(ji,jj,jk) 162 162 END DO 163 163 END DO -
branches/2015/dev_CMCC_merge_2015/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf_imp.F90
r5836 r6051 78 78 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 79 79 INTEGER , INTENT(in ) :: kjpt ! number of tracers 80 REAL(wp) , DIMENSION( jpk ), INTENT(in ) :: p2dt ! vertical profile oftracer time-step80 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 81 81 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields 82 82 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend … … 144 144 ze3ta = ( 1. - r_vvl ) + r_vvl * fse3t_a(ji,jj,jk) ! after scale factor at T-point 145 145 ze3tn = r_vvl + ( 1. - r_vvl ) * fse3t_n(ji,jj,jk) ! now scale factor at T-point 146 zwi(ji,jj,jk) = - p2dt (jk)* zwt(ji,jj,jk ) / ( ze3tn * fse3w(ji,jj,jk ) )147 zws(ji,jj,jk) = - p2dt (jk)* zwt(ji,jj,jk+1) / ( ze3tn * fse3w(ji,jj,jk+1) )146 zwi(ji,jj,jk) = - p2dt * zwt(ji,jj,jk ) / ( ze3tn * fse3w(ji,jj,jk ) ) 147 zws(ji,jj,jk) = - p2dt * zwt(ji,jj,jk+1) / ( ze3tn * fse3w(ji,jj,jk+1) ) 148 148 zwd(ji,jj,jk) = ze3ta - zwi(ji,jj,jk) - zws(ji,jj,jk) 149 149 END DO … … 192 192 ze3tb = ( 1. - r_vvl ) + r_vvl * fse3t_b(ji,jj,1) 193 193 ze3tn = ( 1. - r_vvl ) + r_vvl * fse3t(ji,jj,1) 194 pta(ji,jj,1,jn) = ze3tb * ptb(ji,jj,1,jn) + p2dt (1)* ze3tn * pta(ji,jj,1,jn)194 pta(ji,jj,1,jn) = ze3tb * ptb(ji,jj,1,jn) + p2dt * ze3tn * pta(ji,jj,1,jn) 195 195 END DO 196 196 END DO … … 200 200 ze3tb = ( 1. - r_vvl ) + r_vvl * fse3t_b(ji,jj,jk) 201 201 ze3tn = ( 1. - r_vvl ) + r_vvl * fse3t (ji,jj,jk) 202 zrhs = ze3tb * ptb(ji,jj,jk,jn) + p2dt (jk)* ze3tn * pta(ji,jj,jk,jn) ! zrhs=right hand side202 zrhs = ze3tb * ptb(ji,jj,jk,jn) + p2dt * ze3tn * pta(ji,jj,jk,jn) ! zrhs=right hand side 203 203 pta(ji,jj,jk,jn) = zrhs - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) * pta(ji,jj,jk-1,jn) 204 204 END DO
Note: See TracChangeset
for help on using the changeset viewer.