source: palm/trunk/SOURCE/diffusion_e.f90 @ 1831

Last change on this file since 1831 was 1831, checked in by hoffmann, 8 years ago

cloud physics variables renamed

  • Property svn:keywords set to Id
File size: 25.2 KB
Line 
1!> @file diffusion_e.f90
2!--------------------------------------------------------------------------------!
3! This file is part of PALM.
4!
5! PALM is free software: you can redistribute it and/or modify it under the terms
6! of the GNU General Public License as published by the Free Software Foundation,
7! either version 3 of the License, or (at your option) any later version.
8!
9! PALM is distributed in the hope that it will be useful, but WITHOUT ANY
10! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
11! A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
12!
13! You should have received a copy of the GNU General Public License along with
14! PALM. If not, see <http://www.gnu.org/licenses/>.
15!
16! Copyright 1997-2016 Leibniz Universitaet Hannover
17!--------------------------------------------------------------------------------!
18!
19! Current revisions:
20! -----------------
21! turbulence renamed collision_turbulence
22!
23! Former revisions:
24! -----------------
25! $Id: diffusion_e.f90 1831 2016-04-07 13:15:51Z hoffmann $
26!
27! 1682 2015-10-07 23:56:08Z knoop
28! Code annotations made doxygen readable
29!
30! 1374 2014-04-25 12:55:07Z raasch
31! missing variables added to ONLY list
32! rif removed from acc-present-list
33!
34! 1340 2014-03-25 19:45:13Z kanani
35! REAL constants defined as wp-kind
36!
37! 1320 2014-03-20 08:40:49Z raasch
38! ONLY-attribute added to USE-statements,
39! kind-parameters added to all INTEGER and REAL declaration statements,
40! kinds are defined in new module kinds,
41! revision history before 2012 removed,
42! comment fields (!:) to be used for variable explanations added to
43! all variable declaration statements
44!
45! 1257 2013-11-08 15:18:40Z raasch
46! openacc loop and loop vector clauses removed
47!
48! 1179 2013-06-14 05:57:58Z raasch
49! use_reference renamed use_single_reference_value
50!
51! 1171 2013-05-30 11:27:45Z raasch
52! use_reference-case activated in accelerator version
53!
54! 1128 2013-04-12 06:19:32Z raasch
55! loop index bounds in accelerator version replaced by i_left, i_right, j_south,
56! j_north
57!
58! 1065 2012-11-22 17:42:36Z hoffmann
59! Enabled the claculation of diss in case of turbulence = .TRUE. (parameterized
60! effects of turbulence on autoconversion and accretion in two-moments cloud
61! physics scheme).
62!
63! 1036 2012-10-22 13:43:42Z raasch
64! code put under GPL (PALM 3.9)
65!
66! 1015 2012-09-27 09:23:24Z raasch
67! accelerator version (*_acc) added,
68! adjustment of mixing length to the Prandtl mixing length at first grid point
69! above ground removed
70!
71! 1010 2012-09-20 07:59:54Z raasch
72! cpp switch __nopointer added for pointer free version
73!
74! 1001 2012-09-13 14:08:46Z raasch
75! most arrays comunicated by module instead of parameter list
76!
77! 825 2012-02-19 03:03:44Z raasch
78! wang_collision_kernel renamed wang_kernel
79!
80! Revision 1.1  1997/09/19 07:40:24  raasch
81! Initial revision
82!
83!
84! Description:
85! ------------
86!> Diffusion- and dissipation terms for the TKE
87!------------------------------------------------------------------------------!
88 MODULE diffusion_e_mod
89 
90
91    PRIVATE
92    PUBLIC diffusion_e, diffusion_e_acc
93   
94
95    INTERFACE diffusion_e
96       MODULE PROCEDURE diffusion_e
97       MODULE PROCEDURE diffusion_e_ij
98    END INTERFACE diffusion_e
99 
100    INTERFACE diffusion_e_acc
101       MODULE PROCEDURE diffusion_e_acc
102    END INTERFACE diffusion_e_acc
103
104 CONTAINS
105
106
107!------------------------------------------------------------------------------!
108! Description:
109! ------------
110!> Call for all grid points
111!------------------------------------------------------------------------------!
112    SUBROUTINE diffusion_e( var, var_reference )
113
114       USE arrays_3d,                                                          &
115           ONLY:  dd2zu, ddzu, ddzw, diss, e, km, l_grid, tend, zu, zw
116           
117       USE control_parameters,                                                 &
118           ONLY:  atmos_ocean_sign, g, use_single_reference_value, &
119                  wall_adjustment, wall_adjustment_factor
120
121       USE cloud_parameters,                                                   &
122           ONLY:  collision_turbulence
123
124       USE grid_variables,                                                     &
125           ONLY:  ddx2, ddy2
126           
127       USE indices,                                                            &
128           ONLY:  nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzb_s_inner,&
129                  nzt
130           
131       USE kinds
132       
133       USE particle_attributes,                                                &
134           ONLY:  use_sgs_for_particles, wang_kernel
135
136       IMPLICIT NONE
137
138       INTEGER(iwp) ::  i              !<
139       INTEGER(iwp) ::  j              !<
140       INTEGER(iwp) ::  k              !<
141       REAL(wp)     ::  dvar_dz        !<
142       REAL(wp)     ::  l_stable       !<
143       REAL(wp)     ::  var_reference  !<
144
145#if defined( __nopointer )
146       REAL(wp), DIMENSION(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ::  var  !<
147#else
148       REAL(wp), DIMENSION(:,:,:), POINTER ::  var  !<
149#endif
150       REAL(wp), DIMENSION(nzb+1:nzt,nys:nyn) ::  dissipation  !<
151       REAL(wp), DIMENSION(nzb+1:nzt,nys:nyn) ::  l            !<
152       REAL(wp), DIMENSION(nzb+1:nzt,nys:nyn) ::  ll           !<
153 
154
155!
156!--    This if clause must be outside the k-loop because otherwise
157!--    runtime errors occur with -C hopt on NEC
158       IF ( use_single_reference_value )  THEN
159
160          DO  i = nxl, nxr
161             DO  j = nys, nyn
162                DO  k = nzb_s_inner(j,i)+1, nzt
163!
164!--                Calculate the mixing length (for dissipation)
165                   dvar_dz = atmos_ocean_sign * &
166                             ( var(k+1,j,i) - var(k-1,j,i) ) * dd2zu(k)
167                   IF ( dvar_dz > 0.0_wp ) THEN
168                      l_stable = 0.76_wp * SQRT( e(k,j,i) ) / &
169                                    SQRT( g / var_reference * dvar_dz ) + 1E-5_wp
170                   ELSE
171                      l_stable = l_grid(k)
172                   ENDIF
173!
174!--                Adjustment of the mixing length
175                   IF ( wall_adjustment )  THEN
176                      l(k,j)  = MIN( wall_adjustment_factor *          &
177                                     ( zu(k) - zw(nzb_s_inner(j,i)) ), &
178                                     l_grid(k), l_stable )
179                      ll(k,j) = MIN( wall_adjustment_factor *          &
180                                     ( zu(k) - zw(nzb_s_inner(j,i)) ), &
181                                     l_grid(k) )
182                   ELSE
183                      l(k,j)  = MIN( l_grid(k), l_stable )
184                      ll(k,j) = l_grid(k)
185                   ENDIF
186
187                ENDDO
188             ENDDO
189
190!
191!--          Calculate the tendency terms
192             DO  j = nys, nyn
193                DO  k = nzb_s_inner(j,i)+1, nzt
194
195                    dissipation(k,j) = ( 0.19_wp + 0.74_wp * l(k,j) / ll(k,j) ) * &
196                                       e(k,j,i) * SQRT( e(k,j,i) ) / l(k,j)
197
198                    tend(k,j,i) = tend(k,j,i)                                  &
199                                        + (                                    &
200                          ( km(k,j,i)+km(k,j,i+1) ) * ( e(k,j,i+1)-e(k,j,i) )  &
201                        - ( km(k,j,i)+km(k,j,i-1) ) * ( e(k,j,i)-e(k,j,i-1) )  &
202                                          ) * ddx2                             &
203                                        + (                                    &
204                          ( km(k,j,i)+km(k,j+1,i) ) * ( e(k,j+1,i)-e(k,j,i) )  &
205                        - ( km(k,j,i)+km(k,j-1,i) ) * ( e(k,j,i)-e(k,j-1,i) )  &
206                                          ) * ddy2                             &
207                                        + (                                    &
208               ( km(k,j,i)+km(k+1,j,i) ) * ( e(k+1,j,i)-e(k,j,i) ) * ddzu(k+1) &
209             - ( km(k,j,i)+km(k-1,j,i) ) * ( e(k,j,i)-e(k-1,j,i) ) * ddzu(k)   &
210                                          ) * ddzw(k)                          &
211                             - dissipation(k,j)
212
213                ENDDO
214             ENDDO
215
216!
217!--          Store dissipation if needed for calculating the sgs particle
218!--          velocities
219             IF ( use_sgs_for_particles  .OR.  wang_kernel  .OR.               &
220                  collision_turbulence )  THEN
221                DO  j = nys, nyn
222                   DO  k = nzb_s_inner(j,i)+1, nzt
223                      diss(k,j,i) = dissipation(k,j)
224                   ENDDO
225                ENDDO
226             ENDIF
227
228          ENDDO
229
230       ELSE
231
232          DO  i = nxl, nxr
233             DO  j = nys, nyn
234                DO  k = nzb_s_inner(j,i)+1, nzt
235!
236!--                Calculate the mixing length (for dissipation)
237                   dvar_dz = atmos_ocean_sign * &
238                             ( var(k+1,j,i) - var(k-1,j,i) ) * dd2zu(k)
239                   IF ( dvar_dz > 0.0_wp ) THEN
240                      l_stable = 0.76_wp * SQRT( e(k,j,i) ) / &
241                                           SQRT( g / var(k,j,i) * dvar_dz ) + 1E-5_wp
242                   ELSE
243                      l_stable = l_grid(k)
244                   ENDIF
245!
246!--                Adjustment of the mixing length
247                   IF ( wall_adjustment )  THEN
248                      l(k,j)  = MIN( wall_adjustment_factor *          &
249                                     ( zu(k) - zw(nzb_s_inner(j,i)) ), &
250                                     l_grid(k), l_stable )
251                      ll(k,j) = MIN( wall_adjustment_factor *          &
252                                     ( zu(k) - zw(nzb_s_inner(j,i)) ), &
253                                     l_grid(k) )
254                   ELSE
255                      l(k,j)  = MIN( l_grid(k), l_stable )
256                      ll(k,j) = l_grid(k)
257                   ENDIF
258
259                ENDDO
260             ENDDO
261
262!
263!--          Calculate the tendency terms
264             DO  j = nys, nyn
265                DO  k = nzb_s_inner(j,i)+1, nzt
266
267                    dissipation(k,j) = ( 0.19_wp + 0.74_wp * l(k,j) / ll(k,j) ) * &
268                                             e(k,j,i) * SQRT( e(k,j,i) ) / l(k,j)
269
270                    tend(k,j,i) = tend(k,j,i)                                  &
271                                        + (                                    &
272                          ( km(k,j,i)+km(k,j,i+1) ) * ( e(k,j,i+1)-e(k,j,i) )  &
273                        - ( km(k,j,i)+km(k,j,i-1) ) * ( e(k,j,i)-e(k,j,i-1) )  &
274                                          ) * ddx2                             &
275                                        + (                                    &
276                          ( km(k,j,i)+km(k,j+1,i) ) * ( e(k,j+1,i)-e(k,j,i) )  &
277                        - ( km(k,j,i)+km(k,j-1,i) ) * ( e(k,j,i)-e(k,j-1,i) )  &
278                                          ) * ddy2                             &
279                                        + (                                    &
280               ( km(k,j,i)+km(k+1,j,i) ) * ( e(k+1,j,i)-e(k,j,i) ) * ddzu(k+1) &
281             - ( km(k,j,i)+km(k-1,j,i) ) * ( e(k,j,i)-e(k-1,j,i) ) * ddzu(k)   &
282                                          ) * ddzw(k)                          &
283                             - dissipation(k,j)
284
285                ENDDO
286             ENDDO
287
288!
289!--          Store dissipation if needed for calculating the sgs particle
290!--          velocities
291             IF ( use_sgs_for_particles  .OR.  wang_kernel  .OR.               &
292                  collision_turbulence )  THEN
293                DO  j = nys, nyn
294                   DO  k = nzb_s_inner(j,i)+1, nzt
295                      diss(k,j,i) = dissipation(k,j)
296                   ENDDO
297                ENDDO
298             ENDIF
299
300          ENDDO
301
302       ENDIF
303
304!
305!--    Boundary condition for dissipation
306       IF ( use_sgs_for_particles  .OR.  wang_kernel  .OR.                     &
307            collision_turbulence )  THEN
308          DO  i = nxl, nxr
309             DO  j = nys, nyn
310                diss(nzb_s_inner(j,i),j,i) = diss(nzb_s_inner(j,i)+1,j,i)
311             ENDDO
312          ENDDO
313       ENDIF
314
315    END SUBROUTINE diffusion_e
316
317
318!------------------------------------------------------------------------------!
319! Description:
320! ------------
321!> Call for all grid points - accelerator version
322!------------------------------------------------------------------------------!
323    SUBROUTINE diffusion_e_acc( var, var_reference )
324
325       USE arrays_3d,                                                          &
326           ONLY:  dd2zu, ddzu, ddzw, diss, e, km, l_grid, tend, zu, zw
327         
328       USE control_parameters,                                                 &
329           ONLY:  atmos_ocean_sign, g, use_single_reference_value,             &
330                  wall_adjustment, wall_adjustment_factor
331
332       USE cloud_parameters,                                                   &
333           ONLY:  collision_turbulence
334
335       USE grid_variables,                                                     &
336           ONLY:  ddx2, ddy2
337           
338       USE indices,                                                            &
339           ONLY:  i_left, i_right, j_north, j_south, nxlg, nxrg, nyng, nysg,   &
340                  nzb, nzb_s_inner, nzt
341           
342       USE kinds
343       
344       USE particle_attributes,                                                &
345           ONLY:  use_sgs_for_particles, wang_kernel
346
347       IMPLICIT NONE
348
349       INTEGER(iwp) ::  i              !<
350       INTEGER(iwp) ::  j              !<
351       INTEGER(iwp) ::  k              !<
352       REAL(wp)     ::  dissipation    !<
353       REAL(wp)     ::  dvar_dz        !<
354       REAL(wp)     ::  l              !<
355       REAL(wp)     ::  ll             !<
356       REAL(wp)     ::  l_stable       !<
357       REAL(wp)     ::  var_reference  !<
358
359#if defined( __nopointer )
360       REAL(wp), DIMENSION(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ::  var  !<
361#else
362       REAL(wp), DIMENSION(:,:,:), POINTER ::  var  !<
363#endif
364
365
366!
367!--    This if clause must be outside the k-loop because otherwise
368!--    runtime errors occur with -C hopt on NEC
369       IF ( use_single_reference_value )  THEN
370
371          !$acc kernels present( ddzu, ddzw, dd2zu, diss, e, km, l_grid ) &
372          !$acc         present( nzb_s_inner, tend, var, zu, zw )
373          DO  i = i_left, i_right
374             DO  j = j_south, j_north
375                DO  k = 1, nzt
376
377                   IF ( k > nzb_s_inner(j,i) )  THEN
378!
379!--                   Calculate the mixing length (for dissipation)
380                      dvar_dz = atmos_ocean_sign * &
381                                ( var(k+1,j,i) - var(k-1,j,i) ) * dd2zu(k)
382                      IF ( dvar_dz > 0.0_wp ) THEN
383                         l_stable = 0.76_wp * SQRT( e(k,j,i) ) / &
384                                       SQRT( g / var_reference * dvar_dz ) + 1E-5_wp
385                      ELSE
386                         l_stable = l_grid(k)
387                      ENDIF
388!
389!--                   Adjustment of the mixing length
390                      IF ( wall_adjustment )  THEN
391                         l  = MIN( wall_adjustment_factor *          &
392                                   ( zu(k) - zw(nzb_s_inner(j,i)) ), &
393                                   l_grid(k), l_stable )
394                         ll = MIN( wall_adjustment_factor *          &
395                                   ( zu(k) - zw(nzb_s_inner(j,i)) ), &
396                                   l_grid(k) )
397                      ELSE
398                         l  = MIN( l_grid(k), l_stable )
399                         ll = l_grid(k)
400                      ENDIF
401!
402!--                   Calculate the tendency terms
403                      dissipation = ( 0.19_wp + 0.74_wp * l / ll ) * &
404                                          e(k,j,i) * SQRT( e(k,j,i) ) / l
405
406                      tend(k,j,i) = tend(k,j,i)                                  &
407                                        + (                                    &
408                          ( km(k,j,i)+km(k,j,i+1) ) * ( e(k,j,i+1)-e(k,j,i) )  &
409                        - ( km(k,j,i)+km(k,j,i-1) ) * ( e(k,j,i)-e(k,j,i-1) )  &
410                                          ) * ddx2                             &
411                                        + (                                    &
412                          ( km(k,j,i)+km(k,j+1,i) ) * ( e(k,j+1,i)-e(k,j,i) )  &
413                        - ( km(k,j,i)+km(k,j-1,i) ) * ( e(k,j,i)-e(k,j-1,i) )  &
414                                          ) * ddy2                             &
415                                        + (                                    &
416               ( km(k,j,i)+km(k+1,j,i) ) * ( e(k+1,j,i)-e(k,j,i) ) * ddzu(k+1) &
417             - ( km(k,j,i)+km(k-1,j,i) ) * ( e(k,j,i)-e(k-1,j,i) ) * ddzu(k)   &
418                                          ) * ddzw(k)                          &
419                                  - dissipation
420
421!
422!--                   Store dissipation if needed for calculating the sgs particle
423!--                   velocities
424                      IF ( use_sgs_for_particles  .OR.  wang_kernel  .OR.      &
425                           collision_turbulence )  THEN
426                         diss(k,j,i) = dissipation
427                      ENDIF
428
429                   ENDIF
430
431                ENDDO
432             ENDDO
433          ENDDO
434          !$acc end kernels
435
436       ELSE
437
438          !$acc kernels present( ddzu, ddzw, dd2zu, diss, e, km, l_grid ) &
439          !$acc         present( nzb_s_inner, tend, var, zu, zw )
440          DO  i = i_left, i_right
441             DO  j = j_south, j_north
442                DO  k = 1, nzt
443
444                   IF ( k > nzb_s_inner(j,i) )  THEN
445!
446!--                   Calculate the mixing length (for dissipation)
447                      dvar_dz = atmos_ocean_sign * &
448                                ( var(k+1,j,i) - var(k-1,j,i) ) * dd2zu(k)
449                      IF ( dvar_dz > 0.0_wp ) THEN
450                         l_stable = 0.76_wp * SQRT( e(k,j,i) ) / &
451                                              SQRT( g / var(k,j,i) * dvar_dz ) + 1E-5_wp
452                      ELSE
453                         l_stable = l_grid(k)
454                      ENDIF
455!
456!--                   Adjustment of the mixing length
457                      IF ( wall_adjustment )  THEN
458                         l  = MIN( wall_adjustment_factor *          &
459                                   ( zu(k) - zw(nzb_s_inner(j,i)) ), &
460                                     l_grid(k), l_stable )
461                         ll = MIN( wall_adjustment_factor *          &
462                                   ( zu(k) - zw(nzb_s_inner(j,i)) ), &
463                                   l_grid(k) )
464                      ELSE
465                         l  = MIN( l_grid(k), l_stable )
466                         ll = l_grid(k)
467                      ENDIF
468!
469!--                   Calculate the tendency terms
470                      dissipation = ( 0.19_wp + 0.74_wp * l / ll ) * &
471                                          e(k,j,i) * SQRT( e(k,j,i) ) / l
472
473                      tend(k,j,i) = tend(k,j,i)                                &
474                                        + (                                    &
475                          ( km(k,j,i)+km(k,j,i+1) ) * ( e(k,j,i+1)-e(k,j,i) )  &
476                        - ( km(k,j,i)+km(k,j,i-1) ) * ( e(k,j,i)-e(k,j,i-1) )  &
477                                          ) * ddx2                             &
478                                        + (                                    &
479                          ( km(k,j,i)+km(k,j+1,i) ) * ( e(k,j+1,i)-e(k,j,i) )  &
480                        - ( km(k,j,i)+km(k,j-1,i) ) * ( e(k,j,i)-e(k,j-1,i) )  &
481                                          ) * ddy2                             &
482                                        + (                                    &
483               ( km(k,j,i)+km(k+1,j,i) ) * ( e(k+1,j,i)-e(k,j,i) ) * ddzu(k+1) &
484             - ( km(k,j,i)+km(k-1,j,i) ) * ( e(k,j,i)-e(k-1,j,i) ) * ddzu(k)   &
485                                          ) * ddzw(k)                          &
486                                  - dissipation
487
488!
489!--                   Store dissipation if needed for calculating the sgs
490!--                   particle  velocities
491                      IF ( use_sgs_for_particles  .OR.  wang_kernel  .OR.      &
492                           collision_turbulence )  THEN
493                         diss(k,j,i) = dissipation
494                      ENDIF
495
496                   ENDIF
497
498                ENDDO
499             ENDDO
500          ENDDO
501          !$acc end kernels
502
503       ENDIF
504
505!
506!--    Boundary condition for dissipation
507       IF ( use_sgs_for_particles  .OR.  wang_kernel  .OR.                     &
508            collision_turbulence )  THEN
509          !$acc kernels present( diss, nzb_s_inner )
510          DO  i = i_left, i_right
511             DO  j = j_south, j_north
512                diss(nzb_s_inner(j,i),j,i) = diss(nzb_s_inner(j,i)+1,j,i)
513             ENDDO
514          ENDDO
515          !$acc end kernels
516       ENDIF
517
518    END SUBROUTINE diffusion_e_acc
519
520
521!------------------------------------------------------------------------------!
522! Description:
523! ------------
524!> Call for grid point i,j
525!------------------------------------------------------------------------------!
526    SUBROUTINE diffusion_e_ij( i, j, var, var_reference )
527
528       USE arrays_3d,                                                          &
529           ONLY:  dd2zu, ddzu, ddzw, diss, e, km, l_grid, tend, zu, zw
530         
531       USE control_parameters,                                                 &
532           ONLY:  atmos_ocean_sign, g, use_single_reference_value,             &
533                  wall_adjustment, wall_adjustment_factor
534
535       USE cloud_parameters,                                                   &
536           ONLY:  collision_turbulence
537
538       USE grid_variables,                                                     &
539           ONLY:  ddx2, ddy2
540           
541       USE indices,                                                            &
542           ONLY:  nxlg, nxrg, nyng, nysg, nzb, nzb_s_inner, nzt
543           
544       USE kinds
545       
546       USE particle_attributes,                                                &
547           ONLY:  use_sgs_for_particles, wang_kernel
548
549       IMPLICIT NONE
550
551       INTEGER(iwp) ::  i              !<
552       INTEGER(iwp) ::  j              !<
553       INTEGER(iwp) ::  k              !<
554       REAL(wp)     ::  dvar_dz        !<
555       REAL(wp)     ::  l_stable       !<
556       REAL(wp)     ::  var_reference  !<
557
558#if defined( __nopointer )
559       REAL(wp), DIMENSION(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ::  var  !<
560#else
561       REAL(wp), DIMENSION(:,:,:), POINTER ::  var     !<
562#endif
563       REAL(wp), DIMENSION(nzb+1:nzt) ::  dissipation  !<
564       REAL(wp), DIMENSION(nzb+1:nzt) ::  l            !<
565       REAL(wp), DIMENSION(nzb+1:nzt) ::  ll           !<
566
567
568!
569!--    Calculate the mixing length (for dissipation)
570       DO  k = nzb_s_inner(j,i)+1, nzt
571          dvar_dz = atmos_ocean_sign * &
572                    ( var(k+1,j,i) - var(k-1,j,i) ) * dd2zu(k)
573          IF ( dvar_dz > 0.0_wp ) THEN
574             IF ( use_single_reference_value )  THEN
575                l_stable = 0.76_wp * SQRT( e(k,j,i) ) / &
576                                     SQRT( g / var_reference * dvar_dz ) + 1E-5_wp
577             ELSE
578                l_stable = 0.76_wp * SQRT( e(k,j,i) ) / &
579                                     SQRT( g / var(k,j,i) * dvar_dz ) + 1E-5_wp
580             ENDIF
581          ELSE
582             l_stable = l_grid(k)
583          ENDIF
584!
585!--       Adjustment of the mixing length
586          IF ( wall_adjustment )  THEN
587             l(k)  = MIN( wall_adjustment_factor *                     &
588                          ( zu(k) - zw(nzb_s_inner(j,i)) ), l_grid(k), &
589                          l_stable )
590             ll(k) = MIN( wall_adjustment_factor *                     &
591                          ( zu(k) - zw(nzb_s_inner(j,i)) ), l_grid(k) )
592          ELSE
593             l(k)  = MIN( l_grid(k), l_stable )
594             ll(k) = l_grid(k)
595          ENDIF
596!
597!--       Calculate the tendency term
598          dissipation(k) = ( 0.19_wp + 0.74_wp * l(k) / ll(k) ) * e(k,j,i) * &
599                                 SQRT( e(k,j,i) ) / l(k)
600
601          tend(k,j,i) = tend(k,j,i)                                           &
602                                       + (                                    &
603                         ( km(k,j,i)+km(k,j,i+1) ) * ( e(k,j,i+1)-e(k,j,i) )  &
604                       - ( km(k,j,i)+km(k,j,i-1) ) * ( e(k,j,i)-e(k,j,i-1) )  &
605                                         ) * ddx2                             &
606                                       + (                                    &
607                         ( km(k,j,i)+km(k,j+1,i) ) * ( e(k,j+1,i)-e(k,j,i) )  &
608                       - ( km(k,j,i)+km(k,j-1,i) ) * ( e(k,j,i)-e(k,j-1,i) )  &
609                                         ) * ddy2                             &
610                                       + (                                    &
611              ( km(k,j,i)+km(k+1,j,i) ) * ( e(k+1,j,i)-e(k,j,i) ) * ddzu(k+1) &
612            - ( km(k,j,i)+km(k-1,j,i) ) * ( e(k,j,i)-e(k-1,j,i) ) * ddzu(k)   &
613                                         ) * ddzw(k)                          &
614                                       - dissipation(k)
615
616       ENDDO
617
618!
619!--    Store dissipation if needed for calculating the sgs particle velocities
620       IF ( use_sgs_for_particles  .OR.  wang_kernel  .OR.  collision_turbulence )  THEN
621          DO  k = nzb_s_inner(j,i)+1, nzt
622             diss(k,j,i) = dissipation(k)
623          ENDDO
624!
625!--       Boundary condition for dissipation
626          diss(nzb_s_inner(j,i),j,i) = diss(nzb_s_inner(j,i)+1,j,i)
627       ENDIF
628
629    END SUBROUTINE diffusion_e_ij
630
631 END MODULE diffusion_e_mod
Note: See TracBrowser for help on using the repository browser.