Changeset 19 for palm/trunk/SOURCE/diffusion_s.f90
- Timestamp:
- Feb 23, 2007 4:53:48 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/diffusion_s.f90
r4 r19 4 4 ! Actual revisions: 5 5 ! ----------------- 6 ! 6 ! Calculation extended for gridpoint nzt, fluxes can be given at top, 7 ! +s_flux_t in parameter list, s_flux renamed s_flux_b 7 8 ! 8 9 ! Former revisions: … … 39 40 ! Call for all grid points 40 41 !------------------------------------------------------------------------------! 41 SUBROUTINE diffusion_s( ddzu, ddzw, kh, s, s_flux , tend )42 SUBROUTINE diffusion_s( ddzu, ddzw, kh, s, s_flux_b, s_flux_t, tend ) 42 43 43 44 USE control_parameters … … 51 52 REAL :: ddzu(1:nzt+1), ddzw(1:nzt) 52 53 REAL :: tend(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) 53 REAL, DIMENSION(:,:), POINTER :: s_flux 54 REAL, DIMENSION(:,:), POINTER :: s_flux_b, s_flux_t 54 55 REAL, DIMENSION(:,:,:), POINTER :: kh, s 55 56 … … 58 59 ! 59 60 !-- Compute horizontal diffusion 60 DO k = nzb_s_outer(j,i)+1, nzt -161 DO k = nzb_s_outer(j,i)+1, nzt 61 62 62 63 tend(k,j,i) = tend(k,j,i) & … … 97 98 ! 98 99 !-- Compute vertical diffusion. In case that surface fluxes have been 99 !-- presribed or computed, index k starts at nzb+2. 100 DO k = nzb_diff_s_inner(j,i), nzt-1 100 !-- prescribed or computed at bottom and/or top, index k starts/ends at 101 !-- nzb+2 or nzt-1, respectively. 102 DO k = nzb_diff_s_inner(j,i), nzt_diff 101 103 102 104 tend(k,j,i) = tend(k,j,i) & … … 108 110 109 111 ! 110 !-- Vertical diffusion at the first computational gridpoint in &112 !-- Vertical diffusion at the first computational gridpoint along 111 113 !-- z-direction 112 114 IF ( use_surface_fluxes ) THEN … … 118 120 * ( s(k+1,j,i)-s(k,j,i) ) & 119 121 * ddzu(k+1) & 120 + s_flux(j,i) & 122 + s_flux_b(j,i) & 123 ) * ddzw(k) 124 125 ENDIF 126 127 ! 128 !-- Vertical diffusion at the last computational gridpoint along 129 !-- z-direction 130 IF ( use_top_fluxes ) THEN 131 132 k = nzt 133 134 tend(k,j,i) = tend(k,j,i) & 135 + ( - s_flux_t(j,i) & 136 - 0.5 * ( kh(k-1,j,i)+kh(k,j,i) ) & 137 * ( s(k,j,i)-s(k-1,j,i) ) & 138 * ddzu(k) & 121 139 ) * ddzw(k) 122 140 … … 132 150 ! Call for grid point i,j 133 151 !------------------------------------------------------------------------------! 134 SUBROUTINE diffusion_s_ij( i, j, ddzu, ddzw, kh, s, s_flux, tend ) 152 SUBROUTINE diffusion_s_ij( i, j, ddzu, ddzw, kh, s, s_flux_b, s_flux_t, & 153 tend ) 135 154 136 155 USE control_parameters … … 144 163 REAL :: ddzu(1:nzt+1), ddzw(1:nzt) 145 164 REAL :: tend(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) 146 REAL, DIMENSION(:,:), POINTER :: s_flux 165 REAL, DIMENSION(:,:), POINTER :: s_flux_b, s_flux_t 147 166 REAL, DIMENSION(:,:,:), POINTER :: kh, s 148 167 149 168 ! 150 169 !-- Compute horizontal diffusion 151 DO k = nzb_s_outer(j,i)+1, nzt -1170 DO k = nzb_s_outer(j,i)+1, nzt 152 171 153 172 tend(k,j,i) = tend(k,j,i) & … … 188 207 ! 189 208 !-- Compute vertical diffusion. In case that surface fluxes have been 190 !-- presribed or computed, index k starts at nzb+2. 191 DO k = nzb_diff_s_inner(j,i), nzt-1 209 !-- prescribed or computed at bottom and/or top, index k starts/ends at 210 !-- nzb+2 or nzt-1, respectively. 211 DO k = nzb_diff_s_inner(j,i), nzt_diff 192 212 193 213 tend(k,j,i) = tend(k,j,i) & … … 199 219 200 220 ! 201 !-- Vertical diffusion at the first computational gridpoint inz-direction221 !-- Vertical diffusion at the first computational gridpoint along z-direction 202 222 IF ( use_surface_fluxes ) THEN 203 223 204 224 k = nzb_s_inner(j,i)+1 205 225 206 tend(k,j,i) = tend(k,j,i) & 207 + ( 0.5 * ( kh(k,j,i)+kh(k+1,j,i) ) & 208 * ( s(k+1,j,i)-s(k,j,i) ) & 209 * ddzu(k+1) & 210 + s_flux(j,i) & 211 ) * ddzw(k) 226 tend(k,j,i) = tend(k,j,i) + ( 0.5 * ( kh(k,j,i)+kh(k+1,j,i) ) & 227 * ( s(k+1,j,i)-s(k,j,i) ) & 228 * ddzu(k+1) & 229 + s_flux_b(j,i) & 230 ) * ddzw(k) 212 231 213 232 ENDIF 214 233 234 ! 235 !-- Vertical diffusion at the last computational gridpoint along z-direction 236 IF ( use_top_fluxes ) THEN 237 238 k = nzt 239 240 tend(k,j,i) = tend(k,j,i) + ( - s_flux_t(j,i) & 241 - 0.5 * ( kh(k-1,j,i)+kh(k,j,i) ) & 242 * ( s(k,j,i)-s(k-1,j,i) ) & 243 * ddzu(k) & 244 ) * ddzw(k) 245 246 ENDIF 247 215 248 END SUBROUTINE diffusion_s_ij 216 249
Note: See TracChangeset
for help on using the changeset viewer.