Changeset 1380 for palm/trunk/SOURCE/subsidence.f90
- Timestamp:
- Apr 28, 2014 12:40:45 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/subsidence.f90
r1366 r1380 20 20 ! Current revisions: 21 21 ! ----------------- 22 ! 22 ! Shifting only necessary in case of scalar Rayleigh damping 23 23 ! 24 24 ! Former revisions: … … 150 150 151 151 USE control_parameters, & 152 ONLY: dt_3d, intermediate_timestep_count, large_scale_forcing 152 ONLY: dt_3d, intermediate_timestep_count, large_scale_forcing, & 153 scalar_rayleigh_damping 153 154 154 155 USE indices, & … … 204 205 !-- Shifting of the initial profile is especially necessary with Rayleigh 205 206 !-- damping switched on 206 207 DO k = nzb, nzt 208 IF ( w_subs(k) < 0.0_wp ) THEN ! large-scale subsidence 209 var_mod(k) = var_init(k) - dt_3d * w_subs(k) * & 210 ( var_init(k+1) - var_init(k) ) * ddzu(k+1) 211 ENDIF 212 ENDDO 213 ! 214 !-- At the upper boundary, the initial profile is shifted with aid of 215 !-- the gradient tmp_grad. (This is ok if the gradients are linear.) 216 IF ( w_subs(nzt) < 0.0_wp ) THEN 217 tmp_grad = ( var_init(nzt+1) - var_init(nzt) ) * ddzu(nzt+1) 218 var_mod(nzt+1) = var_init(nzt+1) - & 219 dt_3d * w_subs(nzt+1) * tmp_grad 207 IF ( scalar_rayleigh_damping ) THEN 208 DO k = nzb, nzt 209 IF ( w_subs(k) < 0.0_wp ) THEN ! large-scale subsidence 210 var_mod(k) = var_init(k) - dt_3d * w_subs(k) * & 211 ( var_init(k+1) - var_init(k) ) * ddzu(k+1) 212 ENDIF 213 ENDDO 214 ! 215 !-- At the upper boundary, the initial profile is shifted with aid of 216 !-- the gradient tmp_grad. (This is ok if the gradients are linear.) 217 IF ( w_subs(nzt) < 0.0_wp ) THEN 218 tmp_grad = ( var_init(nzt+1) - var_init(nzt) ) * ddzu(nzt+1) 219 var_mod(nzt+1) = var_init(nzt+1) - & 220 dt_3d * w_subs(nzt+1) * tmp_grad 221 ENDIF 222 223 224 DO k = nzt+1, nzb+1, -1 225 IF ( w_subs(k) >= 0.0_wp ) THEN ! large-scale ascent 226 var_mod(k) = var_init(k) - dt_3d * w_subs(k) * & 227 ( var_init(k) - var_init(k-1) ) * ddzu(k) 228 ENDIF 229 ENDDO 230 ! 231 !-- At the lower boundary shifting is not necessary because the 232 !-- subsidence velocity w_subs(nzb) vanishes. 233 IF ( w_subs(nzb+1) >= 0.0_wp ) THEN 234 var_mod(nzb) = var_init(nzb) 235 ENDIF 236 237 var_init = var_mod 220 238 ENDIF 221 222 223 DO k = nzt+1, nzb+1, -1224 IF ( w_subs(k) >= 0.0_wp ) THEN ! large-scale ascent225 var_mod(k) = var_init(k) - dt_3d * w_subs(k) * &226 ( var_init(k) - var_init(k-1) ) * ddzu(k)227 ENDIF228 ENDDO229 !230 !-- At the lower boundary shifting is not necessary because the231 !-- subsidence velocity w_subs(nzb) vanishes.232 IF ( w_subs(nzb+1) >= 0.0_wp ) THEN233 var_mod(nzb) = var_init(nzb)234 ENDIF235 236 var_init = var_mod237 239 238 240 … … 245 247 246 248 USE control_parameters, & 247 ONLY: dt_3d, intermediate_timestep_count, large_scale_forcing 249 ONLY: dt_3d, intermediate_timestep_count, large_scale_forcing, & 250 scalar_rayleigh_damping 248 251 249 252 USE indices, & … … 293 296 !-- Shifting of the initial profile is especially necessary with Rayleigh 294 297 !-- damping switched on 295 IF ( i == nxl .AND. j == nys ) THEN ! shifting only once per PE 296 297 DO k = nzb, nzt 298 IF ( w_subs(k) < 0.0_wp ) THEN ! large-scale subsidence 299 var_mod(k) = var_init(k) - dt_3d * w_subs(k) * & 300 ( var_init(k+1) - var_init(k) ) * ddzu(k+1) 298 IF ( scalar_rayleigh_damping ) THEN 299 IF ( i == nxl .AND. j == nys ) THEN ! shifting only once per PE 300 301 DO k = nzb, nzt 302 IF ( w_subs(k) < 0.0_wp ) THEN ! large-scale subsidence 303 var_mod(k) = var_init(k) - dt_3d * w_subs(k) * & 304 ( var_init(k+1) - var_init(k) ) * ddzu(k+1) 305 ENDIF 306 ENDDO 307 ! 308 !-- At the upper boundary, the initial profile is shifted with aid of 309 !-- the gradient tmp_grad. (This is ok if the gradients are linear.) 310 IF ( w_subs(nzt) < 0.0_wp ) THEN 311 tmp_grad = ( var_init(nzt+1) - var_init(nzt) ) * ddzu(nzt+1) 312 var_mod(nzt+1) = var_init(nzt+1) - & 313 dt_3d * w_subs(nzt+1) * tmp_grad 301 314 ENDIF 302 ENDDO 303 ! 304 !-- At the upper boundary, the initial profile is shifted with aid of 305 !-- the gradient tmp_grad. (This is ok if the gradients are linear.) 306 IF ( w_subs(nzt) < 0.0_wp ) THEN 307 tmp_grad = ( var_init(nzt+1) - var_init(nzt) ) * ddzu(nzt+1) 308 var_mod(nzt+1) = var_init(nzt+1) - & 309 dt_3d * w_subs(nzt+1) * tmp_grad 315 316 317 DO k = nzt+1, nzb+1, -1 318 IF ( w_subs(k) >= 0.0_wp ) THEN ! large-scale ascent 319 var_mod(k) = var_init(k) - dt_3d * w_subs(k) * & 320 ( var_init(k) - var_init(k-1) ) * ddzu(k) 321 ENDIF 322 ENDDO 323 ! 324 !-- At the lower boundary shifting is not necessary because the 325 !-- subsidence velocity w_subs(nzb) vanishes. 326 IF ( w_subs(nzb+1) >= 0.0_wp ) THEN 327 var_mod(nzb) = var_init(nzb) 328 ENDIF 329 330 var_init = var_mod 331 310 332 ENDIF 311 312 313 DO k = nzt+1, nzb+1, -1314 IF ( w_subs(k) >= 0.0_wp ) THEN ! large-scale ascent315 var_mod(k) = var_init(k) - dt_3d * w_subs(k) * &316 ( var_init(k) - var_init(k-1) ) * ddzu(k)317 ENDIF318 ENDDO319 !320 !-- At the lower boundary shifting is not necessary because the321 !-- subsidence velocity w_subs(nzb) vanishes.322 IF ( w_subs(nzb+1) >= 0.0_wp ) THEN323 var_mod(nzb) = var_init(nzb)324 ENDIF325 326 var_init = var_mod327 328 333 ENDIF 329 334
Note: See TracChangeset
for help on using the changeset viewer.