Changeset 4488 for palm/trunk/SOURCE/advec_v_up.f90
- Timestamp:
- Apr 3, 2020 11:34:29 AM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/advec_v_up.f90
r4360 r4488 1 1 !> @file advec_v_up.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 ! … … 39 41 !> NOTE: vertical advection at k=1 still has wrong grid spacing for w>0! 40 42 !> The same problem occurs for all topography boundaries! 41 !------------------------------------------------------------------------------ !43 !--------------------------------------------------------------------------------------------------! 42 44 MODULE advec_v_up_mod 43 45 … … 54 56 55 57 56 !------------------------------------------------------------------------------ !58 !--------------------------------------------------------------------------------------------------! 57 59 ! Description: 58 60 ! ------------ 59 61 !> Call for all grid points 60 !------------------------------------------------------------------------------ !61 62 !--------------------------------------------------------------------------------------------------! 63 SUBROUTINE advec_v_up 62 64 63 USE arrays_3d,&64 65 USE arrays_3d, & 66 ONLY: ddzu, tend, u, v, w 65 67 66 USE control_parameters,&67 68 USE control_parameters, & 69 ONLY: u_gtrans, v_gtrans 68 70 69 USE grid_variables,&70 71 USE grid_variables, & 72 ONLY: ddx, ddy 71 73 72 USE indices,&73 74 USE indices, & 75 ONLY: nxl, nxr, nyn, nysv, nzb, nzt 74 76 75 77 USE kinds 76 78 77 79 78 80 IMPLICIT NONE 79 81 80 81 82 82 INTEGER(iwp) :: i !< grid index along x-direction 83 INTEGER(iwp) :: j !< grid index along y-direction 84 INTEGER(iwp) :: k !< grid index along z-direction 83 85 84 85 86 86 REAL(wp) :: ukomp !< advection velocity along x-direction 87 REAL(wp) :: vkomp !< advection velocity along y-direction 88 REAL(wp) :: wkomp !< advection velocity along z-direction 87 89 88 90 89 90 91 91 DO i = nxl, nxr 92 DO j = nysv, nyn 93 DO k = nzb+1, nzt 92 94 ! 93 !-- x-direction 94 ukomp = 0.25_wp * ( u(k,j,i) + u(k,j-1,i) + & 95 u(k,j,i+1) + u(k,j-1,i+1) ) - u_gtrans 96 IF ( ukomp > 0.0_wp ) THEN 97 tend(k,j,i) = tend(k,j,i) - ukomp * & 98 ( v(k,j,i) - v(k,j,i-1) ) * ddx 99 ELSE 100 tend(k,j,i) = tend(k,j,i) - ukomp * & 101 ( v(k,j,i+1) - v(k,j,i) ) * ddx 102 ENDIF 95 !-- x-direction 96 ukomp = 0.25_wp * ( u(k,j,i) + u(k,j-1,i) + u(k,j,i+1) + u(k,j-1,i+1) ) - u_gtrans 97 IF ( ukomp > 0.0_wp ) THEN 98 tend(k,j,i) = tend(k,j,i) - ukomp * ( v(k,j,i) - v(k,j,i-1) ) * ddx 99 ELSE 100 tend(k,j,i) = tend(k,j,i) - ukomp * ( v(k,j,i+1) - v(k,j,i) ) * ddx 101 ENDIF 103 102 ! 104 !-- y-direction 105 vkomp = v(k,j,i) - v_gtrans 106 IF ( vkomp > 0.0_wp ) THEN 107 tend(k,j,i) = tend(k,j,i) - vkomp * & 108 ( v(k,j,i) - v(k,j-1,i) ) * ddy 109 ELSE 110 tend(k,j,i) = tend(k,j,i) - vkomp * & 111 ( v(k,j+1,i) - v(k,j,i) ) * ddy 112 ENDIF 103 !-- y-direction 104 vkomp = v(k,j,i) - v_gtrans 105 IF ( vkomp > 0.0_wp ) THEN 106 tend(k,j,i) = tend(k,j,i) - vkomp * ( v(k,j,i) - v(k,j-1,i) ) * ddy 107 ELSE 108 tend(k,j,i) = tend(k,j,i) - vkomp * ( v(k,j+1,i) - v(k,j,i) ) * ddy 109 ENDIF 113 110 ! 114 !-- z-direction 115 wkomp = 0.25_wp * ( w(k,j,i) + w(k-1,j,i) + & 116 w(k,j-1,i) + w(k-1,j-1,i) ) 117 IF ( wkomp > 0.0_wp ) THEN 118 tend(k,j,i) = tend(k,j,i) - wkomp * & 119 ( v(k,j,i) - v(k-1,j,i) ) * ddzu(k) 120 ELSE 121 tend(k,j,i) = tend(k,j,i) - wkomp * & 122 ( v(k+1,j,i) - v(k,j,i) ) * ddzu(k+1) 123 ENDIF 111 !-- z-direction 112 wkomp = 0.25_wp * ( w(k,j,i) + w(k-1,j,i) + w(k,j-1,i) + w(k-1,j-1,i) ) 113 IF ( wkomp > 0.0_wp ) THEN 114 tend(k,j,i) = tend(k,j,i) - wkomp * ( v(k,j,i) - v(k-1,j,i) ) * ddzu(k) 115 ELSE 116 tend(k,j,i) = tend(k,j,i) - wkomp * ( v(k+1,j,i) - v(k,j,i) ) * ddzu(k+1) 117 ENDIF 124 118 125 ENDDO126 119 ENDDO 127 120 ENDDO 121 ENDDO 128 122 129 123 END SUBROUTINE advec_v_up 130 124 131 125 132 !------------------------------------------------------------------------------ !126 !--------------------------------------------------------------------------------------------------! 133 127 ! Description: 134 128 ! ------------ 135 129 !> Call for grid point i,j 136 !------------------------------------------------------------------------------ !137 130 !--------------------------------------------------------------------------------------------------! 131 SUBROUTINE advec_v_up_ij( i, j ) 138 132 139 USE arrays_3d,&140 133 USE arrays_3d, & 134 ONLY: ddzu, tend, u, v, w 141 135 142 USE control_parameters,&143 136 USE control_parameters, & 137 ONLY: u_gtrans, v_gtrans 144 138 145 USE grid_variables,&146 139 USE grid_variables, & 140 ONLY: ddx, ddy 147 141 148 USE indices,&149 142 USE indices, & 143 ONLY: nzb, nzt 150 144 151 145 USE kinds 152 146 153 147 154 148 IMPLICIT NONE 155 149 156 157 158 150 INTEGER(iwp) :: i !< grid index along x-direction 151 INTEGER(iwp) :: j !< grid index along y-direction 152 INTEGER(iwp) :: k !< grid index along z-direction 159 153 160 161 162 154 REAL(wp) :: ukomp !< advection velocity along x-direction 155 REAL(wp) :: vkomp !< advection velocity along y-direction 156 REAL(wp) :: wkomp !< advection velocity along z-direction 163 157 164 158 165 159 DO k = nzb+1, nzt 166 160 ! 167 !-- x-direction 168 ukomp = 0.25_wp * ( u(k,j,i) + u(k,j-1,i) + u(k,j,i+1) + u(k,j-1,i+1) & 169 ) - u_gtrans 170 IF ( ukomp > 0.0_wp ) THEN 171 tend(k,j,i) = tend(k,j,i) - ukomp * & 172 ( v(k,j,i) - v(k,j,i-1) ) * ddx 173 ELSE 174 tend(k,j,i) = tend(k,j,i) - ukomp * & 175 ( v(k,j,i+1) - v(k,j,i) ) * ddx 176 ENDIF 161 !-- x-direction 162 ukomp = 0.25_wp * ( u(k,j,i) + u(k,j-1,i) + u(k,j,i+1) + u(k,j-1,i+1) ) - u_gtrans 163 IF ( ukomp > 0.0_wp ) THEN 164 tend(k,j,i) = tend(k,j,i) - ukomp * ( v(k,j,i) - v(k,j,i-1) ) * ddx 165 ELSE 166 tend(k,j,i) = tend(k,j,i) - ukomp * ( v(k,j,i+1) - v(k,j,i) ) * ddx 167 ENDIF 177 168 ! 178 !-- y-direction 179 vkomp = v(k,j,i) - v_gtrans 180 IF ( vkomp > 0.0_wp ) THEN 181 tend(k,j,i) = tend(k,j,i) - vkomp * & 182 ( v(k,j,i) - v(k,j-1,i) ) * ddy 183 ELSE 184 tend(k,j,i) = tend(k,j,i) - vkomp * & 185 ( v(k,j+1,i) - v(k,j,i) ) * ddy 186 ENDIF 169 !-- y-direction 170 vkomp = v(k,j,i) - v_gtrans 171 IF ( vkomp > 0.0_wp ) THEN 172 tend(k,j,i) = tend(k,j,i) - vkomp * ( v(k,j,i) - v(k,j-1,i) ) * ddy 173 ELSE 174 tend(k,j,i) = tend(k,j,i) - vkomp * ( v(k,j+1,i) - v(k,j,i) ) * ddy 175 ENDIF 187 176 ! 188 !-- z-direction 189 wkomp = 0.25_wp * ( w(k,j,i) + w(k-1,j,i) + w(k,j-1,i) + w(k-1,j-1,i) ) 190 IF ( wkomp > 0.0_wp ) THEN 191 tend(k,j,i) = tend(k,j,i) - wkomp * & 192 ( v(k,j,i) - v(k-1,j,i) ) * ddzu(k) 193 ELSE 194 tend(k,j,i) = tend(k,j,i) - wkomp * & 195 ( v(k+1,j,i) - v(k,j,i) ) * ddzu(k+1) 196 ENDIF 177 !-- z-direction 178 wkomp = 0.25_wp * ( w(k,j,i) + w(k-1,j,i) + w(k,j-1,i) + w(k-1,j-1,i) ) 179 IF ( wkomp > 0.0_wp ) THEN 180 tend(k,j,i) = tend(k,j,i) - wkomp * ( v(k,j,i) - v(k-1,j,i) ) * ddzu(k) 181 ELSE 182 tend(k,j,i) = tend(k,j,i) - wkomp * ( v(k+1,j,i) - v(k,j,i) ) * ddzu(k+1) 183 ENDIF 197 184 198 185 ENDDO 199 186 200 187 END SUBROUTINE advec_v_up_ij 201 188 202 189 END MODULE advec_v_up_mod
Note: See TracChangeset
for help on using the changeset viewer.