Changeset 4488 for palm/trunk/SOURCE/advec_s_pw.f90
- Timestamp:
- Apr 3, 2020 11:34:29 AM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/advec_s_pw.f90
r4360 r4488 1 1 !> @file advec_s_pw.f90 2 !------------------------------------------------------------------------------ !2 !--------------------------------------------------------------------------------------------------! 3 3 ! This file is part of the PALM model system. 4 4 ! 5 ! PALM is free software: you can redistribute it and/or modify it under the 6 ! terms of the GNU General Public License as published by the Free Software 7 ! Foundation, either version 3 of the License, or (at your option) any later 8 ! version. 5 ! PALM is free software: you can redistribute it and/or modify it under the terms of the GNU General 6 ! Public License as published by the Free Software Foundation, either version 3 of the License, or 7 ! (at your option) any later version. 9 8 ! 10 ! PALM is distributed in the hope that it will be useful, but WITHOUT ANY 11 ! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR12 ! A PARTICULAR PURPOSE. See the GNU GeneralPublic License for more details.9 ! PALM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the 10 ! implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 11 ! Public License for more details. 13 12 ! 14 ! You should have received a copy of the GNU General Public License along with 15 ! PALM. If not, see<http://www.gnu.org/licenses/>.13 ! You should have received a copy of the GNU General Public License along with PALM. If not, see 14 ! <http://www.gnu.org/licenses/>. 16 15 ! 17 16 ! Copyright 1997-2020 Leibniz Universitaet Hannover 18 !------------------------------------------------------------------------------ !17 !--------------------------------------------------------------------------------------------------! 19 18 ! 20 19 ! Current revisions: … … 25 24 ! ----------------- 26 25 ! $Id$ 26 ! file re-formatted to follow the PALM coding standard 27 ! 28 ! 4360 2020-01-07 11:25:50Z suehring 27 29 ! Corrected "Former revisions" section 28 ! 30 ! 29 31 ! 3927 2019-04-23 13:24:29Z raasch 30 32 ! pointer attribute removed from scalar 3d-array for performance reasons 31 ! 33 ! 32 34 ! 3665 2019-01-10 08:28:24Z raasch 33 35 ! unused variables removed 34 ! 36 ! 35 37 ! 3655 2019-01-07 16:51:22Z knoop 36 38 ! nopointer option removed … … 42 44 ! Description: 43 45 ! ------------ 44 !> Advection term for scalar variables using the Piacsek and Williams scheme 45 !> (form C3). Contrary to PW itself, for reasons of accuracy their scheme is 46 !> slightly modified as follows: the values of those scalars that are used for 47 !> the computation of the flux divergence are reduced by the value of the 48 !> relevant scalar at the location where the difference is computed (sk(k,j,i)). 46 !> Advection term for scalar variables using the Piacsek and Williams scheme (form C3). Contrary to 47 !> PW itself, for reasons of accuracy their scheme is slightly modified as follows: the values of 48 !> those scalars that are used for the computation of the flux divergence are reduced by the value 49 !> of the relevant scalar at the location where the difference is computed (sk(k,j,i)). 49 50 !> NOTE: at the first grid point above the surface computation still takes place! 50 !------------------------------------------------------------------------------ !51 !--------------------------------------------------------------------------------------------------! 51 52 MODULE advec_s_pw_mod 52 53 53 54 54 55 PRIVATE … … 59 60 MODULE PROCEDURE advec_s_pw_ij 60 61 END INTERFACE 61 62 62 63 CONTAINS 63 64 64 65 65 !------------------------------------------------------------------------------ !66 !--------------------------------------------------------------------------------------------------! 66 67 ! Description: 67 68 ! ------------ 68 69 !> Call for all grid points 69 !------------------------------------------------------------------------------ !70 70 !--------------------------------------------------------------------------------------------------! 71 SUBROUTINE advec_s_pw( sk ) 71 72 72 USE arrays_3d,&73 73 USE arrays_3d, & 74 ONLY: dd2zu, tend, u, u_stokes_zu, v, v_stokes_zu, w 74 75 75 USE control_parameters,&76 76 USE control_parameters, & 77 ONLY: u_gtrans, v_gtrans 77 78 78 USE grid_variables,&79 79 USE grid_variables, & 80 ONLY: ddx, ddy 80 81 81 USE indices,&82 82 USE indices, & 83 ONLY: nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzt 83 84 84 85 USE kinds 85 86 86 87 87 88 IMPLICIT NONE 88 89 89 90 91 90 INTEGER(iwp) :: i !< grid index along x-direction 91 INTEGER(iwp) :: j !< grid index along y-direction 92 INTEGER(iwp) :: k !< grid index along z-direction 92 93 93 94 94 REAL(wp) :: gu !< local additional advective velocity 95 REAL(wp) :: gv !< local additional advective velocity 95 96 96 REAL(wp), DIMENSION(nzb:nzt+1,nysg:nyng,nxlg:nxrg) :: sk 97 97 REAL(wp), DIMENSION(nzb:nzt+1,nysg:nyng,nxlg:nxrg) :: sk 98 98 99 DO i = nxl, nxr 100 DO j = nys, nyn 101 DO k = nzb+1, nzt 99 100 DO i = nxl, nxr 101 DO j = nys, nyn 102 DO k = nzb+1, nzt 102 103 103 104 ! 104 !-- 105 106 105 !-- Galilean transformation + Stokes drift velocity (ocean only) 106 gu = u_gtrans - u_stokes_zu(k) 107 gv = v_gtrans - v_stokes_zu(k) 107 108 108 tend(k,j,i) = tend(k,j,i) + & 109 ( -0.5_wp * ( ( u(k,j,i+1) - gu ) * & 110 ( sk(k,j,i+1) - sk(k,j,i) ) & 111 - ( u(k,j,i) - gu ) * & 112 ( sk(k,j,i-1) - sk(k,j,i) ) & 113 ) * ddx & 114 -0.5_wp * ( ( v(k,j+1,i) - gv ) * & 115 ( sk(k,j+1,i) - sk(k,j,i) ) & 116 - ( v(k,j,i) - gv ) * & 117 ( sk(k,j-1,i) - sk(k,j,i) ) & 118 ) * ddy & 119 - ( w(k,j,i) * & 120 ( sk(k+1,j,i) - sk(k,j,i) ) & 121 - w(k-1,j,i) * & 122 ( sk(k-1,j,i) - sk(k,j,i) ) & 123 ) * dd2zu(k) & 124 ) 125 ENDDO 109 tend(k,j,i) = tend(k,j,i) + & 110 ( -0.5_wp * ( ( u(k,j,i+1) - gu ) * & 111 ( sk(k,j,i+1) - sk(k,j,i) ) & 112 - ( u(k,j,i) - gu ) * & 113 ( sk(k,j,i-1) - sk(k,j,i) ) & 114 ) * ddx & 115 -0.5_wp * ( ( v(k,j+1,i) - gv ) * & 116 ( sk(k,j+1,i) - sk(k,j,i) ) & 117 - ( v(k,j,i) - gv ) * & 118 ( sk(k,j-1,i) - sk(k,j,i) ) & 119 ) * ddy & 120 - ( w(k,j,i) * & 121 ( sk(k+1,j,i) - sk(k,j,i) ) & 122 - w(k-1,j,i) * & 123 ( sk(k-1,j,i) - sk(k,j,i) ) & 124 ) * dd2zu(k) & 125 ) 126 126 ENDDO 127 127 ENDDO 128 ENDDO 128 129 129 130 END SUBROUTINE advec_s_pw 130 131 131 132 132 !------------------------------------------------------------------------------ !133 !--------------------------------------------------------------------------------------------------! 133 134 ! Description: 134 135 ! ------------ 135 136 !> Call for grid point i,j 136 !------------------------------------------------------------------------------ !137 137 !--------------------------------------------------------------------------------------------------! 138 SUBROUTINE advec_s_pw_ij( i, j, sk ) 138 139 139 USE arrays_3d,&140 140 USE arrays_3d, & 141 ONLY: dd2zu, tend, u, u_stokes_zu, v, v_stokes_zu, w 141 142 142 USE control_parameters,&143 143 USE control_parameters, & 144 ONLY: u_gtrans, v_gtrans 144 145 145 USE grid_variables,&146 146 USE grid_variables, & 147 ONLY: ddx, ddy 147 148 148 USE indices,&149 149 USE indices, & 150 ONLY: nxlg, nxrg, nyng, nysg, nzb, nzt 150 151 151 152 USE kinds 152 153 153 154 154 155 IMPLICIT NONE 155 156 156 157 158 157 INTEGER(iwp) :: i !< grid index along x-direction 158 INTEGER(iwp) :: j !< grid index along y-direction 159 INTEGER(iwp) :: k !< grid index along z-direction 159 160 160 161 161 REAL(wp) :: gu !< local additional advective velocity 162 REAL(wp) :: gv !< local additional advective velocity 162 163 163 164 REAL(wp), DIMENSION(nzb:nzt+1,nysg:nyng,nxlg:nxrg) :: sk 164 165 165 166 166 167 DO k = nzb+1, nzt 167 168 168 169 ! 169 !-- 170 171 170 !-- Galilean transformation + Stokes drift velocity (ocean only) 171 gu = u_gtrans - u_stokes_zu(k) 172 gv = v_gtrans - v_stokes_zu(k) 172 173 173 tend(k,j,i) = tend(k,j,i) +&174 ( -0.5_wp * ( ( u(k,j,i+1) - gu ) *&175 ( sk(k,j,i+1) - sk(k,j,i) )&176 - ( u(k,j,i) - gu ) *&177 ( sk(k,j,i-1) - sk(k,j,i) )&178 ) * ddx&179 -0.5_wp * ( ( v(k,j+1,i) - gv ) *&180 ( sk(k,j+1,i) - sk(k,j,i) )&181 - ( v(k,j,i) - gv ) *&182 ( sk(k,j-1,i) - sk(k,j,i) )&183 ) * ddy&184 - ( w(k,j,i) *&185 ( sk(k+1,j,i) - sk(k,j,i) )&186 - w(k-1,j,i) *&187 ( sk(k-1,j,i) - sk(k,j,i) )&188 ) * dd2zu(k)&189 190 174 tend(k,j,i) = tend(k,j,i) + & 175 ( -0.5_wp * ( ( u(k,j,i+1) - gu ) * & 176 ( sk(k,j,i+1) - sk(k,j,i) ) & 177 - ( u(k,j,i) - gu ) * & 178 ( sk(k,j,i-1) - sk(k,j,i) ) & 179 ) * ddx & 180 -0.5_wp * ( ( v(k,j+1,i) - gv ) * & 181 ( sk(k,j+1,i) - sk(k,j,i) ) & 182 - ( v(k,j,i) - gv ) * & 183 ( sk(k,j-1,i) - sk(k,j,i) ) & 184 ) * ddy & 185 - ( w(k,j,i) * & 186 ( sk(k+1,j,i) - sk(k,j,i) ) & 187 - w(k-1,j,i) * & 188 ( sk(k-1,j,i) - sk(k,j,i) ) & 189 ) * dd2zu(k) & 190 ) 191 ENDDO 191 192 192 193 END SUBROUTINE advec_s_pw_ij 193 194 194 195 END MODULE advec_s_pw_mod
Note: See TracChangeset
for help on using the changeset viewer.