Changeset 4509 for palm/trunk/SOURCE/advec_w_up.f90
- Timestamp:
- Apr 26, 2020 3:57:55 PM (9 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/advec_w_up.f90
r4360 r4509 1 1 !> @file advec_w_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_w_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_w_up 62 64 63 USE arrays_3d,&64 65 USE arrays_3d, & 66 ONLY: ddzw, 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, nys, 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 REAL(wp) :: ukomp !< advection velocity along x-direction 87 REAL(wp) :: vkomp !< advection velocity along y-direction 86 88 87 89 88 89 90 90 DO i = nxl, nxr 91 DO j = nys, nyn 92 DO k = nzb+1, nzt-1 91 93 ! 92 !-- x-direction 93 ukomp = 0.25_wp * ( u(k,j,i) + u(k,j,i+1) + & 94 u(k+1,j,i) + u(k+1,j,i+1) ) - u_gtrans 95 IF ( ukomp > 0.0_wp ) THEN 96 tend(k,j,i) = tend(k,j,i) - ukomp * & 97 ( w(k,j,i) - w(k,j,i-1) ) * ddx 98 ELSE 99 tend(k,j,i) = tend(k,j,i) - ukomp * & 100 ( w(k,j,i+1) - w(k,j,i) ) * ddx 101 ENDIF 94 !-- x-direction 95 ukomp = 0.25_wp * ( u(k,j,i) + u(k,j,i+1) + u(k+1,j,i) + u(k+1,j,i+1) ) - u_gtrans 96 IF ( ukomp > 0.0_wp ) THEN 97 tend(k,j,i) = tend(k,j,i) - ukomp * ( w(k,j,i) - w(k,j,i-1) ) * ddx 98 ELSE 99 tend(k,j,i) = tend(k,j,i) - ukomp * ( w(k,j,i+1) - w(k,j,i) ) * ddx 100 ENDIF 102 101 ! 103 !-- y-direction 104 vkomp = 0.25_wp * ( v(k,j,i) + v(k,j+1,i) + & 105 v(k+1,j,i) + v(k+1,j+1,i) ) - v_gtrans 106 IF ( vkomp > 0.0_wp ) THEN 107 tend(k,j,i) = tend(k,j,i) - vkomp * & 108 ( w(k,j,i) - w(k,j-1,i) ) * ddy 109 ELSE 110 tend(k,j,i) = tend(k,j,i) - vkomp * & 111 ( w(k,j+1,i) - w(k,j,i) ) * ddy 112 ENDIF 102 !-- y-direction 103 vkomp = 0.25_wp * ( v(k,j,i) + v(k,j+1,i) + v(k+1,j,i) + v(k+1,j+1,i) ) - v_gtrans 104 IF ( vkomp > 0.0_wp ) THEN 105 tend(k,j,i) = tend(k,j,i) - vkomp * ( w(k,j,i) - w(k,j-1,i) ) * ddy 106 ELSE 107 tend(k,j,i) = tend(k,j,i) - vkomp * ( w(k,j+1,i) - w(k,j,i) ) * ddy 108 ENDIF 113 109 ! 114 !-- z-direction 115 IF ( w(k,j,i) > 0.0_wp ) THEN 116 tend(k,j,i) = tend(k,j,i) - w(k,j,i) * & 117 ( w(k,j,i) - w(k-1,j,i) ) * ddzw(k) 118 ELSE 119 tend(k,j,i) = tend(k,j,i) - w(k,j,i) * & 120 ( w(k+1,j,i) - w(k,j,i) ) * ddzw(k+1) 121 ENDIF 110 !-- z-direction 111 IF ( w(k,j,i) > 0.0_wp ) THEN 112 tend(k,j,i) = tend(k,j,i) - w(k,j,i) * ( w(k,j,i) - w(k-1,j,i) ) * ddzw(k) 113 ELSE 114 tend(k,j,i) = tend(k,j,i) - w(k,j,i) * ( w(k+1,j,i) - w(k,j,i) ) * ddzw(k+1) 115 ENDIF 122 116 123 ENDDO124 117 ENDDO 125 118 ENDDO 119 ENDDO 126 120 127 121 END SUBROUTINE advec_w_up 128 122 129 123 130 !------------------------------------------------------------------------------ !124 !--------------------------------------------------------------------------------------------------! 131 125 ! Description: 132 126 ! ------------ 133 127 !> Call for grid point i,j 134 !------------------------------------------------------------------------------ !135 128 !--------------------------------------------------------------------------------------------------! 129 SUBROUTINE advec_w_up_ij( i, j ) 136 130 137 USE arrays_3d,&138 131 USE arrays_3d, & 132 ONLY: ddzw, tend, u, v, w 139 133 140 USE control_parameters,&141 134 USE control_parameters, & 135 ONLY: u_gtrans, v_gtrans 142 136 143 USE grid_variables,&144 137 USE grid_variables, & 138 ONLY: ddx, ddy 145 139 146 USE indices,&147 140 USE indices, & 141 ONLY: nzb, nzt 148 142 149 143 USE kinds 150 144 151 145 152 146 IMPLICIT NONE 153 147 154 155 156 148 INTEGER(iwp) :: i !< grid index along x-direction 149 INTEGER(iwp) :: j !< grid index along y-direction 150 INTEGER(iwp) :: k !< grid index along z-direction 157 151 158 159 152 REAL(wp) :: ukomp !< advection velocity along x-direction 153 REAL(wp) :: vkomp !< advection velocity along y-direction 160 154 161 155 162 156 DO k = nzb+1, nzt-1 163 157 ! 164 !-- x-direction 165 ukomp = 0.25_wp * ( u(k,j,i) + u(k,j,i+1) + u(k+1,j,i) + u(k+1,j,i+1) & 166 ) - u_gtrans 167 IF ( ukomp > 0.0_wp ) THEN 168 tend(k,j,i) = tend(k,j,i) - ukomp * & 169 ( w(k,j,i) - w(k,j,i-1) ) * ddx 170 ELSE 171 tend(k,j,i) = tend(k,j,i) - ukomp * & 172 ( w(k,j,i+1) - w(k,j,i) ) * ddx 173 ENDIF 158 !-- x-direction 159 ukomp = 0.25_wp * ( u(k,j,i) + u(k,j,i+1) + u(k+1,j,i) + u(k+1,j,i+1) ) - u_gtrans 160 IF ( ukomp > 0.0_wp ) THEN 161 tend(k,j,i) = tend(k,j,i) - ukomp * ( w(k,j,i) - w(k,j,i-1) ) * ddx 162 ELSE 163 tend(k,j,i) = tend(k,j,i) - ukomp * ( w(k,j,i+1) - w(k,j,i) ) * ddx 164 ENDIF 174 165 ! 175 !-- y-direction 176 vkomp = 0.25_wp * ( v(k,j,i) + v(k,j+1,i) + v(k+1,j,i) + v(k+1,j+1,i) & 177 ) - v_gtrans 178 IF ( vkomp > 0.0_wp ) THEN 179 tend(k,j,i) = tend(k,j,i) - vkomp * & 180 ( w(k,j,i) - w(k,j-1,i) ) * ddy 181 ELSE 182 tend(k,j,i) = tend(k,j,i) - vkomp * & 183 ( w(k,j+1,i) - w(k,j,i) ) * ddy 184 ENDIF 166 !-- y-direction 167 vkomp = 0.25_wp * ( v(k,j,i) + v(k,j+1,i) + v(k+1,j,i) + v(k+1,j+1,i) ) - v_gtrans 168 IF ( vkomp > 0.0_wp ) THEN 169 tend(k,j,i) = tend(k,j,i) - vkomp * ( w(k,j,i) - w(k,j-1,i) ) * ddy 170 ELSE 171 tend(k,j,i) = tend(k,j,i) - vkomp * ( w(k,j+1,i) - w(k,j,i) ) * ddy 172 ENDIF 185 173 ! 186 !-- z-direction 187 IF ( w(k,j,i) > 0.0_wp ) THEN 188 tend(k,j,i) = tend(k,j,i) - w(k,j,i) * & 189 ( w(k,j,i) - w(k-1,j,i) ) * ddzw(k) 190 ELSE 191 tend(k,j,i) = tend(k,j,i) - w(k,j,i) * & 192 ( w(k+1,j,i) - w(k,j,i) ) * ddzw(k+1) 193 ENDIF 174 !-- z-direction 175 IF ( w(k,j,i) > 0.0_wp ) THEN 176 tend(k,j,i) = tend(k,j,i) - w(k,j,i) * ( w(k,j,i) - w(k-1,j,i) ) * ddzw(k) 177 ELSE 178 tend(k,j,i) = tend(k,j,i) - w(k,j,i) * ( w(k+1,j,i) - w(k,j,i) ) * ddzw(k+1) 179 ENDIF 194 180 195 181 ENDDO 196 182 197 183 END SUBROUTINE advec_w_up_ij 198 184 199 185 END MODULE advec_w_up_mod
Note: See TracChangeset
for help on using the changeset viewer.