Changeset 6041 for branches/2015/dev_r5776_UKMO2_OBS_efficiency_improvs/NEMOGCM/NEMO/TOP_SRC/TRP/trczdf.F90
- Timestamp:
- 2015-12-14T10:06:06+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5776_UKMO2_OBS_efficiency_improvs/NEMOGCM/NEMO/TOP_SRC/TRP/trczdf.F90
r5385 r6041 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 options74 75 78 IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN ! at nittrc000 76 79 r2dt(:) = rdttrc(:) ! = rdttrc (use or restarting with Euler time stepping) … … 85 88 86 89 SELECT CASE ( nzdf ) ! compute lateral mixing trend and add it to the general trend 87 CASE ( -1 ) ! esopa: test all possibility with control print88 CALL tra_zdf_exp( kt, nittrc000, 'TRC', r2dt, nn_trczdf_exp, trb, tra, jptra )89 WRITE(charout, FMT="('zdf1 ')") ; CALL prt_ctl_trc_info(charout)90 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' )91 CALL tra_zdf_imp( kt, nittrc000, 'TRC', r2dt, trb, tra, jptra )92 WRITE(charout, FMT="('zdf2 ')") ; CALL prt_ctl_trc_info(charout)93 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' )94 90 CASE ( 0 ) ; CALL tra_zdf_exp( kt, nittrc000, 'TRC', r2dt, nn_trczdf_exp, trb, tra, jptra ) ! explicit scheme 95 91 CASE ( 1 ) ; CALL tra_zdf_imp( kt, nittrc000, 'TRC', r2dt, trb, tra, jptra ) ! implicit scheme 96 97 92 END SELECT 98 93 … … 117 112 118 113 119 SUBROUTINE zdf_ctl114 SUBROUTINE trc_zdf_ini 120 115 !!---------------------------------------------------------------------- 121 !! *** ROUTINE zdf_ctl***116 !! *** ROUTINE trc_zdf_ini *** 122 117 !! 123 118 !! ** Purpose : Choose the vertical mixing scheme … … 128 123 !! NB: The implicit scheme is required when using : 129 124 !! - rotated lateral mixing operator 130 !! - TKE, GLS or KPPvertical mixing scheme125 !! - TKE, GLS vertical mixing scheme 131 126 !!---------------------------------------------------------------------- 132 133 ! Define the vertical tracer physics scheme 134 ! ========================================== 135 136 ! Choice from ln_zdfexp already read in namelist in zdfini module 137 IF( ln_trczdf_exp ) THEN ! use explicit scheme 138 nzdf = 0 139 ELSE ! use implicit scheme 140 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 141 146 ENDIF 142 147 143 ! Force implicit schemes 144 IF( ln_trcldf_iso ) nzdf = 1 ! iso-neutral lateral physics 145 IF( ln_trcldf_hor .AND. ln_sco ) nzdf = 1 ! horizontal lateral physics in s-coordinate 146 #if defined key_zdftke || defined key_zdfgls || defined key_zdfkpp 147 nzdf = 1 ! TKE, GLS or KPP physics 148 #endif 149 IF( ln_trczdf_exp .AND. nzdf == 1 ) THEN 150 CALL ctl_stop( 'trc_zdf : If using the rotated lateral mixing operator or TKE, GLS or KPP vertical scheme ', & 151 & ' 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 152 151 ENDIF 153 152 154 ! Test: esopa 155 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.' ) 156 162 157 163 IF(lwp) THEN … … 159 165 WRITE(numout,*) 'trc:zdf_ctl : vertical passive tracer physics scheme' 160 166 WRITE(numout,*) '~~~~~~~~~~~' 161 IF( nzdf == -1 ) WRITE(numout,*) ' ESOPA test All scheme used'162 167 IF( nzdf == 0 ) WRITE(numout,*) ' Explicit time-splitting scheme' 163 168 IF( nzdf == 1 ) WRITE(numout,*) ' Implicit (euler backward) scheme' 164 169 ENDIF 165 166 END SUBROUTINE zdf_ctl 170 ! 171 END SUBROUTINE trc_zdf_ini 172 167 173 #else 168 174 !!----------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.