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

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

Added support for RRTMG radiation code

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