Index: palm/trunk/SOURCE/diffusion_v.f90
===================================================================
--- palm/trunk/SOURCE/diffusion_v.f90 (revision 4360)
+++ palm/trunk/SOURCE/diffusion_v.f90 (revision 4583)
@@ -1,20 +1,19 @@
!> @file diffusion_v.f90
-!------------------------------------------------------------------------------!
+!--------------------------------------------------------------------------------------------------!
! This file is part of the PALM model system.
!
-! PALM is free software: you can redistribute it and/or modify it under the
-! terms of the GNU General Public License as published by the Free Software
-! Foundation, either version 3 of the License, or (at your option) any later
-! version.
-!
-! PALM is distributed in the hope that it will be useful, but WITHOUT ANY
-! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-! A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-!
-! You should have received a copy of the GNU General Public License along with
-! PALM. If not, see .
+! PALM is free software: you can redistribute it and/or modify it under the terms of the GNU General
+! Public License as published by the Free Software Foundation, either version 3 of the License, or
+! (at your option) any later version.
+!
+! PALM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
+! implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+! Public License for more details.
+!
+! You should have received a copy of the GNU General Public License along with PALM. If not, see
+! .
!
! Copyright 1997-2020 Leibniz Universitaet Hannover
-!------------------------------------------------------------------------------!
+!--------------------------------------------------------------------------------------------------!
!
! Current revisions:
@@ -25,13 +24,16 @@
! -----------------
! $Id$
-! Introduction of wall_flags_total_0, which currently sets bits based on static
-! topography information used in wall_flags_static_0
-!
+! file re-formatted to follow the PALM coding standard
+!
+! 4360 2020-01-07 11:25:50Z suehring
+! Introduction of wall_flags_total_0, which currently sets bits based on static topography
+! information used in wall_flags_static_0
+!
! 4329 2019-12-10 15:46:36Z motisi
! Renamed wall_flags_0 to wall_flags_static_0
-!
+!
! 4182 2019-08-22 15:20:23Z scharf
! Corrected "Former revisions" section
-!
+!
! 3655 2019-01-07 16:51:22Z knoop
! OpenACC port for SPEC
@@ -44,7 +46,7 @@
! ------------
!> Diffusion term of the v-component
-!------------------------------------------------------------------------------!
+!--------------------------------------------------------------------------------------------------!
MODULE diffusion_v_mod
-
+
PRIVATE
@@ -59,29 +61,27 @@
-!------------------------------------------------------------------------------!
+!--------------------------------------------------------------------------------------------------!
! Description:
! ------------
!> Call for all grid points
-!------------------------------------------------------------------------------!
+!--------------------------------------------------------------------------------------------------!
SUBROUTINE diffusion_v
- USE arrays_3d, &
- ONLY: ddzu, ddzw, km, tend, u, v, w, drho_air, rho_air_zw
-
- USE control_parameters, &
- ONLY: constant_top_momentumflux, use_surface_fluxes, &
- use_top_fluxes
-
- USE grid_variables, &
+ USE arrays_3d, &
+ ONLY: ddzu, ddzw, drho_air, km, rho_air_zw, tend, u, v, w
+
+ USE control_parameters, &
+ ONLY: constant_top_momentumflux, use_surface_fluxes, use_top_fluxes
+
+ USE grid_variables, &
ONLY: ddx, ddy, ddy2
-
- USE indices, &
+
+ USE indices, &
ONLY: nxl, nxr, nyn, nysv, nzb, nzt, wall_flags_total_0
-
+
USE kinds
- USE surface_mod, &
- ONLY : surf_def_h, surf_def_v, surf_lsm_h, surf_lsm_v, surf_usm_h, &
- surf_usm_v
+ USE surface_mod, &
+ ONLY : surf_def_h, surf_def_v, surf_lsm_h, surf_lsm_v, surf_usm_h, surf_usm_v
IMPLICIT NONE
@@ -100,8 +100,8 @@
REAL(wp) :: kmzm !< diffusion coefficient on bottom of the gridbox - interpolated onto yv-zw grid
REAL(wp) :: kmzp !< diffusion coefficient on top of the gridbox - interpolated onto yv-zw grid
- REAL(wp) :: mask_bottom !< flag to mask vertical upward-facing surface
- REAL(wp) :: mask_east !< flag to mask vertical surface south of the grid point
- REAL(wp) :: mask_west !< flag to mask vertical surface north of the grid point
- REAL(wp) :: mask_top !< flag to mask vertical downward-facing surface
+ REAL(wp) :: mask_bottom !< flag to mask vertical upward-facing surface
+ REAL(wp) :: mask_east !< flag to mask vertical surface south of the grid point
+ REAL(wp) :: mask_west !< flag to mask vertical surface north of the grid point
+ REAL(wp) :: mask_top !< flag to mask vertical downward-facing surface
!$ACC PARALLEL LOOP COLLAPSE(2) PRIVATE(i, j, k, l, m) &
@@ -122,8 +122,8 @@
!
-!-- Predetermine flag to mask topography and wall-bounded grid points.
-!-- It is sufficient to masked only east- and west-facing surfaces, which
-!-- need special treatment for the v-component.
- flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 2 ) )
+!-- Predetermine flag to mask topography and wall-bounded grid points.
+!-- It is sufficient to masked only east- and west-facing surfaces, which need special
+!-- treatment for the v-component.
+ flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 2 ) )
mask_east = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i+1), 2 ) )
mask_west = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i-1), 2 ) )
@@ -133,26 +133,25 @@
kmxm = 0.25_wp * ( km(k,j,i)+km(k,j,i-1)+km(k,j-1,i)+km(k,j-1,i-1) )
- tend(k,j,i) = tend(k,j,i) + ( &
- mask_east * kmxp * ( &
- ( v(k,j,i+1) - v(k,j,i) ) * ddx &
- + ( u(k,j,i+1) - u(k,j-1,i+1) ) * ddy &
- ) &
- - mask_west * kmxm * ( &
- ( v(k,j,i) - v(k,j,i-1) ) * ddx &
- + ( u(k,j,i) - u(k,j-1,i) ) * ddy &
- ) &
- ) * ddx * flag &
- + 2.0_wp * ( &
- km(k,j,i) * ( v(k,j+1,i) - v(k,j,i) ) &
- - km(k,j-1,i) * ( v(k,j,i) - v(k,j-1,i) ) &
- ) * ddy2 * flag
+ tend(k,j,i) = tend(k,j,i) + ( &
+ mask_east * kmxp * ( &
+ ( v(k,j,i+1) - v(k,j,i) ) * ddx &
+ + ( u(k,j,i+1) - u(k,j-1,i+1) ) * ddy &
+ ) &
+ - mask_west * kmxm * ( &
+ ( v(k,j,i) - v(k,j,i-1) ) * ddx &
+ + ( u(k,j,i) - u(k,j-1,i) ) * ddy &
+ ) &
+ ) * ddx * flag &
+ + 2.0_wp * ( &
+ km(k,j,i) * ( v(k,j+1,i) - v(k,j,i) ) &
+ - km(k,j-1,i) * ( v(k,j,i) - v(k,j-1,i) ) &
+ ) * ddy2 * flag
ENDDO
!
-!-- Add horizontal momentum flux v'u' at east- (l=2) and west-facing (l=3)
-!-- surfaces. Note, in the the flat case, loops won't be entered as
-!-- start_index > end_index. Furtermore, note, no vertical natural surfaces
-!-- so far.
+!-- Add horizontal momentum flux v'u' at east- (l=2) and west-facing (l=3) surfaces. Note,
+!-- in the the flat case, loops won't be entered as start_index > end_index. Furtermore,
+!-- note, no vertical natural surfaces so far.
!-- Default-type surfaces
DO l = 2, 3
@@ -161,7 +160,6 @@
DO m = surf_s, surf_e
k = surf_def_v(l)%k(m)
- tend(k,j,i) = tend(k,j,i) + &
- surf_def_v(l)%mom_flux_uv(m) * ddx
- ENDDO
+ tend(k,j,i) = tend(k,j,i) + surf_def_v(l)%mom_flux_uv(m) * ddx
+ ENDDO
ENDDO
!
@@ -172,7 +170,6 @@
DO m = surf_s, surf_e
k = surf_lsm_v(l)%k(m)
- tend(k,j,i) = tend(k,j,i) + &
- surf_lsm_v(l)%mom_flux_uv(m) * ddx
- ENDDO
+ tend(k,j,i) = tend(k,j,i) + surf_lsm_v(l)%mom_flux_uv(m) * ddx
+ ENDDO
ENDDO
!
@@ -183,52 +180,42 @@
DO m = surf_s, surf_e
k = surf_usm_v(l)%k(m)
- tend(k,j,i) = tend(k,j,i) + &
- surf_usm_v(l)%mom_flux_uv(m) * ddx
- ENDDO
+ tend(k,j,i) = tend(k,j,i) + surf_usm_v(l)%mom_flux_uv(m) * ddx
+ ENDDO
ENDDO
!
-!-- Compute vertical diffusion. In case of simulating a surface layer,
-!-- respective grid diffusive fluxes are masked (flag 10) within this
-!-- loop, and added further below, else, simple gradient approach is
-!-- applied. Model top is also mask if top-momentum flux is given.
+!-- Compute vertical diffusion. In case of simulating a surface layer, respective grid
+!-- diffusive fluxes are masked (flag 10) within this loop, and added further below, else,
+!-- simple gradient approach is applied. Model top is also mask if top-momentum flux is
+!-- given.
DO k = nzb+1, nzt
!
-!-- Determine flags to mask topography below and above. Flag 2 is
-!-- used to mask topography in general, while flag 8 implies also
-!-- information about use_surface_fluxes. Flag 9 is used to control
-!-- momentum flux at model top.
- mask_bottom = MERGE( 1.0_wp, 0.0_wp, &
- BTEST( wall_flags_total_0(k-1,j,i), 8 ) )
- mask_top = MERGE( 1.0_wp, 0.0_wp, &
- BTEST( wall_flags_total_0(k+1,j,i), 8 ) ) * &
- MERGE( 1.0_wp, 0.0_wp, &
- BTEST( wall_flags_total_0(k+1,j,i), 9 ) )
- flag = MERGE( 1.0_wp, 0.0_wp, &
- BTEST( wall_flags_total_0(k,j,i), 2 ) )
+!-- Determine flags to mask topography below and above. Flag 2 is used to mask
+!-- topography in general, while flag 8 implies also information about
+!-- use_surface_fluxes. Flag 9 is used to control momentum flux at model top.
+ mask_bottom = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k-1,j,i), 8 ) )
+ mask_top = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k+1,j,i), 8 ) ) * &
+ MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k+1,j,i), 9 ) )
+ flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 2 ) )
!
!-- Interpolate eddy diffusivities on staggered gridpoints
- kmzp = 0.25_wp * &
- ( km(k,j,i)+km(k+1,j,i)+km(k,j-1,i)+km(k+1,j-1,i) )
- kmzm = 0.25_wp * &
- ( km(k,j,i)+km(k-1,j,i)+km(k,j-1,i)+km(k-1,j-1,i) )
-
- tend(k,j,i) = tend(k,j,i) &
- & + ( kmzp * ( ( v(k+1,j,i) - v(k,j,i) ) * ddzu(k+1) &
- & + ( w(k,j,i) - w(k,j-1,i) ) * ddy &
- & ) * rho_air_zw(k) * mask_top &
- & - kmzm * ( ( v(k,j,i) - v(k-1,j,i) ) * ddzu(k) &
- & + ( w(k-1,j,i) - w(k-1,j-1,i) ) * ddy &
- & ) * rho_air_zw(k-1) * mask_bottom &
- & ) * ddzw(k) * drho_air(k) * flag
+ kmzp = 0.25_wp * ( km(k,j,i)+km(k+1,j,i)+km(k,j-1,i)+km(k+1,j-1,i) )
+ kmzm = 0.25_wp * ( km(k,j,i)+km(k-1,j,i)+km(k,j-1,i)+km(k-1,j-1,i) )
+
+ tend(k,j,i) = tend(k,j,i) &
+ & + ( kmzp * ( ( v(k+1,j,i) - v(k,j,i) ) * ddzu(k+1) &
+ & + ( w(k,j,i) - w(k,j-1,i) ) * ddy &
+ & ) * rho_air_zw(k) * mask_top &
+ & - kmzm * ( ( v(k,j,i) - v(k-1,j,i) ) * ddzu(k) &
+ & + ( w(k-1,j,i) - w(k-1,j-1,i) ) * ddy &
+ & ) * rho_air_zw(k-1) * mask_bottom &
+ & ) * ddzw(k) * drho_air(k) * flag
ENDDO
!
-!-- Vertical diffusion at the first grid point above the surface,
-!-- if the momentum flux at the bottom is given by the Prandtl law
-!-- or if it is prescribed by the user.
-!-- Difference quotient of the momentum flux is not formed over
-!-- half of the grid spacing (2.0*ddzw(k)) any more, since the
-!-- comparison with other (LES) models showed that the values of
-!-- the momentum flux becomes too large in this case.
+!-- Vertical diffusion at the first grid point above the surface, if the momentum flux at
+!-- the bottom is given by the Prandtl law or if it is prescribed by the user.
+!-- Difference quotient of the momentum flux is not formed over half of the grid spacing
+!-- (2.0*ddzw(k)) any more, since the comparison with other (LES) models showed that the
+!-- values of the momentum flux becomes too large in this case.
IF ( use_surface_fluxes ) THEN
!
@@ -239,7 +226,6 @@
k = surf_def_h(0)%k(m)
- tend(k,j,i) = tend(k,j,i) &
- + ( - ( - surf_def_h(0)%vsws(m) ) &
- ) * ddzw(k) * drho_air(k)
+ tend(k,j,i) = tend(k,j,i) &
+ + ( - ( - surf_def_h(0)%vsws(m) ) ) * ddzw(k) * drho_air(k)
ENDDO
!
@@ -250,7 +236,6 @@
k = surf_def_h(1)%k(m)
- tend(k,j,i) = tend(k,j,i) &
- + ( - surf_def_h(1)%vsws(m) &
- ) * ddzw(k) * drho_air(k)
+ tend(k,j,i) = tend(k,j,i) &
+ + ( - surf_def_h(1)%vsws(m) ) * ddzw(k) * drho_air(k)
ENDDO
!
@@ -261,7 +246,6 @@
k = surf_lsm_h%k(m)
- tend(k,j,i) = tend(k,j,i) &
- + ( - ( - surf_lsm_h%vsws(m) ) &
- ) * ddzw(k) * drho_air(k)
+ tend(k,j,i) = tend(k,j,i) &
+ + ( - ( - surf_lsm_h%vsws(m) ) ) * ddzw(k) * drho_air(k)
ENDDO
@@ -273,7 +257,6 @@
k = surf_usm_h%k(m)
- tend(k,j,i) = tend(k,j,i) &
- + ( - ( - surf_usm_h%vsws(m) ) &
- ) * ddzw(k) * drho_air(k)
+ tend(k,j,i) = tend(k,j,i) &
+ + ( - ( - surf_usm_h%vsws(m) ) ) * ddzw(k) * drho_air(k)
ENDDO
@@ -288,6 +271,6 @@
k = surf_def_h(2)%k(m)
- tend(k,j,i) = tend(k,j,i) &
- + ( - surf_def_h(2)%vsws(m) ) * ddzw(k) * drho_air(k)
+ tend(k,j,i) = tend(k,j,i) &
+ + ( - surf_def_h(2)%vsws(m) ) * ddzw(k) * drho_air(k)
ENDDO
ENDIF
@@ -299,29 +282,27 @@
-!------------------------------------------------------------------------------!
+!--------------------------------------------------------------------------------------------------!
! Description:
! ------------
!> Call for grid point i,j
-!------------------------------------------------------------------------------!
+!--------------------------------------------------------------------------------------------------!
SUBROUTINE diffusion_v_ij( i, j )
- USE arrays_3d, &
- ONLY: ddzu, ddzw, km, tend, u, v, w, drho_air, rho_air_zw
-
- USE control_parameters, &
- ONLY: constant_top_momentumflux, use_surface_fluxes, &
- use_top_fluxes
-
- USE grid_variables, &
+ USE arrays_3d, &
+ ONLY: ddzu, ddzw, drho_air, km, tend, u, v, w, rho_air_zw
+
+ USE control_parameters, &
+ ONLY: constant_top_momentumflux, use_surface_fluxes, use_top_fluxes
+
+ USE grid_variables, &
ONLY: ddx, ddy, ddy2
-
- USE indices, &
+
+ USE indices, &
ONLY: nzb, nzt, wall_flags_total_0
-
+
USE kinds
- USE surface_mod, &
- ONLY : surf_def_h, surf_def_v, surf_lsm_h, surf_lsm_v, surf_usm_h, &
- surf_usm_v
+ USE surface_mod, &
+ ONLY : surf_def_h, surf_def_v, surf_lsm_h, surf_lsm_v, surf_usm_h, surf_usm_v
IMPLICIT NONE
@@ -341,7 +322,7 @@
REAL(wp) :: kmzm !< diffusion coefficient on bottom of the gridbox - interpolated onto xu-zw grid
REAL(wp) :: kmzp !< diffusion coefficient on top of the gridbox - interpolated onto xu-zw grid
- REAL(wp) :: mask_bottom !< flag to mask vertical upward-facing surface
- REAL(wp) :: mask_east !< flag to mask vertical surface south of the grid point
- REAL(wp) :: mask_west !< flag to mask vertical surface north of the grid point
+ REAL(wp) :: mask_bottom !< flag to mask vertical upward-facing surface
+ REAL(wp) :: mask_east !< flag to mask vertical surface south of the grid point
+ REAL(wp) :: mask_west !< flag to mask vertical surface north of the grid point
REAL(wp) :: mask_top !< flag to mask vertical downward-facing surface
@@ -350,8 +331,8 @@
DO k = nzb+1, nzt
!
-!-- Predetermine flag to mask topography and wall-bounded grid points.
-!-- It is sufficient to masked only east- and west-facing surfaces, which
-!-- need special treatment for the v-component.
- flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 2 ) )
+!-- Predetermine flag to mask topography and wall-bounded grid points.
+!-- It is sufficient to masked only east- and west-facing surfaces, which need special
+!-- treatment for the v-component.
+ flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 2 ) )
mask_east = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i+1), 2 ) )
mask_west = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i-1), 2 ) )
@@ -361,25 +342,24 @@
kmxm = 0.25_wp * ( km(k,j,i)+km(k,j,i-1)+km(k,j-1,i)+km(k,j-1,i-1) )
- tend(k,j,i) = tend(k,j,i) + ( &
- mask_east * kmxp * ( &
- ( v(k,j,i+1) - v(k,j,i) ) * ddx &
- + ( u(k,j,i+1) - u(k,j-1,i+1) ) * ddy &
- ) &
- - mask_west * kmxm * ( &
- ( v(k,j,i) - v(k,j,i-1) ) * ddx &
- + ( u(k,j,i) - u(k,j-1,i) ) * ddy &
- ) &
- ) * ddx * flag &
- + 2.0_wp * ( &
- km(k,j,i) * ( v(k,j+1,i) - v(k,j,i) ) &
- - km(k,j-1,i) * ( v(k,j,i) - v(k,j-1,i) ) &
+ tend(k,j,i) = tend(k,j,i) + ( &
+ mask_east * kmxp * ( &
+ ( v(k,j,i+1) - v(k,j,i) ) * ddx &
+ + ( u(k,j,i+1) - u(k,j-1,i+1) ) * ddy &
+ ) &
+ - mask_west * kmxm * ( &
+ ( v(k,j,i) - v(k,j,i-1) ) * ddx &
+ + ( u(k,j,i) - u(k,j-1,i) ) * ddy &
+ ) &
+ ) * ddx * flag &
+ + 2.0_wp * ( &
+ km(k,j,i) * ( v(k,j+1,i) - v(k,j,i) ) &
+ - km(k,j-1,i) * ( v(k,j,i) - v(k,j-1,i) ) &
) * ddy2 * flag
ENDDO
!
-!-- Add horizontal momentum flux v'u' at east- (l=2) and west-facing (l=3)
-!-- surfaces. Note, in the the flat case, loops won't be entered as
-!-- start_index > end_index. Furtermore, note, no vertical natural surfaces
-!-- so far.
+!-- Add horizontal momentum flux v'u' at east- (l=2) and west-facing (l=3) surfaces. Note, in the
+!-- the flat case, loops won't be entered as start_index > end_index. Furtermore, note, no
+!-- vertical natural surfaces so far.
!-- Default-type surfaces
DO l = 2, 3
@@ -389,5 +369,5 @@
k = surf_def_v(l)%k(m)
tend(k,j,i) = tend(k,j,i) + surf_def_v(l)%mom_flux_uv(m) * ddx
- ENDDO
+ ENDDO
ENDDO
!
@@ -399,5 +379,5 @@
k = surf_lsm_v(l)%k(m)
tend(k,j,i) = tend(k,j,i) + surf_lsm_v(l)%mom_flux_uv(m) * ddx
- ENDDO
+ ENDDO
ENDDO
!
@@ -409,25 +389,19 @@
k = surf_usm_v(l)%k(m)
tend(k,j,i) = tend(k,j,i) + surf_usm_v(l)%mom_flux_uv(m) * ddx
- ENDDO
- ENDDO
-!
-!-- Compute vertical diffusion. In case of simulating a surface layer,
-!-- respective grid diffusive fluxes are masked (flag 8) within this
-!-- loop, and added further below, else, simple gradient approach is
-!-- applied. Model top is also mask if top-momentum flux is given.
+ ENDDO
+ ENDDO
+!
+!-- Compute vertical diffusion. In case of simulating a surface layer, respective grid diffusive
+!-- fluxes are masked (flag 8) within this loop, and added further below, else, simple gradient
+!-- approach is applied. Model top is also mask if top-momentum flux is given.
DO k = nzb+1, nzt
!
-!-- Determine flags to mask topography below and above. Flag 2 is
-!-- used to mask topography in general, while flag 10 implies also
-!-- information about use_surface_fluxes. Flag 9 is used to control
-!-- momentum flux at model top.
- mask_bottom = MERGE( 1.0_wp, 0.0_wp, &
- BTEST( wall_flags_total_0(k-1,j,i), 8 ) )
- mask_top = MERGE( 1.0_wp, 0.0_wp, &
- BTEST( wall_flags_total_0(k+1,j,i), 8 ) ) * &
- MERGE( 1.0_wp, 0.0_wp, &
- BTEST( wall_flags_total_0(k+1,j,i), 9 ) )
- flag = MERGE( 1.0_wp, 0.0_wp, &
- BTEST( wall_flags_total_0(k,j,i), 2 ) )
+!-- Determine flags to mask topography below and above. Flag 2 is used to mask topography in
+!-- general, while flag 10 implies also information about use_surface_fluxes. Flag 9 is used
+!-- to control momentum flux at model top.
+ mask_bottom = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k-1,j,i), 8 ) )
+ mask_top = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k+1,j,i), 8 ) ) * &
+ MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k+1,j,i), 9 ) )
+ flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 2 ) )
!
!-- Interpolate eddy diffusivities on staggered gridpoints
@@ -435,22 +409,20 @@
kmzm = 0.25_wp * ( km(k,j,i)+km(k-1,j,i)+km(k,j-1,i)+km(k-1,j-1,i) )
- tend(k,j,i) = tend(k,j,i) &
- & + ( kmzp * ( ( v(k+1,j,i) - v(k,j,i) ) * ddzu(k+1) &
- & + ( w(k,j,i) - w(k,j-1,i) ) * ddy &
- & ) * rho_air_zw(k) * mask_top &
- & - kmzm * ( ( v(k,j,i) - v(k-1,j,i) ) * ddzu(k) &
- & + ( w(k-1,j,i) - w(k-1,j-1,i) ) * ddy &
- & ) * rho_air_zw(k-1) * mask_bottom &
- & ) * ddzw(k) * drho_air(k) * flag
- ENDDO
-
-!
-!-- Vertical diffusion at the first grid point above the surface, if the
-!-- momentum flux at the bottom is given by the Prandtl law or if it is
-!-- prescribed by the user.
-!-- Difference quotient of the momentum flux is not formed over half of
-!-- the grid spacing (2.0*ddzw(k)) any more, since the comparison with
-!-- other (LES) models showed that the values of the momentum flux becomes
-!-- too large in this case.
+ tend(k,j,i) = tend(k,j,i) &
+ & + ( kmzp * ( ( v(k+1,j,i) - v(k,j,i) ) * ddzu(k+1) &
+ & + ( w(k,j,i) - w(k,j-1,i) ) * ddy &
+ & ) * rho_air_zw(k) * mask_top &
+ & - kmzm * ( ( v(k,j,i) - v(k-1,j,i) ) * ddzu(k) &
+ & + ( w(k-1,j,i) - w(k-1,j-1,i) ) * ddy &
+ & ) * rho_air_zw(k-1) * mask_bottom &
+ & ) * ddzw(k) * drho_air(k) * flag
+ ENDDO
+
+!
+!-- Vertical diffusion at the first grid point above the surface, if the momentum flux at the
+!-- bottom is given by the Prandtl law or if it is prescribed by the user.
+!-- Difference quotient of the momentum flux is not formed over half of the grid spacing
+!-- (2.0*ddzw(k)) any more, since the comparison with other (LES) models showed that the values
+!-- of the momentum flux becomes too large in this case.
IF ( use_surface_fluxes ) THEN
!
@@ -461,7 +433,5 @@
k = surf_def_h(0)%k(m)
- tend(k,j,i) = tend(k,j,i) &
- + ( - ( - surf_def_h(0)%vsws(m) ) &
- ) * ddzw(k) * drho_air(k)
+ tend(k,j,i) = tend(k,j,i) + ( - ( - surf_def_h(0)%vsws(m) ) ) * ddzw(k) * drho_air(k)
ENDDO
!
@@ -472,7 +442,5 @@
k = surf_def_h(1)%k(m)
- tend(k,j,i) = tend(k,j,i) &
- + ( - surf_def_h(1)%vsws(m) &
- ) * ddzw(k) * drho_air(k)
+ tend(k,j,i) = tend(k,j,i) + ( - surf_def_h(1)%vsws(m) ) * ddzw(k) * drho_air(k)
ENDDO
!
@@ -483,7 +451,5 @@
k = surf_lsm_h%k(m)
- tend(k,j,i) = tend(k,j,i) &
- + ( - ( - surf_lsm_h%vsws(m) ) &
- ) * ddzw(k) * drho_air(k)
+ tend(k,j,i) = tend(k,j,i) + ( - ( - surf_lsm_h%vsws(m) ) ) * ddzw(k) * drho_air(k)
ENDDO
@@ -495,7 +461,5 @@
k = surf_usm_h%k(m)
- tend(k,j,i) = tend(k,j,i) &
- + ( - ( - surf_usm_h%vsws(m) ) &
- ) * ddzw(k) * drho_air(k)
+ tend(k,j,i) = tend(k,j,i) + ( - ( - surf_usm_h%vsws(m) ) ) * ddzw(k) * drho_air(k)
ENDDO
@@ -510,6 +474,5 @@
k = surf_def_h(2)%k(m)
- tend(k,j,i) = tend(k,j,i) &
- + ( - surf_def_h(2)%vsws(m) ) * ddzw(k) * drho_air(k)
+ tend(k,j,i) = tend(k,j,i) + ( - surf_def_h(2)%vsws(m) ) * ddzw(k) * drho_air(k)
ENDDO
ENDIF