- Timestamp:
- 2015-11-20T09:39:06+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/TOP_SRC/TRP/trczdf.F90
r5038 r5901 11 11 !! 'key_top' TOP models 12 12 !!---------------------------------------------------------------------- 13 !! trc_ ldf: update the tracer trend with the lateral diffusion14 !! ldf_ctl: initialization, namelist read, and parameters control13 !! trc_zdf : update the tracer trend with the lateral diffusion 14 !! trc_zdf_ini : initialization, namelist read, and parameters control 15 15 !!---------------------------------------------------------------------- 16 USE oce_trc ! ocean dynamics and active tracers17 USE trc ! ocean passive tracers variables18 USE tr cnam_trp ! passive tracers transport namelistvariables19 USE trazdf_exp 20 USE trazdf_imp 21 USE tr d_oce22 USE trdtra 23 USE prtctl_trc 16 USE trc ! ocean passive tracers variables 17 USE oce_trc ! ocean dynamics and active tracers 18 USE trd_oce ! trends: ocean variables 19 USE trazdf_exp ! vertical diffusion: explicit (tra_zdf_exp routine) 20 USE trazdf_imp ! vertical diffusion: implicit (tra_zdf_imp routine) 21 USE trcldf ! passive tracers: lateral diffusion 22 USE trdtra ! trends manager: tracers 23 USE prtctl_trc ! Print control 24 24 25 25 IMPLICIT NONE 26 26 PRIVATE 27 27 28 PUBLIC trc_zdf ! called by step.F90 29 PUBLIC trc_zdf_alloc ! called by nemogcm.F90 28 PUBLIC trc_zdf ! called by step.F90 29 PUBLIC trc_zdf_ini ! called by nemogcm.F90 30 PUBLIC trc_zdf_alloc ! called by nemogcm.F90 31 32 ! !!** Vertical diffusion (nam_trczdf) ** 33 LOGICAL , PUBLIC :: ln_trczdf_exp !: explicit vertical diffusion scheme flag 34 INTEGER , PUBLIC :: nn_trczdf_exp !: number of sub-time step (explicit time stepping) 30 35 31 36 INTEGER :: nzdf = 0 ! type vertical diffusion algorithm used … … 39 44 # include "vectopt_loop_substitute.h90" 40 45 !!---------------------------------------------------------------------- 41 !! NEMO/TOP 3. 3 , NEMO Consortium (2010)46 !! NEMO/TOP 3.7 , NEMO Consortium (2015) 42 47 !! $Id$ 43 48 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 71 76 IF( nn_timing == 1 ) CALL timing_start('trc_zdf') 72 77 ! 73 IF( kt == nittrc000 ) CALL zdf_ctl ! initialisation & control of options 74 75 IF( ln_top_euler) THEN 76 r2dt(:) = rdttrc(:) ! = rdttrc (use Euler time stepping) 77 ELSE 78 IF( neuler == 0 .AND. kt == nittrc000 ) THEN ! at nittrc000 79 r2dt(:) = rdttrc(:) ! = rdttrc (restarting with Euler time stepping) 80 ELSEIF( kt <= nittrc000 + 1 ) THEN ! at nittrc000 or nittrc000+1 81 r2dt(:) = 2. * rdttrc(:) ! = 2 rdttrc (leapfrog) 82 ENDIF 78 IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN ! at nittrc000 79 r2dt(:) = rdttrc(:) ! = rdttrc (use or restarting with Euler time stepping) 80 ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN ! at nittrc000 or nittrc000+1 81 r2dt(:) = 2. * rdttrc(:) ! = 2 rdttrc (leapfrog) 83 82 ENDIF 84 83 … … 89 88 90 89 SELECT CASE ( nzdf ) ! compute lateral mixing trend and add it to the general trend 91 CASE ( -1 ) ! esopa: test all possibility with control print92 CALL tra_zdf_exp( kt, nittrc000, 'TRC', r2dt, nn_trczdf_exp, trb, tra, jptra )93 WRITE(charout, FMT="('zdf1 ')") ; CALL prt_ctl_trc_info(charout)94 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' )95 CALL tra_zdf_imp( kt, nittrc000, 'TRC', r2dt, trb, tra, jptra )96 WRITE(charout, FMT="('zdf2 ')") ; CALL prt_ctl_trc_info(charout)97 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' )98 90 CASE ( 0 ) ; CALL tra_zdf_exp( kt, nittrc000, 'TRC', r2dt, nn_trczdf_exp, trb, tra, jptra ) ! explicit scheme 99 91 CASE ( 1 ) ; CALL tra_zdf_imp( kt, nittrc000, 'TRC', r2dt, trb, tra, jptra ) ! implicit scheme 100 101 92 END SELECT 102 93 … … 121 112 122 113 123 SUBROUTINE zdf_ctl114 SUBROUTINE trc_zdf_ini 124 115 !!---------------------------------------------------------------------- 125 !! *** ROUTINE zdf_ctl***116 !! *** ROUTINE trc_zdf_ini *** 126 117 !! 127 118 !! ** Purpose : Choose the vertical mixing scheme … … 132 123 !! NB: The implicit scheme is required when using : 133 124 !! - rotated lateral mixing operator 134 !! - TKE, GLS or KPPvertical mixing scheme125 !! - TKE, GLS vertical mixing scheme 135 126 !!---------------------------------------------------------------------- 136 137 ! Define the vertical tracer physics scheme 138 ! ========================================== 139 140 ! Choice from ln_zdfexp already read in namelist in zdfini module 141 IF( ln_trczdf_exp ) THEN ! use explicit scheme 142 nzdf = 0 143 ELSE ! use implicit scheme 144 nzdf = 1 127 INTEGER :: ios ! Local integer output status for namelist read 128 !! 129 NAMELIST/namtrc_zdf/ ln_trczdf_exp , nn_trczdf_exp 130 !!---------------------------------------------------------------------- 131 ! 132 REWIND( numnat_ref ) ! namtrc_zdf in reference namelist 133 READ ( numnat_ref, namtrc_zdf, IOSTAT = ios, ERR = 905) 134 905 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_zdf in reference namelist', lwp ) 135 ! 136 REWIND( numnat_cfg ) ! namtrc_zdf in configuration namelist 137 READ ( numnat_cfg, namtrc_zdf, IOSTAT = ios, ERR = 906 ) 138 906 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_zdf in configuration namelist', lwp ) 139 IF(lwm) WRITE ( numont, namtrc_zdf ) 140 ! 141 IF(lwp) THEN ! Control print 142 WRITE(numout,*) 143 WRITE(numout,*) ' Namelist namtrc_zdf : set vertical diffusion parameters' 144 WRITE(numout,*) ' time splitting / backward scheme ln_trczdf_exp = ', ln_trczdf_exp 145 WRITE(numout,*) ' number of time step nn_trczdf_exp = ', nn_trczdf_exp 145 146 ENDIF 146 147 147 ! Force implicit schemes 148 IF( ln_trcldf_iso ) nzdf = 1 ! iso-neutral lateral physics 149 IF( ln_trcldf_hor .AND. ln_sco ) nzdf = 1 ! horizontal lateral physics in s-coordinate 150 #if defined key_zdftke || defined key_zdfgls || defined key_zdfkpp 151 nzdf = 1 ! TKE, GLS or KPP physics 152 #endif 153 IF( ln_trczdf_exp .AND. nzdf == 1 ) THEN 154 CALL ctl_stop( 'trc_zdf : If using the rotated lateral mixing operator or TKE, GLS or KPP vertical scheme ', & 155 & ' the implicit scheme is required, set ln_trczdf_exp = .false.' ) 148 ! ! Define the vertical tracer physics scheme 149 IF( ln_trczdf_exp ) THEN ; nzdf = 0 ! explicit scheme 150 ELSE ; nzdf = 1 ! implicit scheme 156 151 ENDIF 157 152 158 ! Test: esopa 159 IF( lk_esopa ) nzdf = -1 ! All schemes used 153 ! ! Force implicit schemes 154 IF( ln_trcldf_iso ) nzdf = 1 ! iso-neutral lateral physics 155 IF( ln_trcldf_hor .AND. ln_sco ) nzdf = 1 ! horizontal lateral physics in s-coordinate 156 #if defined key_zdftke || defined key_zdfgls 157 nzdf = 1 ! TKE or GLS physics 158 #endif 159 IF( ln_trczdf_exp .AND. nzdf == 1 ) & 160 CALL ctl_stop( 'trc_zdf : If using the rotated lateral mixing operator or TKE, GLS vertical scheme ', & 161 & ' the implicit scheme is required, set ln_trczdf_exp = .false.' ) 160 162 161 163 IF(lwp) THEN … … 163 165 WRITE(numout,*) 'trc:zdf_ctl : vertical passive tracer physics scheme' 164 166 WRITE(numout,*) '~~~~~~~~~~~' 165 IF( nzdf == -1 ) WRITE(numout,*) ' ESOPA test All scheme used'166 167 IF( nzdf == 0 ) WRITE(numout,*) ' Explicit time-splitting scheme' 167 168 IF( nzdf == 1 ) WRITE(numout,*) ' Implicit (euler backward) scheme' 168 169 ENDIF 169 170 END SUBROUTINE zdf_ctl 170 ! 171 END SUBROUTINE trc_zdf_ini 172 171 173 #else 172 174 !!----------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.