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

Last change on this file since 1691 was 1691, checked in by maronga, 6 years ago

various bugfixes and modifications of the atmosphere-land-surface-radiation interaction. Completely re-written routine to calculate surface fluxes (surface_layer_fluxes.f90) that replaces prandtl_fluxes. Minor formatting corrections and renamings

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