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

Last change on this file since 2004 was 2001, checked in by knoop, 8 years ago

last commit documented

  • Property svn:keywords set to Id
File size: 12.7 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
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-2016 Leibniz Universitaet Hannover
18!------------------------------------------------------------------------------!
19!
20! Current revisions:
21! -----------------
22!
23!
24! Former revisions:
25! -----------------
26! $Id: average_3d_data.f90 2001 2016-08-20 18:41:22Z suehring $
27!
28! 2000 2016-08-20 18:09:15Z knoop
29! Forced header and separation lines into 80 columns
30!
31! 1972 2016-07-26 07:52:02Z maronga
32! Output of land surface quantities is now done directly in the respective module
33!
34! 1960 2016-07-12 16:34:24Z suehring
35! Treat humidity and passive scalar separately
36!
37! 1691 2015-10-26 16:17:44Z maronga
38! Added output of Obukhov length and radiative heating rates for RRTMG.
39!
40! 1682 2015-10-07 23:56:08Z knoop
41! Code annotations made doxygen readable
42!
43! 1585 2015-04-30 07:05:52Z maronga
44! Adapted for RRTMG
45!
46! 1555 2015-03-04 17:44:27Z maronga
47! Added output of r_a and r_s
48!
49! 1551 2015-03-03 14:18:16Z maronga
50! Added support for land surface and radiation model parameters.
51!
52! 1322 2014-03-20 16:38:49Z raasch
53! REAL functions provided with KIND-attribute
54!
55! 1320 2014-03-20 08:40:49Z raasch
56! ONLY-attribute added to USE-statements,
57! kind-parameters added to all INTEGER and REAL declaration statements,
58! kinds are defined in new module kinds,
59! revision history before 2012 removed,
60! comment fields (!:) to be used for variable explanations added to
61! all variable declaration statements
62!
63! 1318 2014-03-17 13:35:16Z raasch
64! barrier argument removed from cpu_log,
65! module interfaces removed
66!
67! 1115 2013-03-26 18:16:16Z hoffmann
68! +qc
69!
70! 1053 2012-11-13 17:11:03Z hoffmann
71! averaging of nr, qr added
72!
73! 1036 2012-10-22 13:43:42Z raasch
74! code put under GPL (PALM 3.9)
75!
76! 978 2012-08-09 08:28:32Z fricke
77! +z0h_av
78!
79! Revision 1.1  2006/02/23 09:48:58  raasch
80! Initial revision
81!
82!
83! Description:
84! ------------
85!> Time-averaging of 3d-data-arrays.
86!------------------------------------------------------------------------------!
87 SUBROUTINE average_3d_data
88 
89
90    USE averaging
91
92    USE control_parameters,                                                    &
93        ONLY:  average_count_3d, doav, doav_n
94
95    USE cpulog,                                                                &
96        ONLY:  cpu_log, log_point
97
98    USE indices,                                                               &
99        ONLY:  nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzt
100
101    USE kinds
102
103    USE land_surface_model_mod,                                                &
104        ONLY:  land_surface, lsm_3d_data_averaging
105
106    USE radiation_model_mod,                                                   &
107        ONLY:  radiation, radiation_3d_data_averaging
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 ( 'rho' )
298             DO  i = nxlg, nxrg
299                DO  j = nysg, nyng
300                   DO  k = nzb, nzt+1
301                      rho_av(k,j,i) = rho_av(k,j,i) / REAL( average_count_3d, KIND=wp )
302                   ENDDO
303                ENDDO
304             ENDDO
305
306          CASE ( 's' )
307             DO  i = nxlg, nxrg
308                DO  j = nysg, nyng
309                   DO  k = nzb, nzt+1
310                      s_av(k,j,i) = s_av(k,j,i) / REAL( average_count_3d, KIND=wp )
311                   ENDDO
312                ENDDO
313             ENDDO
314
315          CASE ( 'sa' )
316             DO  i = nxlg, nxrg
317                DO  j = nysg, nyng
318                   DO  k = nzb, nzt+1
319                      sa_av(k,j,i) = sa_av(k,j,i) / REAL( average_count_3d, KIND=wp )
320                   ENDDO
321                ENDDO
322             ENDDO
323
324         CASE ( 'shf*' )
325             DO  i = nxlg, nxrg
326                DO  j = nysg, nyng
327                   shf_av(j,i) = shf_av(j,i) / REAL( average_count_3d, KIND=wp )
328                ENDDO
329             ENDDO
330
331          CASE ( 'ssws*' )
332             DO  i = nxlg, nxrg
333                DO  j = nysg, nyng
334                   ssws_av(j,i) = ssws_av(j,i) / REAL( average_count_3d, KIND=wp )
335                ENDDO
336             ENDDO
337
338          CASE ( 't*' )
339             DO  i = nxlg, nxrg
340                DO  j = nysg, nyng
341                   ts_av(j,i) = ts_av(j,i) / REAL( average_count_3d, KIND=wp )
342                ENDDO
343             ENDDO
344
345          CASE ( 'u' )
346             DO  i = nxlg, nxrg
347                DO  j = nysg, nyng
348                   DO  k = nzb, nzt+1
349                      u_av(k,j,i) = u_av(k,j,i) / REAL( average_count_3d, KIND=wp )
350                   ENDDO
351                ENDDO
352             ENDDO
353
354          CASE ( 'u*' )
355             DO  i = nxlg, nxrg
356                DO  j = nysg, nyng
357                   us_av(j,i) = us_av(j,i) / REAL( average_count_3d, KIND=wp )
358                ENDDO
359             ENDDO
360
361          CASE ( 'v' )
362             DO  i = nxlg, nxrg
363                DO  j = nysg, nyng
364                   DO  k = nzb, nzt+1
365                      v_av(k,j,i) = v_av(k,j,i) / REAL( average_count_3d, KIND=wp )
366                   ENDDO
367                ENDDO
368             ENDDO
369
370          CASE ( 'vpt' )
371             DO  i = nxlg, nxrg
372                DO  j = nysg, nyng
373                   DO  k = nzb, nzt+1
374                      vpt_av(k,j,i) = vpt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
375                   ENDDO
376                ENDDO
377             ENDDO
378
379          CASE ( 'w' )
380             DO  i = nxlg, nxrg
381                DO  j = nysg, nyng
382                   DO  k = nzb, nzt+1
383                      w_av(k,j,i) = w_av(k,j,i) / REAL( average_count_3d, KIND=wp )
384                   ENDDO
385                ENDDO
386             ENDDO
387
388          CASE ( 'z0*' )
389             DO  i = nxlg, nxrg
390                DO  j = nysg, nyng
391                   z0_av(j,i) = z0_av(j,i) / REAL( average_count_3d, KIND=wp )
392                ENDDO
393             ENDDO
394
395          CASE ( 'z0h*' )
396             DO  i = nxlg, nxrg
397                DO  j = nysg, nyng
398                   z0h_av(j,i) = z0h_av(j,i) / REAL( average_count_3d, KIND=wp )
399                ENDDO
400             ENDDO
401
402          CASE DEFAULT
403!
404!--          Land surface quantity
405             IF ( land_surface )  THEN
406                CALL lsm_3d_data_averaging( 'average', doav(ii) )
407             ENDIF
408
409!
410!--          Radiation quantity
411             IF ( radiation )  THEN
412                CALL radiation_3d_data_averaging( 'average', doav(ii) )
413             ENDIF
414
415!
416!--          User-defined quantity
417             CALL user_3d_data_averaging( 'average', doav(ii) )
418
419       END SELECT
420
421    ENDDO
422
423!
424!-- Reset the counter
425    average_count_3d = 0.0
426
427    CALL cpu_log( log_point(35), 'average_3d_data', 'stop' )
428
429
430 END SUBROUTINE average_3d_data
Note: See TracBrowser for help on using the repository browser.