- Timestamp:
- 2016-11-28T17:04:10+01:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2016/dev_INGV_UKMO_2016/NEMOGCM/NEMO/TOP_SRC/TRP/trcadv.F90
r5836 r7351 32 32 33 33 PUBLIC trc_adv 34 PUBLIC trc_adv_alloc35 34 PUBLIC trc_adv_ini 36 35 … … 58 57 INTEGER :: nadv ! chosen advection scheme 59 58 ! 60 REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:) :: r2dt ! vertical profile time-step, = 2 rdttra61 ! ! except at nitrrc000 (=rdt tra) if neuler=059 REAL(wp) :: r2dttrc ! vertical profile time-step, = 2 rdt 60 ! ! except at nitrrc000 (=rdt) if neuler=0 62 61 63 62 !! * Substitutions 64 # include "domzgr_substitute.h90"65 63 # include "vectopt_loop_substitute.h90" 66 64 !!---------------------------------------------------------------------- … … 70 68 !!---------------------------------------------------------------------- 71 69 CONTAINS 72 73 INTEGER FUNCTION trc_adv_alloc()74 !!----------------------------------------------------------------------75 !! *** ROUTINE trc_adv_alloc ***76 !!----------------------------------------------------------------------77 !78 ALLOCATE( r2dt(jpk), STAT=trc_adv_alloc )79 !80 IF( trc_adv_alloc /= 0 ) CALL ctl_warn('trc_adv_alloc : failed to allocate array.')81 !82 END FUNCTION trc_adv_alloc83 84 70 85 71 SUBROUTINE trc_adv( kt ) … … 103 89 ! 104 90 IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN ! at nittrc000 105 r2dt (:) = rdttrc(:)! = rdttrc (use or restarting with Euler time stepping)91 r2dttrc = rdttrc ! = rdttrc (use or restarting with Euler time stepping) 106 92 ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN ! at nittrc000 or nittrc000+1 107 r2dt (:) = 2. * rdttrc(:)! = 2 rdttrc (leapfrog)93 r2dttrc = 2. * rdttrc ! = 2 rdttrc (leapfrog) 108 94 ENDIF 109 95 ! !== effective transport ==! 110 96 DO jk = 1, jpkm1 111 zun(:,:,jk) = e2u (:,:) * fse3u(:,:,jk) * un(:,:,jk) ! eulerian transport112 zvn(:,:,jk) = e1v (:,:) * fse3v(:,:,jk) * vn(:,:,jk)97 zun(:,:,jk) = e2u (:,:) * e3u_n(:,:,jk) * un(:,:,jk) ! eulerian transport 98 zvn(:,:,jk) = e1v (:,:) * e3v_n(:,:,jk) * vn(:,:,jk) 113 99 zwn(:,:,jk) = e1e2t(:,:) * wn(:,:,jk) 114 100 END DO … … 134 120 CALL tra_adv_cen ( kt, nittrc000,'TRC', zun, zvn, zwn , trn, tra, jptra, nn_cen_h, nn_cen_v ) 135 121 CASE ( np_FCT ) ! FCT : 2nd / 4th order 136 CALL tra_adv_fct ( kt, nittrc000,'TRC', r2dt , zun, zvn, zwn, trb, trn, tra, jptra, nn_fct_h, nn_fct_v )122 CALL tra_adv_fct ( kt, nittrc000,'TRC', r2dttrc, zun, zvn, zwn, trb, trn, tra, jptra, nn_fct_h, nn_fct_v ) 137 123 CASE ( np_FCT_zts ) ! 2nd order FCT with vertical time-splitting 138 CALL tra_adv_fct_zts( kt, nittrc000,'TRC', r2dt , zun, zvn, zwn, trb, trn, tra, jptra , nn_fct_zts )124 CALL tra_adv_fct_zts( kt, nittrc000,'TRC', r2dttrc, zun, zvn, zwn, trb, trn, tra, jptra , nn_fct_zts ) 139 125 CASE ( np_MUS ) ! MUSCL 140 CALL tra_adv_mus ( kt, nittrc000,'TRC', r2dt , zun, zvn, zwn, trb, tra, jptra , ln_mus_ups )126 CALL tra_adv_mus ( kt, nittrc000,'TRC', r2dttrc, zun, zvn, zwn, trb, tra, jptra , ln_mus_ups ) 141 127 CASE ( np_UBS ) ! UBS 142 CALL tra_adv_ubs ( kt, nittrc000,'TRC', r2dt , zun, zvn, zwn, trb, trn, tra, jptra , nn_ubs_v )128 CALL tra_adv_ubs ( kt, nittrc000,'TRC', r2dttrc, zun, zvn, zwn, trb, trn, tra, jptra , nn_ubs_v ) 143 129 CASE ( np_QCK ) ! QUICKEST 144 CALL tra_adv_qck ( kt, nittrc000,'TRC', r2dt , zun, zvn, zwn, trb, trn, tra, jptra )130 CALL tra_adv_qck ( kt, nittrc000,'TRC', r2dttrc, zun, zvn, zwn, trb, trn, tra, jptra ) 145 131 ! 146 132 END SELECT … … 231 217 CALL ctl_stop( 'trc_adv_init: force 2nd order FCT scheme, 4th order does not exist with sub-timestepping' ) 232 218 ENDIF 233 IF( lk_vvl) THEN219 IF( .NOT.ln_linssh ) THEN 234 220 CALL ctl_stop( 'trc_adv_init: vertical sub-timestepping not allow in non-linear free surface' ) 235 221 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.