source: palm/trunk/SOURCE/disturb_heatflux.f90 @ 2232

Last change on this file since 2232 was 2232, checked in by suehring, 4 years ago

Adjustments according new topography and surface-modelling concept implemented

  • Property svn:keywords set to Id
File size: 5.3 KB
Line 
1!> @file disturb_heatflux.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
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.
9!
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 FOR
12! A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
13!
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/>.
16!
17! Copyright 1997-2017 Leibniz Universitaet Hannover
18!------------------------------------------------------------------------------!
19!
20! Current revisions:
21! ------------------
22! Adjustment according new surface data type.
23! Implemented parallel random number generator to obtain always the same
24! random number distribution regardless of the processor distribution.
25!
26! Former revisions:
27! -----------------
28! $Id: disturb_heatflux.f90 2232 2017-05-30 17:47:52Z suehring $
29!
30! 2037 2016-10-26 11:15:40Z knoop
31! Anelastic approximation implemented
32!
33! 2000 2016-08-20 18:09:15Z knoop
34! Forced header and separation lines into 80 columns
35!
36! 1682 2015-10-07 23:56:08Z knoop
37! Code annotations made doxygen readable
38!
39! 1353 2014-04-08 15:21:23Z heinze
40! REAL constants provided with KIND-attribute
41!
42! 1322 2014-03-20 16:38:49Z raasch
43! REAL constants defined as wp-kind
44!
45! 1320 2014-03-20 08:40:49Z raasch
46! ONLY-attribute added to USE-statements,
47! kind-parameters added to all INTEGER and REAL declaration statements,
48! kinds are defined in new module kinds,
49! revision history before 2012 removed,
50! comment fields (!:) to be used for variable explanations added to
51! all variable declaration statements
52!
53! 1036 2012-10-22 13:43:42Z raasch
54! code put under GPL (PALM 3.9)
55!
56! Revision 1.1  1998/03/25 20:03:47  raasch
57! Initial revision
58!
59!
60! Description:
61! ------------
62!> Generate random, normally distributed heatflux values and store them as the
63!> near-surface heatflux.
64!------------------------------------------------------------------------------!
65 SUBROUTINE disturb_heatflux( surf )
66 
67
68    USE arrays_3d,                                                             &
69        ONLY:  heatflux_input_conversion
70       
71    USE control_parameters,                                                    &
72        ONLY:  iran, surface_heatflux, random_generator, wall_heatflux
73       
74    USE cpulog,                                                                &
75        ONLY:  cpu_log, log_point
76       
77    USE kinds
78   
79    USE indices,                                                               &
80        ONLY:  nzb
81
82    USE random_generator_parallel,                                             &
83        ONLY:  random_number_parallel, random_seed_parallel, random_dummy,     &
84               id_random_array, seq_random_array
85
86    USE surface_mod,                                                           &
87        ONLY:  surf_type
88
89    IMPLICIT NONE
90
91    INTEGER(iwp) ::  i  !< grid index, x direction
92    INTEGER(iwp) ::  j  !< grid index, y direction
93    INTEGER(iwp) ::  k  !< grid index, z direction
94    INTEGER(iwp) ::  m  !< loop variables over surface elements
95   
96    REAL(wp) ::  random_gauss  !<
97    REAL(wp) ::  randomnumber  !<
98
99    TYPE(surf_type) ::  surf   !< surface-type variable
100
101
102    CALL cpu_log( log_point(23), 'disturb_heatflux', 'start' )
103
104!
105!-- Generate random disturbances and store them. Note, if
106!-- random_generator /= 'random-parallel' it is not guaranteed to obtain 
107!-- the same random distribution if the number of processors is changed.
108    IF ( random_generator /= 'random-parallel' )  THEN
109
110       DO  m = 1, surf%ns
111
112          k = surf%k(m)
113
114          randomnumber = random_gauss( iran, 5.0_wp )     
115!
116!--       k-1 is topography top index. If this is 0, set surface heatflux. Over
117!--       topography surface_heatflux is replaced by wall_heatflux(0).
118          IF ( k-1 == 0 )  THEN
119             surf%shf(m) = randomnumber * surface_heatflux                     &
120                              * heatflux_input_conversion(nzb)
121          ELSE
122             surf%shf(m) = randomnumber * wall_heatflux(0)                     &
123                              * heatflux_input_conversion(k-1)
124          ENDIF
125       ENDDO
126    ELSE
127
128       DO  m = 1, surf%ns
129
130          i = surf%i(m)
131          j = surf%j(m)
132          k = surf%k(m)
133
134          CALL random_seed_parallel( put=seq_random_array(:, j, i) )
135          CALL random_number_parallel( random_dummy )   
136!
137!--       k-1 is topography top index. If this is 0, set surface heatflux. Over
138!--       topography surface_heatflux is replaced by wall_heatflux(0).
139          IF ( k-1 == 0 )  THEN
140             surf%shf(m) = ( random_dummy - 0.5_wp ) * surface_heatflux        &
141                              * heatflux_input_conversion(nzb)
142          ELSE
143             surf%shf(m) = ( random_dummy - 0.5_wp ) * wall_heatflux(0)        &
144                              * heatflux_input_conversion(k-1)
145          ENDIF
146
147          CALL random_seed_parallel( get=seq_random_array(:, j, i) )
148
149       ENDDO
150
151    ENDIF
152
153    CALL cpu_log( log_point(23), 'disturb_heatflux', 'stop' )
154
155
156 END SUBROUTINE disturb_heatflux
Note: See TracBrowser for help on using the repository browser.