source: palm/trunk/SOURCE/average_3d_data.f90 @ 4180

Last change on this file since 4180 was 4180, checked in by scharf, 2 years ago

removed comments in 'Former revisions' section that are older than 01.01.2019

  • Property svn:keywords set to Id
File size: 14.0 KB
Line 
1!> @file average_3d_data.f90
2!------------------------------------------------------------------------------!
3! This file is part of the PALM model system.
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-2019 Leibniz Universitaet Hannover
18!------------------------------------------------------------------------------!
19!
20! Current revisions:
21! -----------------
22!
23!
24! Former revisions:
25! -----------------
26! $Id: average_3d_data.f90 4180 2019-08-21 14:37:54Z scharf $
27! Moved tcm_3d_data_averaging to module_interface
28!
29! 4039 2019-06-18 10:32:41Z suehring
30! Modularize diagnostic output
31!
32! 3994 2019-05-22 18:08:09Z suehring
33! output of turbulence intensity added
34!
35! 3933 2019-04-25 12:33:20Z kanani
36! Bugfix in CASE theta_2m*, removal of redundant code
37!
38! 3773 2019-03-01 08:56:57Z maronga
39! Added output of theta_2m*_xy_av
40!
41! 3655 2019-01-07 16:51:22Z knoop
42! Implementation of the PALM module interface
43!
44!
45! Description:
46! ------------
47!> Time-averaging of 3d-data-arrays.
48!------------------------------------------------------------------------------!
49 SUBROUTINE average_3d_data
50 
51
52    USE averaging
53
54    USE control_parameters,                                                    &
55        ONLY:  average_count_3d, doav, doav_n, varnamelength
56
57    USE cpulog,                                                                &
58        ONLY:  cpu_log, log_point
59
60    USE indices,                                                               &
61        ONLY:  nbgp, nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzt
62
63    USE kinds
64
65    USE module_interface,                                                      &
66        ONLY:  module_interface_3d_data_averaging
67
68
69
70
71    IMPLICIT NONE
72
73    INTEGER(iwp) ::  i   !< loop index
74    INTEGER(iwp) ::  ii  !< loop index
75    INTEGER(iwp) ::  j   !< loop index
76    INTEGER(iwp) ::  k   !< loop index
77
78    CHARACTER (LEN=varnamelength) ::  trimvar  !< TRIM of output-variable string
79
80
81    CALL cpu_log (log_point(35),'average_3d_data','start')
82
83!
84!-- Check, if averaging is necessary
85    IF ( average_count_3d <= 1 )  RETURN
86
87!
88!-- Loop of all variables to be averaged.
89    DO  ii = 1, doav_n
90
91       trimvar = TRIM( doav(ii) )
92
93!
94!--    Store the array chosen on the temporary array.
95       SELECT CASE ( trimvar )
96
97          CASE ( 'e' )
98             IF ( ALLOCATED( e_av ) ) THEN
99                DO  i = nxlg, nxrg
100                   DO  j = nysg, nyng
101                      DO  k = nzb, nzt+1
102                         e_av(k,j,i) = e_av(k,j,i) / REAL( average_count_3d, KIND=wp )
103                      ENDDO
104                   ENDDO
105                ENDDO
106             ENDIF
107
108          CASE ( 'ghf*' )
109             IF ( ALLOCATED( ghf_av ) ) THEN
110                DO  i = nxl, nxr
111                   DO  j = nys, nyn
112                      ghf_av(j,i) = ghf_av(j,i)                                   &
113                                    / REAL( average_count_3d, KIND=wp )
114                   ENDDO
115                ENDDO
116                CALL exchange_horiz_2d( ghf_av, nbgp )
117             ENDIF
118
119          CASE ( 'qsws*' )
120             IF ( ALLOCATED( qsws_av ) ) THEN
121                DO  i = nxlg, nxrg
122                   DO  j = nysg, nyng
123                      qsws_av(j,i) = qsws_av(j,i) / REAL( average_count_3d, KIND=wp )
124                   ENDDO
125                ENDDO
126                CALL exchange_horiz_2d( qsws_av, nbgp )
127             ENDIF
128
129          CASE ( 'thetal' )
130             IF ( ALLOCATED( lpt_av ) ) THEN
131                DO  i = nxlg, nxrg
132                   DO  j = nysg, nyng
133                      DO  k = nzb, nzt+1
134                         lpt_av(k,j,i) = lpt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
135                      ENDDO
136                   ENDDO
137                ENDDO
138             ENDIF
139
140          CASE ( 'lwp*' )
141             IF ( ALLOCATED( lwp_av ) ) THEN
142                DO  i = nxlg, nxrg
143                   DO  j = nysg, nyng
144                      lwp_av(j,i) = lwp_av(j,i) / REAL( average_count_3d, KIND=wp )
145                   ENDDO
146                ENDDO
147             ENDIF
148
149         CASE ( 'ol*' )
150             IF ( ALLOCATED( ol_av ) ) THEN
151                DO  i = nxlg, nxrg
152                   DO  j = nysg, nyng
153                      ol_av(j,i) = ol_av(j,i) / REAL( average_count_3d, KIND=wp )
154                   ENDDO
155                ENDDO
156                CALL exchange_horiz_2d( ol_av, nbgp )
157             ENDIF
158
159          CASE ( 'p' )
160             IF ( ALLOCATED( p_av ) ) THEN
161                DO  i = nxlg, nxrg
162                   DO  j = nysg, nyng
163                      DO  k = nzb, nzt+1
164                         p_av(k,j,i) = p_av(k,j,i) / REAL( average_count_3d, KIND=wp )
165                      ENDDO
166                   ENDDO
167                ENDDO
168             ENDIF
169
170          CASE ( 'pc' )
171             IF ( ALLOCATED( pc_av ) ) THEN
172                DO  i = nxl, nxr
173                   DO  j = nys, nyn
174                      DO  k = nzb, nzt+1
175                         pc_av(k,j,i) = pc_av(k,j,i) / REAL( average_count_3d, KIND=wp )
176                      ENDDO
177                   ENDDO
178                ENDDO
179             ENDIF
180
181          CASE ( 'pr' )
182             IF ( ALLOCATED( pr_av ) ) THEN
183                DO  i = nxl, nxr
184                   DO  j = nys, nyn
185                      DO  k = nzb, nzt+1
186                         pr_av(k,j,i) = pr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
187                      ENDDO
188                   ENDDO
189                ENDDO
190             ENDIF
191
192          CASE ( 'theta' )
193             IF ( ALLOCATED( pt_av ) ) THEN
194                DO  i = nxlg, nxrg
195                   DO  j = nysg, nyng
196                      DO  k = nzb, nzt+1
197                         pt_av(k,j,i) = pt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
198                      ENDDO
199                   ENDDO
200                ENDDO
201             ENDIF
202
203          CASE ( 'q' )
204             IF ( ALLOCATED( q_av ) ) THEN
205                DO  i = nxlg, nxrg
206                   DO  j = nysg, nyng
207                      DO  k = nzb, nzt+1
208                         q_av(k,j,i) = q_av(k,j,i) / REAL( average_count_3d, KIND=wp )
209                      ENDDO
210                   ENDDO
211                ENDDO
212             ENDIF
213
214          CASE ( 'ql' )
215             IF ( ALLOCATED( ql_av ) ) THEN
216                DO  i = nxlg, nxrg
217                   DO  j = nysg, nyng
218                      DO  k = nzb, nzt+1
219                         ql_av(k,j,i) = ql_av(k,j,i) / REAL( average_count_3d, KIND=wp )
220                      ENDDO
221                   ENDDO
222                ENDDO
223             ENDIF
224
225          CASE ( 'ql_c' )
226             IF ( ALLOCATED( ql_c_av ) ) THEN
227                DO  i = nxlg, nxrg
228                   DO  j = nysg, nyng
229                      DO  k = nzb, nzt+1
230                         ql_c_av(k,j,i) = ql_c_av(k,j,i) / REAL( average_count_3d, KIND=wp )
231                      ENDDO
232                   ENDDO
233                ENDDO
234             ENDIF
235
236          CASE ( 'ql_v' )
237             IF ( ALLOCATED( ql_v_av ) ) THEN
238                DO  i = nxlg, nxrg
239                   DO  j = nysg, nyng
240                      DO  k = nzb, nzt+1
241                         ql_v_av(k,j,i) = ql_v_av(k,j,i) / REAL( average_count_3d, KIND=wp )
242                      ENDDO
243                   ENDDO
244                ENDDO
245             ENDIF
246
247          CASE ( 'ql_vp' )
248             IF ( ALLOCATED( ql_vp_av ) ) THEN
249                DO  i = nxlg, nxrg
250                   DO  j = nysg, nyng
251                      DO  k = nzb, nzt+1
252                         ql_vp_av(k,j,i) = ql_vp_av(k,j,i) /                      &
253                                           REAL( average_count_3d, KIND=wp )
254                      ENDDO
255                   ENDDO
256                ENDDO
257             ENDIF
258
259          CASE ( 'qv' )
260             IF ( ALLOCATED( qv_av ) ) THEN
261                DO  i = nxlg, nxrg
262                   DO  j = nysg, nyng
263                      DO  k = nzb, nzt+1
264                         qv_av(k,j,i) = qv_av(k,j,i) / REAL( average_count_3d, KIND=wp )
265                      ENDDO
266                   ENDDO
267                ENDDO
268             ENDIF
269
270         CASE ( 'r_a*' )
271             IF ( ALLOCATED( r_a_av ) ) THEN
272                DO  i = nxlg, nxrg
273                   DO  j = nysg, nyng
274                      r_a_av(j,i) = r_a_av(j,i) / REAL( average_count_3d, KIND=wp )
275                   ENDDO
276                ENDDO
277                CALL exchange_horiz_2d( r_a_av, nbgp )
278             ENDIF
279
280          CASE ( 's' )
281             IF ( ALLOCATED( s_av ) ) THEN
282                DO  i = nxlg, nxrg
283                   DO  j = nysg, nyng
284                      DO  k = nzb, nzt+1
285                         s_av(k,j,i) = s_av(k,j,i) / REAL( average_count_3d, KIND=wp )
286                      ENDDO
287                   ENDDO
288                ENDDO
289             ENDIF
290
291         CASE ( 'shf*' )
292             IF ( ALLOCATED( shf_av ) ) THEN
293                DO  i = nxlg, nxrg
294                   DO  j = nysg, nyng
295                      shf_av(j,i) = shf_av(j,i) / REAL( average_count_3d, KIND=wp )
296                   ENDDO
297                ENDDO
298                CALL exchange_horiz_2d( shf_av, nbgp )
299             ENDIF
300
301          CASE ( 'ssws*' )
302             IF ( ALLOCATED( ssws_av ) ) THEN
303                DO  i = nxlg, nxrg
304                   DO  j = nysg, nyng
305                      ssws_av(j,i) = ssws_av(j,i) / REAL( average_count_3d, KIND=wp )
306                   ENDDO
307                ENDDO
308                CALL exchange_horiz_2d( ssws_av, nbgp )
309             ENDIF
310
311         CASE ( 'theta_2m*' )
312             IF ( ALLOCATED( pt_2m_av ) ) THEN
313                DO  i = nxlg, nxrg
314                   DO  j = nysg, nyng
315                      pt_2m_av(j,i) = pt_2m_av(j,i) / REAL( average_count_3d, KIND=wp )
316                   ENDDO
317                ENDDO
318                CALL exchange_horiz_2d( pt_2m_av, nbgp )
319             ENDIF
320
321          CASE ( 't*' )
322             IF ( ALLOCATED( ts_av ) ) THEN
323                DO  i = nxlg, nxrg
324                   DO  j = nysg, nyng
325                      ts_av(j,i) = ts_av(j,i) / REAL( average_count_3d, KIND=wp )
326                   ENDDO
327                ENDDO
328                CALL exchange_horiz_2d( ts_av, nbgp )
329             ENDIF
330
331         CASE ( 'tsurf*' )
332             IF ( ALLOCATED( tsurf_av ) ) THEN
333                DO  i = nxlg, nxrg
334                   DO  j = nysg, nyng
335                      tsurf_av(j,i) = tsurf_av(j,i) / REAL( average_count_3d, KIND=wp )
336                   ENDDO
337                ENDDO
338                CALL exchange_horiz_2d( tsurf_av, nbgp )
339             ENDIF
340
341          CASE ( 'u' )
342             IF ( ALLOCATED( u_av ) ) THEN
343                DO  i = nxlg, nxrg
344                   DO  j = nysg, nyng
345                      DO  k = nzb, nzt+1
346                         u_av(k,j,i) = u_av(k,j,i) / REAL( average_count_3d, KIND=wp )
347                      ENDDO
348                   ENDDO
349                ENDDO
350             ENDIF
351
352          CASE ( 'us*' )
353             IF ( ALLOCATED( us_av ) ) THEN
354                DO  i = nxlg, nxrg
355                   DO  j = nysg, nyng
356                      us_av(j,i) = us_av(j,i) / REAL( average_count_3d, KIND=wp )
357                   ENDDO
358                ENDDO
359                CALL exchange_horiz_2d( us_av, nbgp )
360             ENDIF
361
362          CASE ( 'v' )
363             IF ( ALLOCATED( v_av ) ) THEN
364                DO  i = nxlg, nxrg
365                   DO  j = nysg, nyng
366                      DO  k = nzb, nzt+1
367                         v_av(k,j,i) = v_av(k,j,i) / REAL( average_count_3d, KIND=wp )
368                      ENDDO
369                   ENDDO
370                ENDDO
371             ENDIF
372
373          CASE ( 'thetav' )
374             IF ( ALLOCATED( vpt_av ) ) THEN
375                DO  i = nxlg, nxrg
376                   DO  j = nysg, nyng
377                      DO  k = nzb, nzt+1
378                         vpt_av(k,j,i) = vpt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
379                      ENDDO
380                   ENDDO
381                ENDDO
382             ENDIF
383
384          CASE ( 'w' )
385             IF ( ALLOCATED( w_av ) ) THEN
386                DO  i = nxlg, nxrg
387                   DO  j = nysg, nyng
388                      DO  k = nzb, nzt+1
389                         w_av(k,j,i) = w_av(k,j,i) / REAL( average_count_3d, KIND=wp )
390                      ENDDO
391                   ENDDO
392                ENDDO
393             ENDIF
394
395          CASE ( 'z0*' )
396             IF ( ALLOCATED( z0_av ) ) THEN
397                DO  i = nxlg, nxrg
398                   DO  j = nysg, nyng
399                      z0_av(j,i) = z0_av(j,i) / REAL( average_count_3d, KIND=wp )
400                   ENDDO
401                ENDDO
402                CALL exchange_horiz_2d( z0_av, nbgp )
403             ENDIF
404
405          CASE ( 'z0h*' )
406             IF ( ALLOCATED( z0h_av ) ) THEN
407                DO  i = nxlg, nxrg
408                   DO  j = nysg, nyng
409                      z0h_av(j,i) = z0h_av(j,i) / REAL( average_count_3d, KIND=wp )
410                   ENDDO
411                ENDDO
412                CALL exchange_horiz_2d( z0h_av, nbgp )
413             ENDIF
414
415          CASE ( 'z0q*' )
416             IF ( ALLOCATED( z0q_av ) ) THEN
417                DO  i = nxlg, nxrg
418                   DO  j = nysg, nyng
419                      z0q_av(j,i) = z0q_av(j,i) / REAL( average_count_3d, KIND=wp )
420                   ENDDO
421                ENDDO
422                CALL exchange_horiz_2d( z0q_av, nbgp )
423             ENDIF
424
425          CASE DEFAULT
426!
427!--          Averaging of data from all other modules
428             CALL module_interface_3d_data_averaging( 'average', trimvar )
429
430       END SELECT
431
432    ENDDO
433
434!
435!-- Reset the counter
436    average_count_3d = 0.0
437
438    CALL cpu_log( log_point(35), 'average_3d_data', 'stop' )
439
440
441 END SUBROUTINE average_3d_data
Note: See TracBrowser for help on using the repository browser.