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

Last change on this file since 1973 was 1973, checked in by maronga, 8 years ago

last commit documented

  • Property svn:keywords set to Id
File size: 15.3 KB
Line 
1!> @file average_3d_data.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!
22!
23! Former revisions:
24! -----------------
25! $Id: average_3d_data.f90 1973 2016-07-26 07:52:45Z maronga $
26!
27! 1972 2016-07-26 07:52:02Z maronga
28! Output of land surface quantities is now done directly in the respective module
29!
30! 1960 2016-07-12 16:34:24Z suehring
31! Treat humidity and passive scalar separately
32!
33! 1691 2015-10-26 16:17:44Z maronga
34! Added output of Obukhov length and radiative heating rates for RRTMG.
35!
36! 1682 2015-10-07 23:56:08Z knoop
37! Code annotations made doxygen readable
38!
39! 1585 2015-04-30 07:05:52Z maronga
40! Adapted for RRTMG
41!
42! 1555 2015-03-04 17:44:27Z maronga
43! Added output of r_a and r_s
44!
45! 1551 2015-03-03 14:18:16Z maronga
46! Added support for land surface and radiation model parameters.
47!
48! 1322 2014-03-20 16:38:49Z raasch
49! REAL functions provided with KIND-attribute
50!
51! 1320 2014-03-20 08:40:49Z raasch
52! ONLY-attribute added to USE-statements,
53! kind-parameters added to all INTEGER and REAL declaration statements,
54! kinds are defined in new module kinds,
55! revision history before 2012 removed,
56! comment fields (!:) to be used for variable explanations added to
57! all variable declaration statements
58!
59! 1318 2014-03-17 13:35:16Z raasch
60! barrier argument removed from cpu_log,
61! module interfaces removed
62!
63! 1115 2013-03-26 18:16:16Z hoffmann
64! +qc
65!
66! 1053 2012-11-13 17:11:03Z hoffmann
67! averaging of nr, qr added
68!
69! 1036 2012-10-22 13:43:42Z raasch
70! code put under GPL (PALM 3.9)
71!
72! 978 2012-08-09 08:28:32Z fricke
73! +z0h_av
74!
75! Revision 1.1  2006/02/23 09:48:58  raasch
76! Initial revision
77!
78!
79! Description:
80! ------------
81!> Time-averaging of 3d-data-arrays.
82!------------------------------------------------------------------------------!
83 SUBROUTINE average_3d_data
84 
85
86    USE averaging
87
88    USE control_parameters,                                                    &
89        ONLY:  average_count_3d, doav, doav_n
90
91    USE cpulog,                                                                &
92        ONLY:  cpu_log, log_point
93
94    USE indices,                                                               &
95        ONLY:  nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzt
96
97    USE kinds
98
99    USE land_surface_model_mod,                                                &
100        ONLY:  land_surface, lsm_3d_data_averaging
101
102    USE radiation_model_mod,                                                   &
103        ONLY:  rad_net, rad_net_av, rad_lw_in, rad_lw_in_av, rad_lw_out,       &
104               rad_lw_out_av, rad_lw_cs_hr, rad_lw_cs_hr_av, rad_lw_hr,        &
105               rad_lw_hr_av, rad_sw_in, rad_sw_in_av, rad_sw_out,              &
106               rad_sw_out_av, rad_sw_cs_hr, rad_sw_cs_hr_av, rad_sw_hr,        &
107               rad_sw_hr_av
108
109
110    IMPLICIT NONE
111
112    INTEGER(iwp) ::  i  !<
113    INTEGER(iwp) ::  ii !<
114    INTEGER(iwp) ::  j  !<
115    INTEGER(iwp) ::  k  !<
116
117
118    CALL cpu_log (log_point(35),'average_3d_data','start')
119
120!
121!-- Check, if averaging is necessary
122    IF ( average_count_3d <= 1 )  RETURN
123
124!
125!-- Loop of all variables to be averaged.
126    DO  ii = 1, doav_n
127
128!
129!--    Store the array chosen on the temporary array.
130       SELECT CASE ( TRIM( doav(ii) ) )
131
132          CASE ( 'e' )
133             DO  i = nxlg, nxrg
134                DO  j = nysg, nyng
135                   DO  k = nzb, nzt+1
136                      e_av(k,j,i) = e_av(k,j,i) / REAL( average_count_3d, KIND=wp )
137                   ENDDO
138                ENDDO
139             ENDDO
140
141          CASE ( 'qsws*' )
142             DO  i = nxlg, nxrg
143                DO  j = nysg, nyng
144                   qsws_av(j,i) = qsws_av(j,i) / REAL( average_count_3d, KIND=wp )
145                ENDDO
146             ENDDO
147
148          CASE ( 'lpt' )
149             DO  i = nxlg, nxrg
150                DO  j = nysg, nyng
151                   DO  k = nzb, nzt+1
152                      lpt_av(k,j,i) = lpt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
153                   ENDDO
154                ENDDO
155             ENDDO
156
157          CASE ( 'lwp*' )
158             DO  i = nxlg, nxrg
159                DO  j = nysg, nyng
160                   lwp_av(j,i) = lwp_av(j,i) / REAL( average_count_3d, KIND=wp )
161                ENDDO
162             ENDDO
163
164          CASE ( 'nr' )
165             DO  i = nxlg, nxrg
166                DO  j = nysg, nyng
167                   DO  k = nzb, nzt+1
168                      nr_av(k,j,i) = nr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
169                   ENDDO
170                ENDDO
171             ENDDO
172
173         CASE ( 'ol*' )
174             DO  i = nxlg, nxrg
175                DO  j = nysg, nyng
176                   ol_av(j,i) = ol_av(j,i) / REAL( average_count_3d, KIND=wp )
177                ENDDO
178             ENDDO
179
180          CASE ( 'p' )
181             DO  i = nxlg, nxrg
182                DO  j = nysg, nyng
183                   DO  k = nzb, nzt+1
184                      p_av(k,j,i) = p_av(k,j,i) / REAL( average_count_3d, KIND=wp )
185                   ENDDO
186                ENDDO
187             ENDDO
188
189          CASE ( 'pc' )
190             DO  i = nxl, nxr
191                DO  j = nys, nyn
192                   DO  k = nzb, nzt+1
193                      pc_av(k,j,i) = pc_av(k,j,i) / REAL( average_count_3d, KIND=wp )
194                   ENDDO
195                ENDDO
196             ENDDO
197
198          CASE ( 'pr' )
199             DO  i = nxl, nxr
200                DO  j = nys, nyn
201                   DO  k = nzb, nzt+1
202                      pr_av(k,j,i) = pr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
203                   ENDDO
204                ENDDO
205             ENDDO
206
207          CASE ( 'prr*' )
208             DO  i = nxlg, nxrg
209                DO  j = nysg, nyng
210                   precipitation_rate_av(j,i) = precipitation_rate_av(j,i) /   &
211                                                REAL( average_count_3d, KIND=wp )
212                ENDDO
213             ENDDO
214
215          CASE ( 'pt' )
216             DO  i = nxlg, nxrg
217                DO  j = nysg, nyng
218                   DO  k = nzb, nzt+1
219                      pt_av(k,j,i) = pt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
220                   ENDDO
221                ENDDO
222             ENDDO
223
224          CASE ( 'q' )
225             DO  i = nxlg, nxrg
226                DO  j = nysg, nyng
227                   DO  k = nzb, nzt+1
228                      q_av(k,j,i) = q_av(k,j,i) / REAL( average_count_3d, KIND=wp )
229                   ENDDO
230                ENDDO
231             ENDDO
232
233          CASE ( 'qc' )
234             DO  i = nxlg, nxrg
235                DO  j = nysg, nyng
236                   DO  k = nzb, nzt+1
237                      qc_av(k,j,i) = qc_av(k,j,i) / REAL( average_count_3d, KIND=wp )
238                   ENDDO
239                ENDDO
240             ENDDO
241
242          CASE ( 'ql' )
243             DO  i = nxlg, nxrg
244                DO  j = nysg, nyng
245                   DO  k = nzb, nzt+1
246                      ql_av(k,j,i) = ql_av(k,j,i) / REAL( average_count_3d, KIND=wp )
247                   ENDDO
248                ENDDO
249             ENDDO
250
251          CASE ( 'ql_c' )
252             DO  i = nxlg, nxrg
253                DO  j = nysg, nyng
254                   DO  k = nzb, nzt+1
255                      ql_c_av(k,j,i) = ql_c_av(k,j,i) / REAL( average_count_3d, KIND=wp )
256                   ENDDO
257                ENDDO
258             ENDDO
259
260          CASE ( 'ql_v' )
261             DO  i = nxlg, nxrg
262                DO  j = nysg, nyng
263                   DO  k = nzb, nzt+1
264                      ql_v_av(k,j,i) = ql_v_av(k,j,i) / REAL( average_count_3d, KIND=wp )
265                   ENDDO
266                ENDDO
267             ENDDO
268
269          CASE ( 'ql_vp' )
270             DO  i = nxlg, nxrg
271                DO  j = nysg, nyng
272                   DO  k = nzb, nzt+1
273                      ql_vp_av(k,j,i) = ql_vp_av(k,j,i) /                      &
274                                        REAL( average_count_3d, KIND=wp )
275                   ENDDO
276                ENDDO
277             ENDDO
278
279          CASE ( 'qr' )
280             DO  i = nxlg, nxrg
281                DO  j = nysg, nyng
282                   DO  k = nzb, nzt+1
283                      qr_av(k,j,i) = qr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
284                   ENDDO
285                ENDDO
286             ENDDO
287
288          CASE ( 'qv' )
289             DO  i = nxlg, nxrg
290                DO  j = nysg, nyng
291                   DO  k = nzb, nzt+1
292                      qv_av(k,j,i) = qv_av(k,j,i) / REAL( average_count_3d, KIND=wp )
293                   ENDDO
294                ENDDO
295             ENDDO
296
297         CASE ( 'rad_net*' )
298             DO  i = nxlg, nxrg
299                DO  j = nysg, nyng
300                   rad_net_av(j,i) = rad_net_av(j,i) / REAL( average_count_3d, KIND=wp )
301                ENDDO
302             ENDDO
303
304          CASE ( 'rad_lw_in' )
305             DO  i = nxlg, nxrg
306                DO  j = nysg, nyng
307                   DO  k = nzb, nzt+1
308                      rad_lw_in_av(k,j,i) = rad_lw_in_av(k,j,i) / REAL( average_count_3d, KIND=wp )
309                   ENDDO
310                ENDDO
311             ENDDO
312
313          CASE ( 'rad_lw_out' )
314             DO  i = nxlg, nxrg
315                DO  j = nysg, nyng
316                   DO  k = nzb, nzt+1
317                      rad_lw_out_av(k,j,i) = rad_lw_out_av(k,j,i) / REAL( average_count_3d, KIND=wp )
318                   ENDDO
319                ENDDO
320             ENDDO
321
322          CASE ( 'rad_lw_cs_hr' )
323             DO  i = nxlg, nxrg
324                DO  j = nysg, nyng
325                   DO  k = nzb, nzt+1
326                      rad_lw_cs_hr_av(k,j,i) = rad_lw_cs_hr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
327                   ENDDO
328                ENDDO
329             ENDDO
330
331          CASE ( 'rad_lw_hr' )
332             DO  i = nxlg, nxrg
333                DO  j = nysg, nyng
334                   DO  k = nzb, nzt+1
335                      rad_lw_hr_av(k,j,i) = rad_lw_hr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
336                   ENDDO
337                ENDDO
338             ENDDO
339
340          CASE ( 'rad_sw_in' )
341             DO  i = nxlg, nxrg
342                DO  j = nysg, nyng
343                   DO  k = nzb, nzt+1
344                      rad_sw_in_av(k,j,i) = rad_sw_in_av(k,j,i) / REAL( average_count_3d, KIND=wp )
345                   ENDDO
346                ENDDO
347             ENDDO
348
349          CASE ( 'rad_sw_out' )
350             DO  i = nxlg, nxrg
351                DO  j = nysg, nyng
352                   DO  k = nzb, nzt+1
353                      rad_sw_out_av(k,j,i) = rad_sw_out_av(k,j,i) / REAL( average_count_3d, KIND=wp )
354                   ENDDO
355                ENDDO
356             ENDDO
357
358          CASE ( 'rad_sw_cs_hr' )
359             DO  i = nxlg, nxrg
360                DO  j = nysg, nyng
361                   DO  k = nzb, nzt+1
362                      rad_sw_cs_hr_av(k,j,i) = rad_sw_cs_hr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
363                   ENDDO
364                ENDDO
365             ENDDO
366
367          CASE ( 'rad_sw_hr' )
368             DO  i = nxlg, nxrg
369                DO  j = nysg, nyng
370                   DO  k = nzb, nzt+1
371                      rad_sw_hr_av(k,j,i) = rad_sw_hr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
372                   ENDDO
373                ENDDO
374             ENDDO
375
376          CASE ( 'rho' )
377             DO  i = nxlg, nxrg
378                DO  j = nysg, nyng
379                   DO  k = nzb, nzt+1
380                      rho_av(k,j,i) = rho_av(k,j,i) / REAL( average_count_3d, KIND=wp )
381                   ENDDO
382                ENDDO
383             ENDDO
384
385          CASE ( 's' )
386             DO  i = nxlg, nxrg
387                DO  j = nysg, nyng
388                   DO  k = nzb, nzt+1
389                      s_av(k,j,i) = s_av(k,j,i) / REAL( average_count_3d, KIND=wp )
390                   ENDDO
391                ENDDO
392             ENDDO
393
394          CASE ( 'sa' )
395             DO  i = nxlg, nxrg
396                DO  j = nysg, nyng
397                   DO  k = nzb, nzt+1
398                      sa_av(k,j,i) = sa_av(k,j,i) / REAL( average_count_3d, KIND=wp )
399                   ENDDO
400                ENDDO
401             ENDDO
402
403         CASE ( 'shf*' )
404             DO  i = nxlg, nxrg
405                DO  j = nysg, nyng
406                   shf_av(j,i) = shf_av(j,i) / REAL( average_count_3d, KIND=wp )
407                ENDDO
408             ENDDO
409
410          CASE ( 'ssws*' )
411             DO  i = nxlg, nxrg
412                DO  j = nysg, nyng
413                   ssws_av(j,i) = ssws_av(j,i) / REAL( average_count_3d, KIND=wp )
414                ENDDO
415             ENDDO
416
417          CASE ( 't*' )
418             DO  i = nxlg, nxrg
419                DO  j = nysg, nyng
420                   ts_av(j,i) = ts_av(j,i) / REAL( average_count_3d, KIND=wp )
421                ENDDO
422             ENDDO
423
424          CASE ( 'u' )
425             DO  i = nxlg, nxrg
426                DO  j = nysg, nyng
427                   DO  k = nzb, nzt+1
428                      u_av(k,j,i) = u_av(k,j,i) / REAL( average_count_3d, KIND=wp )
429                   ENDDO
430                ENDDO
431             ENDDO
432
433          CASE ( 'u*' )
434             DO  i = nxlg, nxrg
435                DO  j = nysg, nyng
436                   us_av(j,i) = us_av(j,i) / REAL( average_count_3d, KIND=wp )
437                ENDDO
438             ENDDO
439
440          CASE ( 'v' )
441             DO  i = nxlg, nxrg
442                DO  j = nysg, nyng
443                   DO  k = nzb, nzt+1
444                      v_av(k,j,i) = v_av(k,j,i) / REAL( average_count_3d, KIND=wp )
445                   ENDDO
446                ENDDO
447             ENDDO
448
449          CASE ( 'vpt' )
450             DO  i = nxlg, nxrg
451                DO  j = nysg, nyng
452                   DO  k = nzb, nzt+1
453                      vpt_av(k,j,i) = vpt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
454                   ENDDO
455                ENDDO
456             ENDDO
457
458          CASE ( 'w' )
459             DO  i = nxlg, nxrg
460                DO  j = nysg, nyng
461                   DO  k = nzb, nzt+1
462                      w_av(k,j,i) = w_av(k,j,i) / REAL( average_count_3d, KIND=wp )
463                   ENDDO
464                ENDDO
465             ENDDO
466
467          CASE ( 'z0*' )
468             DO  i = nxlg, nxrg
469                DO  j = nysg, nyng
470                   z0_av(j,i) = z0_av(j,i) / REAL( average_count_3d, KIND=wp )
471                ENDDO
472             ENDDO
473
474          CASE ( 'z0h*' )
475             DO  i = nxlg, nxrg
476                DO  j = nysg, nyng
477                   z0h_av(j,i) = z0h_av(j,i) / REAL( average_count_3d, KIND=wp )
478                ENDDO
479             ENDDO
480
481          CASE DEFAULT
482!
483!--          Land surface quantity
484             IF ( land_surface )  THEN
485                CALL lsm_3d_data_averaging( 'average', doav(ii) )
486             ENDIF
487
488!
489!--          User-defined quantity
490             CALL user_3d_data_averaging( 'average', doav(ii) )
491
492       END SELECT
493
494    ENDDO
495
496!
497!-- Reset the counter
498    average_count_3d = 0.0
499
500    CALL cpu_log( log_point(35), 'average_3d_data', 'stop' )
501
502
503 END SUBROUTINE average_3d_data
Note: See TracBrowser for help on using the repository browser.