- Timestamp:
- 2016-10-29T01:21:05+02:00 (8 years ago)
- Location:
- branches/2016/dev_v3_6_STABLE_r6506_AGRIF_LIM3/NEMOGCM/NEMO/TOP_SRC/TRP
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2016/dev_v3_6_STABLE_r6506_AGRIF_LIM3/NEMOGCM/NEMO/TOP_SRC/TRP/trcadv.F90
r5385 r7158 32 32 33 33 PUBLIC trc_adv ! routine called by step module 34 PUBLIC trc_adv_alloc ! routine called by nemogcm module35 34 36 35 INTEGER :: nadv ! choice of the type of advection scheme 37 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: r2dt ! vertical profile time-step, = 2 rdttra 38 ! ! except at nitrrc000 (=rdttra) if neuler=0 36 37 REAL(wp) :: r2dttrc ! vertical profile time-step, = 2 rdt 38 ! ! except at nitrrc000 (=rdt) if neuler=0 39 39 40 40 !! * Substitutions … … 47 47 !!---------------------------------------------------------------------- 48 48 CONTAINS 49 50 INTEGER FUNCTION trc_adv_alloc()51 !!----------------------------------------------------------------------52 !! *** ROUTINE trc_adv_alloc ***53 !!----------------------------------------------------------------------54 55 ALLOCATE( r2dt(jpk), STAT=trc_adv_alloc )56 57 IF( trc_adv_alloc /= 0 ) CALL ctl_warn('trc_adv_alloc : failed to allocate array.')58 59 END FUNCTION trc_adv_alloc60 49 61 50 … … 84 73 85 74 IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN ! at nittrc000 86 r2dt (:) = rdttrc(:)! = rdttrc (use or restarting with Euler time stepping)75 r2dttrc = rdttrc ! = rdttrc (use or restarting with Euler time stepping) 87 76 ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN ! at nittrc000 or nittrc000+1 88 r2dt (:) = 2. * rdttrc(:)! = 2 rdttrc (leapfrog)77 r2dttrc = 2. * rdttrc ! = 2 rdttrc (leapfrog) 89 78 ENDIF 90 79 ! ! effective transport … … 112 101 ! 113 102 SELECT CASE ( nadv ) !== compute advection trend and add it to general trend ==! 114 CASE ( 1 ) ; CALL tra_adv_cen2 ( kt, nittrc000, 'TRC', zun, zvn, zwn, trb, trn, tra, jptra ) ! 2nd order centered115 CASE ( 2 ) ; CALL tra_adv_tvd ( kt, nittrc000, 'TRC', r2dt , zun, zvn, zwn, trb, trn, tra, jptra ) ! TVD116 CASE ( 3 ) ; CALL tra_adv_muscl ( kt, nittrc000, 'TRC', r2dt , zun, zvn, zwn, trb, tra, jptra, ln_trcadv_msc_ups ) ! MUSCL117 CASE ( 4 ) ; CALL tra_adv_muscl2( kt, nittrc000, 'TRC', r2dt , zun, zvn, zwn, trb, trn, tra, jptra ) ! MUSCL2118 CASE ( 5 ) ; CALL tra_adv_ubs ( kt, nittrc000, 'TRC', r2dt , zun, zvn, zwn, trb, trn, tra, jptra ) ! UBS119 CASE ( 6 ) ; CALL tra_adv_qck ( kt, nittrc000, 'TRC', r2dt , zun, zvn, zwn, trb, trn, tra, jptra ) ! QUICKEST103 CASE ( 1 ) ; CALL tra_adv_cen2 ( kt, nittrc000, 'TRC', zun, zvn, zwn, trb, trn, tra, jptra ) ! 2nd order centered 104 CASE ( 2 ) ; CALL tra_adv_tvd ( kt, nittrc000, 'TRC', r2dttrc, zun, zvn, zwn, trb, trn, tra, jptra ) ! TVD 105 CASE ( 3 ) ; CALL tra_adv_muscl ( kt, nittrc000, 'TRC', r2dttrc, zun, zvn, zwn, trb, tra, jptra, ln_trcadv_msc_ups ) ! MUSCL 106 CASE ( 4 ) ; CALL tra_adv_muscl2( kt, nittrc000, 'TRC', r2dttrc, zun, zvn, zwn, trb, trn, tra, jptra ) ! MUSCL2 107 CASE ( 5 ) ; CALL tra_adv_ubs ( kt, nittrc000, 'TRC', r2dttrc, zun, zvn, zwn, trb, trn, tra, jptra ) ! UBS 108 CASE ( 6 ) ; CALL tra_adv_qck ( kt, nittrc000, 'TRC', r2dttrc, zun, zvn, zwn, trb, trn, tra, jptra ) ! QUICKEST 120 109 ! 121 110 CASE (-1 ) !== esopa: test all possibility with control print ==! … … 123 112 WRITE(charout, FMT="('adv1')") ; CALL prt_ctl_trc_info(charout) 124 113 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd') 125 CALL tra_adv_tvd ( kt, nittrc000, 'TRC', r2dt , zun, zvn, zwn, trb, trn, tra, jptra )114 CALL tra_adv_tvd ( kt, nittrc000, 'TRC', r2dttrc, zun, zvn, zwn, trb, trn, tra, jptra ) 126 115 WRITE(charout, FMT="('adv2')") ; CALL prt_ctl_trc_info(charout) 127 116 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd') 128 CALL tra_adv_muscl ( kt, nittrc000, 'TRC', r2dt , zun, zvn, zwn, trb, tra, jptra, ln_trcadv_msc_ups )117 CALL tra_adv_muscl ( kt, nittrc000, 'TRC', r2dttrc, zun, zvn, zwn, trb, tra, jptra, ln_trcadv_msc_ups ) 129 118 WRITE(charout, FMT="('adv3')") ; CALL prt_ctl_trc_info(charout) 130 119 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd') 131 CALL tra_adv_muscl2( kt, nittrc000, 'TRC', r2dt , zun, zvn, zwn, trb, trn, tra, jptra )120 CALL tra_adv_muscl2( kt, nittrc000, 'TRC', r2dttrc, zun, zvn, zwn, trb, trn, tra, jptra ) 132 121 WRITE(charout, FMT="('adv4')") ; CALL prt_ctl_trc_info(charout) 133 122 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd') 134 CALL tra_adv_ubs ( kt, nittrc000, 'TRC', r2dt , zun, zvn, zwn, trb, trn, tra, jptra )123 CALL tra_adv_ubs ( kt, nittrc000, 'TRC', r2dttrc, zun, zvn, zwn, trb, trn, tra, jptra ) 135 124 WRITE(charout, FMT="('adv5')") ; CALL prt_ctl_trc_info(charout) 136 125 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd') 137 CALL tra_adv_qck ( kt, nittrc000, 'TRC', r2dt , zun, zvn, zwn, trb, trn, tra, jptra )126 CALL tra_adv_qck ( kt, nittrc000, 'TRC', r2dttrc, zun, zvn, zwn, trb, trn, tra, jptra ) 138 127 WRITE(charout, FMT="('adv6')") ; CALL prt_ctl_trc_info(charout) 139 128 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd') -
branches/2016/dev_v3_6_STABLE_r6506_AGRIF_LIM3/NEMOGCM/NEMO/TOP_SRC/TRP/trcnxt.F90
r6204 r7158 41 41 42 42 PUBLIC trc_nxt ! routine called by step.F90 43 PUBLIC trc_nxt_alloc ! routine called by nemogcm.F9044 43 45 REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:) :: r2dt44 REAL(wp) :: r2dttrc 46 45 47 46 !!---------------------------------------------------------------------- … … 51 50 !!---------------------------------------------------------------------- 52 51 CONTAINS 53 54 INTEGER FUNCTION trc_nxt_alloc()55 !!----------------------------------------------------------------------56 !! *** ROUTINE trc_nxt_alloc ***57 !!----------------------------------------------------------------------58 ALLOCATE( r2dt(jpk), STAT=trc_nxt_alloc )59 !60 IF( trc_nxt_alloc /= 0 ) CALL ctl_warn('trc_nxt_alloc : failed to allocate array')61 !62 END FUNCTION trc_nxt_alloc63 52 64 53 … … 117 106 118 107 ! set time step size (Euler/Leapfrog) 119 IF( neuler == 0 .AND. kt == nittrc000 ) THEN ; r2dt (:) = rdttrc(:)! at nittrc000 (Euler)120 ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN ; r2dt (:) = 2.* rdttrc(:)! at nit000 or nit000+1 (Leapfrog)108 IF( neuler == 0 .AND. kt == nittrc000 ) THEN ; r2dttrc = rdttrc ! at nittrc000 (Euler) 109 ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN ; r2dttrc = 2.* rdttrc ! at nit000 or nit000+1 (Leapfrog) 121 110 ENDIF 122 111 … … 147 136 DO jn = 1, jptra 148 137 DO jk = 1, jpkm1 149 zfact = 1.e0 / r2dt (jk)138 zfact = 1.e0 / r2dttrc 150 139 ztrdt(:,:,jk,jn) = ( trb(:,:,jk,jn) - ztrdt(:,:,jk,jn) ) * zfact 151 140 CALL trd_tra( kt, 'TRC', jn, jptra_atf, ztrdt ) -
branches/2016/dev_v3_6_STABLE_r6506_AGRIF_LIM3/NEMOGCM/NEMO/TOP_SRC/TRP/trcsbc.F90
r6971 r7158 27 27 28 28 PUBLIC trc_sbc ! routine called by step.F90 29 30 REAL(wp) :: r2dt ! time-step at surface31 29 32 30 !! * Substitutions … … 87 85 88 86 IF( ln_top_euler) THEN 89 r2dt = rdttrc (1)! = rdttrc (use Euler time stepping)87 r2dt = rdttrc ! = rdttrc (use Euler time stepping) 90 88 ELSE 91 89 IF( neuler == 0 .AND. kt == nittrc000 ) THEN ! at nittrc000 92 r2dt = rdttrc (1)! = rdttrc (restarting with Euler time stepping)90 r2dt = rdttrc ! = rdttrc (restarting with Euler time stepping) 93 91 ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN ! at nittrc000 or nittrc000+1 94 r2dt = 2. * rdttrc (1)! = 2 rdttrc (leapfrog)92 r2dt = 2. * rdttrc ! = 2 rdttrc (leapfrog) 95 93 ENDIF 96 94 ENDIF -
branches/2016/dev_v3_6_STABLE_r6506_AGRIF_LIM3/NEMOGCM/NEMO/TOP_SRC/TRP/trczdf.F90
r5385 r7158 27 27 28 28 PUBLIC trc_zdf ! called by step.F90 29 PUBLIC trc_zdf_alloc ! called by nemogcm.F9030 29 31 30 INTEGER :: nzdf = 0 ! type vertical diffusion algorithm used 32 31 ! ! defined from ln_zdf... namlist logicals) 33 REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:) :: r2dt ! vertical profile time-step, = 2 rdttra34 ! ! except at nittrc000 (=rdttra) if neuler=032 REAL(wp) :: r2dttrc ! vertical profile time-step, = 2 rdt 33 ! ! except at nittrc000 (=rdt) if neuler=0 35 34 36 35 !! * Substitutions … … 45 44 CONTAINS 46 45 47 INTEGER FUNCTION trc_zdf_alloc()48 !!----------------------------------------------------------------------49 !! *** ROUTINE trc_zdf_alloc ***50 !!----------------------------------------------------------------------51 ALLOCATE( r2dt(jpk) , STAT=trc_zdf_alloc )52 !53 IF( trc_zdf_alloc /= 0 ) CALL ctl_warn('trc_zdf_alloc : failed to allocate array.')54 !55 END FUNCTION trc_zdf_alloc56 57 46 58 47 SUBROUTINE trc_zdf( kt ) … … 74 63 75 64 IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN ! at nittrc000 76 r2dt (:) = rdttrc(:)! = rdttrc (use or restarting with Euler time stepping)65 r2dttrc = rdttrc ! = rdttrc (use or restarting with Euler time stepping) 77 66 ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN ! at nittrc000 or nittrc000+1 78 r2dt (:) = 2. * rdttrc(:)! = 2 rdttrc (leapfrog)67 r2dttrc = 2. * rdttrc ! = 2 rdttrc (leapfrog) 79 68 ENDIF 80 69 … … 86 75 SELECT CASE ( nzdf ) ! compute lateral mixing trend and add it to the general trend 87 76 CASE ( -1 ) ! esopa: test all possibility with control print 88 CALL tra_zdf_exp( kt, nittrc000, 'TRC', r2dt , nn_trczdf_exp, trb, tra, jptra )77 CALL tra_zdf_exp( kt, nittrc000, 'TRC', r2dttrc, nn_trczdf_exp, trb, tra, jptra ) 89 78 WRITE(charout, FMT="('zdf1 ')") ; CALL prt_ctl_trc_info(charout) 90 79 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 91 CALL tra_zdf_imp( kt, nittrc000, 'TRC', r2dt , trb, tra, jptra )80 CALL tra_zdf_imp( kt, nittrc000, 'TRC', r2dttrc, trb, tra, jptra ) 92 81 WRITE(charout, FMT="('zdf2 ')") ; CALL prt_ctl_trc_info(charout) 93 82 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 94 CASE ( 0 ) ; CALL tra_zdf_exp( kt, nittrc000, 'TRC', r2dt , nn_trczdf_exp, trb, tra, jptra ) ! explicit scheme95 CASE ( 1 ) ; CALL tra_zdf_imp( kt, nittrc000, 'TRC', r2dt , trb, tra, jptra ) ! implicit scheme83 CASE ( 0 ) ; CALL tra_zdf_exp( kt, nittrc000, 'TRC', r2dttrc, nn_trczdf_exp, trb, tra, jptra ) ! explicit scheme 84 CASE ( 1 ) ; CALL tra_zdf_imp( kt, nittrc000, 'TRC', r2dttrc, trb, tra, jptra ) ! implicit scheme 96 85 97 86 END SELECT … … 100 89 DO jn = 1, jptra 101 90 DO jk = 1, jpkm1 102 ztrtrd(:,:,jk,jn) = ( ( tra(:,:,jk,jn) - trb(:,:,jk,jn) ) / r2dt (jk)) - ztrtrd(:,:,jk,jn)91 ztrtrd(:,:,jk,jn) = ( ( tra(:,:,jk,jn) - trb(:,:,jk,jn) ) / r2dttrc ) - ztrtrd(:,:,jk,jn) 103 92 END DO 104 93 CALL trd_tra( kt, 'TRC', jn, jptra_zdf, ztrtrd(:,:,:,jn) )
Note: See TracChangeset
for help on using the changeset viewer.