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

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

Added support for RRTMG radiation code

  • Property svn:keywords set to Id
File size: 16.4 KB
RevLine 
[1]1 SUBROUTINE average_3d_data
2
[1036]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!
[1310]17! Copyright 1997-2014 Leibniz Universitaet Hannover
[1036]18!--------------------------------------------------------------------------------!
19!
[484]20! Current revisions:
[1]21! -----------------
[1585]22! Adapted for RRTMG
[1552]23!
[1321]24! Former revisions:
25! -----------------
26! $Id: average_3d_data.f90 1585 2015-04-30 07:05:52Z maronga $
27!
[1556]28! 1555 2015-03-04 17:44:27Z maronga
29! Added output of r_a and r_s
30!
[1552]31! 1551 2015-03-03 14:18:16Z maronga
32! Added support for land surface and radiation model parameters.
33!
[1323]34! 1322 2014-03-20 16:38:49Z raasch
35! REAL functions provided with KIND-attribute
36!
[1321]37! 1320 2014-03-20 08:40:49Z raasch
[1320]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
[772]44!
[1319]45! 1318 2014-03-17 13:35:16Z raasch
46! barrier argument removed from cpu_log,
47! module interfaces removed
48!
[1116]49! 1115 2013-03-26 18:16:16Z hoffmann
50! +qc
51!
[1054]52! 1053 2012-11-13 17:11:03Z hoffmann
53! averaging of nr, qr added
54!
[1037]55! 1036 2012-10-22 13:43:42Z raasch
56! code put under GPL (PALM 3.9)
57!
[979]58! 978 2012-08-09 08:28:32Z fricke
59! +z0h_av
[77]60!
[1]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
[1320]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
[1551]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,      &
[1555]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
[1320]88
[1551]89    USE radiation_model_mod,                                                   &
[1585]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
[1551]93
[1]94    IMPLICIT NONE
95
[1320]96    INTEGER(iwp) ::  i  !:
97    INTEGER(iwp) ::  ii !:
98    INTEGER(iwp) ::  j  !:
99    INTEGER(iwp) ::  k  !:
[1]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
[1551]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
[1]137          CASE ( 'e' )
[667]138             DO  i = nxlg, nxrg
139                DO  j = nysg, nyng
[1]140                   DO  k = nzb, nzt+1
[1322]141                      e_av(k,j,i) = e_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]142                   ENDDO
143                ENDDO
144             ENDDO
145
[1551]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
[354]153          CASE ( 'qsws*' )
[667]154             DO  i = nxlg, nxrg
155                DO  j = nysg, nyng
[1322]156                   qsws_av(j,i) = qsws_av(j,i) / REAL( average_count_3d, KIND=wp )
[354]157                ENDDO
158             ENDDO
159
[1551]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
[771]167          CASE ( 'lpt' )
168             DO  i = nxlg, nxrg
169                DO  j = nysg, nyng
170                   DO  k = nzb, nzt+1
[1322]171                      lpt_av(k,j,i) = lpt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[771]172                   ENDDO
173                ENDDO
174             ENDDO
175
[1]176          CASE ( 'lwp*' )
[667]177             DO  i = nxlg, nxrg
178                DO  j = nysg, nyng
[1322]179                   lwp_av(j,i) = lwp_av(j,i) / REAL( average_count_3d, KIND=wp )
[1]180                ENDDO
181             ENDDO
182
[1551]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
[1053]199          CASE ( 'nr' )
200             DO  i = nxlg, nxrg
201                DO  j = nysg, nyng
202                   DO  k = nzb, nzt+1
[1322]203                      nr_av(k,j,i) = nr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1053]204                   ENDDO
205                ENDDO
206             ENDDO
207
[1]208          CASE ( 'p' )
[667]209             DO  i = nxlg, nxrg
210                DO  j = nysg, nyng
[1]211                   DO  k = nzb, nzt+1
[1322]212                      p_av(k,j,i) = p_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]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
[1322]221                      pc_av(k,j,i) = pc_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]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
[1322]230                      pr_av(k,j,i) = pr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]231                   ENDDO
232                ENDDO
233             ENDDO
234
[72]235          CASE ( 'prr*' )
[667]236             DO  i = nxlg, nxrg
237                DO  j = nysg, nyng
[1320]238                   precipitation_rate_av(j,i) = precipitation_rate_av(j,i) /   &
[1322]239                                                REAL( average_count_3d, KIND=wp )
[72]240                ENDDO
241             ENDDO
242
[1]243          CASE ( 'pt' )
[667]244             DO  i = nxlg, nxrg
245                DO  j = nysg, nyng
[1]246                   DO  k = nzb, nzt+1
[1322]247                      pt_av(k,j,i) = pt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]248                   ENDDO
249                ENDDO
250             ENDDO
251
252          CASE ( 'q' )
[667]253             DO  i = nxlg, nxrg
254                DO  j = nysg, nyng
[1]255                   DO  k = nzb, nzt+1
[1322]256                      q_av(k,j,i) = q_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]257                   ENDDO
258                ENDDO
259             ENDDO
[367]260
[1115]261          CASE ( 'qc' )
262             DO  i = nxlg, nxrg
263                DO  j = nysg, nyng
264                   DO  k = nzb, nzt+1
[1322]265                      qc_av(k,j,i) = qc_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1115]266                   ENDDO
267                ENDDO
268             ENDDO
269
[1]270          CASE ( 'ql' )
[667]271             DO  i = nxlg, nxrg
272                DO  j = nysg, nyng
[1]273                   DO  k = nzb, nzt+1
[1322]274                      ql_av(k,j,i) = ql_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]275                   ENDDO
276                ENDDO
277             ENDDO
278
279          CASE ( 'ql_c' )
[667]280             DO  i = nxlg, nxrg
281                DO  j = nysg, nyng
[1]282                   DO  k = nzb, nzt+1
[1322]283                      ql_c_av(k,j,i) = ql_c_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]284                   ENDDO
285                ENDDO
286             ENDDO
287
288          CASE ( 'ql_v' )
[667]289             DO  i = nxlg, nxrg
290                DO  j = nysg, nyng
[1]291                   DO  k = nzb, nzt+1
[1322]292                      ql_v_av(k,j,i) = ql_v_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]293                   ENDDO
294                ENDDO
295             ENDDO
296
297          CASE ( 'ql_vp' )
[667]298             DO  i = nxlg, nxrg
299                DO  j = nysg, nyng
[1]300                   DO  k = nzb, nzt+1
[1320]301                      ql_vp_av(k,j,i) = ql_vp_av(k,j,i) /                      &
[1322]302                                        REAL( average_count_3d, KIND=wp )
[1]303                   ENDDO
304                ENDDO
305             ENDDO
306
[1053]307          CASE ( 'qr' )
308             DO  i = nxlg, nxrg
309                DO  j = nysg, nyng
310                   DO  k = nzb, nzt+1
[1322]311                      qr_av(k,j,i) = qr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1053]312                   ENDDO
313                ENDDO
314             ENDDO
315
[1551]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
[1]344          CASE ( 'qv' )
[667]345             DO  i = nxlg, nxrg
346                DO  j = nysg, nyng
[1]347                   DO  k = nzb, nzt+1
[1322]348                      qv_av(k,j,i) = qv_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]349                   ENDDO
350                ENDDO
351             ENDDO
[367]352
[1585]353         CASE ( 'rad_net*' )
[1551]354             DO  i = nxlg, nxrg
355                DO  j = nysg, nyng
[1585]356                   rad_net_av(j,i) = rad_net_av(j,i) / REAL( average_count_3d, KIND=wp )
[1551]357                ENDDO
358             ENDDO
359
[1585]360          CASE ( 'rad_lw_in' )
[1551]361             DO  i = nxlg, nxrg
362                DO  j = nysg, nyng
[1585]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
[1551]366                ENDDO
367             ENDDO
368
[1585]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
[1555]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
[96]410          CASE ( 'rho' )
[667]411             DO  i = nxlg, nxrg
412                DO  j = nysg, nyng
[96]413                   DO  k = nzb, nzt+1
[1322]414                      rho_av(k,j,i) = rho_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[96]415                   ENDDO
416                ENDDO
417             ENDDO
[367]418
[1]419          CASE ( 's' )
[667]420             DO  i = nxlg, nxrg
421                DO  j = nysg, nyng
[1]422                   DO  k = nzb, nzt+1
[1322]423                      s_av(k,j,i) = s_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]424                   ENDDO
425                ENDDO
426             ENDDO
[367]427
[96]428          CASE ( 'sa' )
[667]429             DO  i = nxlg, nxrg
430                DO  j = nysg, nyng
[96]431                   DO  k = nzb, nzt+1
[1322]432                      sa_av(k,j,i) = sa_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[96]433                   ENDDO
434                ENDDO
435             ENDDO
[367]436
[354]437         CASE ( 'shf*' )
[667]438             DO  i = nxlg, nxrg
439                DO  j = nysg, nyng
[1322]440                   shf_av(j,i) = shf_av(j,i) / REAL( average_count_3d, KIND=wp )
[354]441                ENDDO
442             ENDDO
[367]443
[1]444          CASE ( 't*' )
[667]445             DO  i = nxlg, nxrg
446                DO  j = nysg, nyng
[1322]447                   ts_av(j,i) = ts_av(j,i) / REAL( average_count_3d, KIND=wp )
[1]448                ENDDO
449             ENDDO
450
[1551]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
[1]460          CASE ( 'u' )
[667]461             DO  i = nxlg, nxrg
462                DO  j = nysg, nyng
[1]463                   DO  k = nzb, nzt+1
[1322]464                      u_av(k,j,i) = u_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]465                   ENDDO
466                ENDDO
467             ENDDO
468
469          CASE ( 'u*' )
[667]470             DO  i = nxlg, nxrg
471                DO  j = nysg, nyng
[1322]472                   us_av(j,i) = us_av(j,i) / REAL( average_count_3d, KIND=wp )
[1]473                ENDDO
474             ENDDO
475
476          CASE ( 'v' )
[667]477             DO  i = nxlg, nxrg
478                DO  j = nysg, nyng
[1]479                   DO  k = nzb, nzt+1
[1322]480                      v_av(k,j,i) = v_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]481                   ENDDO
482                ENDDO
483             ENDDO
484
485          CASE ( 'vpt' )
[667]486             DO  i = nxlg, nxrg
487                DO  j = nysg, nyng
[1]488                   DO  k = nzb, nzt+1
[1322]489                      vpt_av(k,j,i) = vpt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]490                   ENDDO
491                ENDDO
492             ENDDO
493
494          CASE ( 'w' )
[667]495             DO  i = nxlg, nxrg
496                DO  j = nysg, nyng
[1]497                   DO  k = nzb, nzt+1
[1322]498                      w_av(k,j,i) = w_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]499                   ENDDO
500                ENDDO
501             ENDDO
502
[72]503          CASE ( 'z0*' )
[667]504             DO  i = nxlg, nxrg
505                DO  j = nysg, nyng
[1322]506                   z0_av(j,i) = z0_av(j,i) / REAL( average_count_3d, KIND=wp )
[72]507                ENDDO
508             ENDDO
509
[978]510          CASE ( 'z0h*' )
511             DO  i = nxlg, nxrg
512                DO  j = nysg, nyng
[1322]513                   z0h_av(j,i) = z0h_av(j,i) / REAL( average_count_3d, KIND=wp )
[978]514                ENDDO
515             ENDDO
516
[1]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
[1318]530    CALL cpu_log( log_point(35), 'average_3d_data', 'stop' )
[1]531
532
533 END SUBROUTINE average_3d_data
Note: See TracBrowser for help on using the repository browser.