Changeset 492 for trunk/NEMO/TOP_SRC
- Timestamp:
- 2006-09-01T15:56:45+02:00 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/TOP_SRC/TRP/trctrp_ctl.F90
r439 r492 39 39 !! 40 40 !! ** Purpose : Control the consistency between cpp options for 41 !! tracer transport41 !! tracer transport 42 42 !! 43 43 !! History : … … 100 100 ! Control of Advection scheme options 101 101 ! ----------------------------------- 102 ioptio = 0 103 IF( ln_trcadv_cen2 ) ioptio = ioptio + 1 104 IF( ln_trcadv_tvd ) ioptio = ioptio + 1 105 IF( ln_trcadv_muscl ) ioptio = ioptio + 1 106 IF( ln_trcadv_muscl2 ) ioptio = ioptio + 1 107 IF( ln_trcadv_smolar ) ioptio = ioptio + 1 108 109 IF( lk_esopa ) THEN 110 IF(lwp) WRITE(numout,*) ' esopa control : the use of all scheme is forced' 111 ln_trcadv_cen2 = .TRUE. 112 ln_trcadv_tvd = .TRUE. 113 ln_trcadv_muscl = .TRUE. 114 ln_trcadv_muscl2 = .TRUE. 115 ln_trcadv_smolar = .TRUE. 116 ELSEIF( ioptio > 1 .OR. ioptio == 0 ) THEN 117 IF(lwp) WRITE(numout,cform_err) 118 IF(lwp) WRITE(numout,*) ' Choose one advection scheme in namelist nam_trcadv' 119 IF(lwp) WRITE(numout,*) ' *** ***********' 120 nstop = nstop + 1 121 ENDIF 122 123 IF( n_cla == 1 .AND. .NOT. ln_trcadv_cen2 ) THEN 124 IF(lwp) WRITE(numout,cform_err) 125 IF(lwp) WRITE(numout,*) ' cross-land advection only with 2nd order advection scheme' 126 nstop = nstop + 1 127 ENDIF 128 129 IF( lk_trccfg_1d ) THEN 102 IF( lk_trccfg_1d ) THEN 130 103 ln_trcadv_cen2 = .FALSE. ; ln_trcadv_tvd = .FALSE. ; ln_trcadv_muscl = .FALSE. 131 104 ln_trcadv_muscl2 = .FALSE. ; ln_trcadv_smolar = .FALSE. 132 IF(lwp) WRITE(numout,*) ' ******* 1D configuration : No advection on passive tracers *******' 133 IF(lwp) WRITE(numout,*) ' ******* *******' 105 IF(lwp) WRITE(numout,*) ' *** 1D configuration : No advection on passive tracers ' 106 IF(lwp) WRITE(numout,*) 107 ELSE 108 ioptio = 0 109 IF( ln_trcadv_cen2 ) ioptio = ioptio + 1 110 IF( ln_trcadv_tvd ) ioptio = ioptio + 1 111 IF( ln_trcadv_muscl ) ioptio = ioptio + 1 112 IF( ln_trcadv_muscl2 ) ioptio = ioptio + 1 113 IF( ln_trcadv_smolar ) ioptio = ioptio + 1 114 115 IF( lk_esopa ) THEN 116 IF(lwp) WRITE(numout,*) ' esopa control : the use of all scheme is forced' 117 ln_trcadv_cen2 = .TRUE. 118 ln_trcadv_tvd = .TRUE. 119 ln_trcadv_muscl = .TRUE. 120 ln_trcadv_muscl2 = .TRUE. 121 ln_trcadv_smolar = .TRUE. 122 ELSEIF( ioptio > 1 .OR. ioptio == 0 ) THEN 123 CALL ctl_stop( ' Choose one advection scheme in namelist nam_trcadv' ) 124 ENDIF 125 126 IF( n_cla == 1 .AND. .NOT. ln_trcadv_cen2 ) & 127 & CALL ctl_stop( ' cross-land advection only with 2nd order advection scheme ' ) 134 128 ENDIF 135 129 … … 156 150 ! Parameter control 157 151 158 ! control the input159 ioptio = 0160 IF( ln_trcldf_lap ) ioptio = ioptio + 1161 IF( ln_trcldf_bilap ) ioptio = ioptio + 1162 IF( ioptio /= 1 ) THEN163 IF(lwp) WRITE(numout,cform_err)164 IF(lwp) WRITE(numout,*) ' use ONE of the 2 lap/bilap operator type on tracer'165 nstop = nstop + 1166 ENDIF167 ioptio = 0168 IF( ln_trcldf_level ) ioptio = ioptio + 1169 IF( ln_trcldf_hor ) ioptio = ioptio + 1170 IF( ln_trcldf_iso ) ioptio = ioptio + 1171 IF( ioptio /= 1 ) THEN172 IF(lwp) WRITE(numout,cform_err)173 IF(lwp) WRITE(numout,*) ' use only ONE direction (level/hor/iso)'174 nstop = nstop + 1175 ENDIF176 177 ! ... Choice of the lateral scheme used178 IF( lk_trcldf_eiv ) THEN179 IF(lwp) WRITE(numout,*) ' eddy induced velocity on tracers'180 IF( .NOT.ln_trcldf_iso .OR. ln_trcldf_bilap ) THEN181 IF(lwp) WRITE(numout,cform_err)182 IF(lwp) WRITE(numout,*) ' the eddy induced velocity on tracers requires isopycnal laplacian diffusion'183 nstop = nstop + 1184 ENDIF185 ENDIF186 187 IF( lk_sco ) THEN ! s-coordinates: rotation required for horizontal or isopycnal mixing188 IF( ( ln_trcldf_iso .OR. ln_trcldf_hor ) .AND. .NOT.lk_ldfslp ) THEN189 IF(lwp) WRITE(numout,cform_err)190 IF(lwp) WRITE(numout,*) ' the rotation of the diffusive tensor require key_ldfslp'191 IF( .NOT.lk_esopa ) nstop = nstop + 1192 ENDIF193 ELSE ! z-coordinates with/without partial step:194 ln_trcldf_level = ln_trcldf_level .OR. ln_trcldf_hor ! level diffusion = horizontal diffusion195 ln_trcldf_hor = .FALSE.196 IF(lwp) WRITE(numout,*) ' horizontal mixing in z-coord or partial steps: force ln_trcldf_level = T'197 IF(lwp) WRITE(numout,*) ' and force ln_trcldf_hor = F'198 IF( ln_trcldf_iso .AND. .NOT.lk_ldfslp ) THEN ! rotation required for isopycnal mixing199 IF(lwp) WRITE(numout,cform_err)200 IF(lwp) WRITE(numout,*) ' the rotation of the diffusive tensor require key_ldfslp'201 IF( .NOT.lk_esopa ) nstop = nstop + 1202 ENDIF203 ENDIF204 205 l_trcldf_lap = ln_trcldf_lap .AND. ln_trcldf_level ! iso-level laplacian operator206 l_trcldf_bilap = ln_trcldf_bilap .AND. ln_trcldf_level ! iso-level bilaplacian operator207 l_trcldf_bilapg = ln_trcldf_bilap .AND. ln_trcldf_hor ! geopotential bilap. (s-coord)208 l_trcldf_iso = ln_trcldf_lap .AND. & ! laplacian operator209 & ( ln_trcldf_iso .OR. ln_trcldf_hor ) & ! iso-neutral (z-coord) or horizontal (s-coord)210 & .AND. .NOT.lk_zps211 l_trcldf_iso_zps = ln_trcldf_lap .AND. & ! laplacian operator212 & ( ln_trcldf_iso .OR. ln_trcldf_hor ) & ! iso-neutral (partial steps)213 & .AND. lk_zps ! or geopotential in mixed partial steps/s-coord214 l_trczdf_iso = .FALSE.215 l_trczdf_iso_vo = .FALSE.216 IF( l_trcldf_iso ) l_trczdf_iso = .TRUE.217 IF( l_trcldf_iso_zps ) l_trczdf_iso = .TRUE.218 #if defined key_vectopt_memory219 IF( l_trczdf_iso ) THEN220 l_trczdf_iso = .FALSE.221 l_trczdf_iso_vo = .TRUE.222 ENDIF223 #endif224 225 226 ioptio = 0227 IF( l_trcldf_lap ) ioptio = ioptio + 1228 IF( l_trcldf_bilap ) ioptio = ioptio + 1229 IF( l_trcldf_bilapg ) ioptio = ioptio + 1230 IF( l_trcldf_iso ) ioptio = ioptio + 1231 IF( l_trcldf_iso_zps ) ioptio = ioptio + 1232 IF( ioptio /= 1 ) THEN233 IF(lwp) WRITE(numout,cform_err)234 IF(lwp) WRITE(numout,*) ' this combination of operator and direction has not been implemented'235 nstop = nstop + 1236 ENDIF237 238 IF( lk_esopa ) THEN239 l_trcldf_lap = .TRUE. ; l_trcldf_bilap = .TRUE. ; l_trcldf_bilapg = .TRUE.240 l_trcldf_iso = .TRUE. ; l_trcldf_iso_zps = .TRUE.241 l_trczdf_iso = .TRUE. ; l_trczdf_iso_vo = .TRUE.242 IF(lwp ) WRITE(numout,*) ' esopa test: use all lateral physics options'243 ENDIF244 245 152 IF( .NOT. ln_trcldf_diff .OR. lk_trccfg_1d ) THEN 246 153 l_trcldf_lap = .FALSE. ; l_trcldf_bilap = .FALSE. ; l_trcldf_bilapg = .FALSE. 247 154 l_trcldf_iso = .FALSE. ; l_trcldf_iso_zps = .FALSE. 248 155 l_trczdf_iso = .FALSE. ; l_trczdf_iso_vo = .FALSE. 249 IF(lwp ) WRITE(numout,*) '*** ********** No lateral physics on passive tracers *****************'250 IF(lwp ) WRITE(numout,*) '************* *****************'156 IF(lwp ) WRITE(numout,*) '*** No lateral diffusion on passive tracers ' 157 IF(lwp ) WRITE(numout,*) 251 158 ELSE 159 ! control the input 160 ioptio = 0 161 IF( ln_trcldf_lap ) ioptio = ioptio + 1 162 IF( ln_trcldf_bilap ) ioptio = ioptio + 1 163 IF( ioptio /= 1 ) & 164 & CALL ctl_stop( ' use ONE of the 2 lap/bilap operator type on tracer' ) 165 166 ioptio = 0 167 IF( ln_trcldf_level ) ioptio = ioptio + 1 168 IF( ln_trcldf_hor ) ioptio = ioptio + 1 169 IF( ln_trcldf_iso ) ioptio = ioptio + 1 170 IF( ioptio /= 1 ) & 171 & CALL ctl_stop( ' use only ONE direction (level/hor/iso)' ) 172 173 ! ... Choice of the lateral scheme used 174 IF( lk_trcldf_eiv ) THEN 175 IF(lwp) WRITE(numout,*) ' eddy induced velocity on tracers' 176 IF( .NOT.ln_trcldf_iso .OR. ln_trcldf_bilap ) & 177 & CALL ctl_stop( ' the eddy induced velocity on tracers ',& 178 & 'requires isopycnal laplacian diffusion' ) 179 ENDIF 180 181 IF( ln_sco ) THEN ! s-coordinates: rotation required for horizontal or isopycnal mixing 182 IF( ( ln_trcldf_iso .OR. ln_trcldf_hor ) .AND. .NOT.lk_ldfslp ) & 183 & CALL ctl_stop( ' the rotation of the diffusive tensor require key_ldfslp' ) 184 ELSE ! z-coordinates with/without partial step: 185 ln_trcldf_level = ln_trcldf_level .OR. ln_trcldf_hor ! level diffusion = horizontal diffusion 186 ln_trcldf_hor = .FALSE. 187 IF(lwp) WRITE(numout,*) ' horizontal mixing in z-coord or partial steps: force ln_trcldf_level = T' 188 IF(lwp) WRITE(numout,*) ' and force ln_trcldf_hor = F' 189 IF( ln_trcldf_iso .AND. .NOT.lk_ldfslp ) & ! rotation required for isopycnal mixing 190 & CALL ctl_stop( ' the rotation of the diffusive tensor require key_ldfslp' ) 191 ENDIF 192 193 l_trcldf_lap = ln_trcldf_lap .AND. ln_trcldf_level ! iso-level laplacian operator 194 l_trcldf_bilap = ln_trcldf_bilap .AND. ln_trcldf_level ! iso-level bilaplacian operator 195 l_trcldf_bilapg = ln_trcldf_bilap .AND. ln_trcldf_hor ! geopotential bilap. (s-coord) 196 l_trcldf_iso = ln_trcldf_lap .AND. & ! laplacian operator 197 & ( ln_trcldf_iso .OR. ln_trcldf_hor ) & ! iso-neutral (z-coord) or horizontal (s-coord) 198 & .AND. .NOT.ln_zps 199 l_trcldf_iso_zps = ln_trcldf_lap .AND. & ! laplacian operator 200 & ( ln_trcldf_iso .OR. ln_trcldf_hor ) & ! iso-neutral (partial steps) 201 & .AND. ln_zps ! or geopotential in mixed partial steps/s-coord 202 l_trczdf_iso = .FALSE. 203 l_trczdf_iso_vo = .FALSE. 204 IF( l_trcldf_iso ) l_trczdf_iso = .TRUE. 205 IF( l_trcldf_iso_zps ) l_trczdf_iso = .TRUE. 206 #if defined key_vectopt_memory 207 IF( l_trczdf_iso ) THEN 208 l_trczdf_iso = .FALSE. 209 l_trczdf_iso_vo = .TRUE. 210 ENDIF 211 #endif 212 213 214 ioptio = 0 215 IF( l_trcldf_lap ) ioptio = ioptio + 1 216 IF( l_trcldf_bilap ) ioptio = ioptio + 1 217 IF( l_trcldf_bilapg ) ioptio = ioptio + 1 218 IF( l_trcldf_iso ) ioptio = ioptio + 1 219 IF( l_trcldf_iso_zps ) ioptio = ioptio + 1 220 IF( ioptio /= 1 ) & 221 & CALL ctl_stop( ' this combination of operator and direction has not been implemented' ) 222 223 IF( lk_esopa ) THEN 224 l_trcldf_lap = .TRUE. ; l_trcldf_bilap = .TRUE. ; l_trcldf_bilapg = .TRUE. 225 l_trcldf_iso = .TRUE. ; l_trcldf_iso_zps = .TRUE. 226 l_trczdf_iso = .TRUE. ; l_trczdf_iso_vo = .TRUE. 227 IF(lwp ) WRITE(numout,*) ' esopa test: use all lateral physics options' 228 ENDIF 229 252 230 ! ... Space variation of eddy coefficients 253 231 ioptio = 0 254 #if defined key_traldf_c3d 232 #if defined key_traldf_c3d || defined key_off_degrad 255 233 IF(lwp) WRITE(numout,*) 'tracer mixing coef. = F( latitude, longitude, depth)' 256 234 ioptio = ioptio + 1 257 235 #endif 258 #if defined key_traldf_c2d 236 #if defined key_traldf_c2d && ! defined key_off_degrad 259 237 IF(lwp) WRITE(numout,*) 'tracer mixing coef. = F( latitude, longitude)' 260 238 ioptio = ioptio + 1 261 239 #endif 262 #if defined key_traldf_c1d 240 #if defined key_traldf_c1d && ! defined key_off_degrad 263 241 IF(lwp) WRITE(numout,*) 'tracer mixing coef. = F( depth )' 264 242 ioptio = ioptio + 1 265 IF( lk_sco ) THEN 266 IF(lwp) WRITE(numout,cform_err) 267 IF(lwp) WRITE(numout,*) ' key_traldf_c1d cannot be used in s-coordinate (key_s_coord)' 268 nstop = nstop + 1 269 ENDIF 243 IF( ln_sco ) & 244 & CALL ctl_stop( ' key_traldf_c1d cannot be used in s-coordinate ' ) 270 245 #endif 271 246 IF( ioptio == 0 ) THEN 272 247 IF(lwp) WRITE(numout,*) ' tracer mixing coef. = constant (default option)' 273 248 ELSEIF( ioptio > 1 ) THEN 274 IF(lwp) WRITE(numout,cform_err) 275 IF(lwp) WRITE(numout,*) ' use only one of the following keys:', & 276 & ' key_traldf_c3d, key_traldf_c2d, key_traldf_c1d' 277 nstop = nstop + 1 249 CALL ctl_stop( ' use only one of the following keys:', & 250 & ' key_traldf_c3d, key_traldf_c2d, key_traldf_c1d' ) 278 251 ENDIF 279 252 280 253 IF( l_trcldf_bilap .OR. l_trcldf_bilapg ) THEN 281 254 IF(lwp) WRITE(numout,*) ' biharmonic tracer diffusion' 282 IF( ahtrc0 > 0 .AND. .NOT. lk_esopa ) THEN 283 IF(lwp) WRITE(numout,cform_err) 284 IF(lwp) WRITE(numout,*) ' The horizontal diffusivity coef. aht0 must be negative' 285 nstop = nstop + 1 286 ENDIF 255 IF( ahtrc0 > 0 .AND. .NOT. lk_esopa ) & 256 & CALL ctl_stop( ' The horizontal diffusivity coef. aht0 must be negative' ) 287 257 ELSE 288 258 IF(lwp) WRITE(numout,*) ' harmonic tracer diffusion (default)' 289 IF( ahtrc0 < 0 .AND. .NOT. lk_esopa ) THEN 290 IF(lwp) WRITE(numout,cform_err) 291 IF(lwp) WRITE(numout,*) 'The horizontal diffusivity coef. aht0 must be positive' 292 nstop = nstop + 1 293 ENDIF 259 IF( ahtrc0 < 0 .AND. .NOT. lk_esopa ) & 260 & CALL ctl_stop( ' The horizontal diffusivity coef. aht0 must be positive' ) 294 261 ENDIF 295 262 ENDIF … … 364 331 365 332 CASE DEFAULT 366 IF(lwp) WRITE(numout,cform_err) 367 IF(lwp) WRITE(numout,*) ' bad flag value for ndmptr= ', ndmptr368 nstop = nstop + 1333 334 WRITE(ctmp1,*) ' bad flag value for nmldmp = ', ndmptr 335 CALL ctl_stop(ctmp1) 369 336 370 337 END SELECT … … 383 350 384 351 CASE DEFAULT 385 IF(lwp) WRITE(numout,cform_err) 386 IF(lwp) WRITE(numout,*) ' bad flag value for nmldmptr = ', nmldmptr 387 nstop = nstop + 1 352 WRITE(ctmp1,*) ' bad flag value for nmldmp = ', nmldmptr 353 CALL ctl_stop(ctmp1) 388 354 389 355 END SELECT
Note: See TracChangeset
for help on using the changeset viewer.