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

Last change on this file since 1682 was 1682, checked in by knoop, 9 years ago

Code annotations made doxygen readable

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