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

Last change on this file since 1691 was 1691, checked in by maronga, 8 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
RevLine 
[1682]1!> @file average_3d_data.f90
[1036]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!
[1691]16! Copyright 1997-2015 Leibniz Universitaet Hannover
[1036]17!--------------------------------------------------------------------------------!
18!
[484]19! Current revisions:
[1]20! -----------------
[1691]21! Added output of Obukhov length and radiative heating rates for RRTMG.
[1552]22!
[1321]23! Former revisions:
24! -----------------
25! $Id: average_3d_data.f90 1691 2015-10-26 16:17:44Z maronga $
26!
[1683]27! 1682 2015-10-07 23:56:08Z knoop
28! Code annotations made doxygen readable
29!
[1586]30! 1585 2015-04-30 07:05:52Z maronga
31! Adapted for RRTMG
32!
[1556]33! 1555 2015-03-04 17:44:27Z maronga
34! Added output of r_a and r_s
35!
[1552]36! 1551 2015-03-03 14:18:16Z maronga
37! Added support for land surface and radiation model parameters.
38!
[1323]39! 1322 2014-03-20 16:38:49Z raasch
40! REAL functions provided with KIND-attribute
41!
[1321]42! 1320 2014-03-20 08:40:49Z raasch
[1320]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
[772]49!
[1319]50! 1318 2014-03-17 13:35:16Z raasch
51! barrier argument removed from cpu_log,
52! module interfaces removed
53!
[1116]54! 1115 2013-03-26 18:16:16Z hoffmann
55! +qc
56!
[1054]57! 1053 2012-11-13 17:11:03Z hoffmann
58! averaging of nr, qr added
59!
[1037]60! 1036 2012-10-22 13:43:42Z raasch
61! code put under GPL (PALM 3.9)
62!
[979]63! 978 2012-08-09 08:28:32Z fricke
64! +z0h_av
[77]65!
[1]66! Revision 1.1  2006/02/23 09:48:58  raasch
67! Initial revision
68!
69!
70! Description:
71! ------------
[1682]72!> Time-averaging of 3d-data-arrays.
[1]73!------------------------------------------------------------------------------!
[1682]74 SUBROUTINE average_3d_data
75 
[1]76
77    USE averaging
78
[1320]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
[1551]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,      &
[1555]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
[1320]95
[1551]96    USE radiation_model_mod,                                                   &
[1585]97        ONLY:  rad_net, rad_net_av, rad_lw_in, rad_lw_in_av, rad_lw_out,       &
[1691]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
[1551]102
[1691]103
[1]104    IMPLICIT NONE
105
[1682]106    INTEGER(iwp) ::  i  !<
107    INTEGER(iwp) ::  ii !<
108    INTEGER(iwp) ::  j  !<
109    INTEGER(iwp) ::  k  !<
[1]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
[1551]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
[1]147          CASE ( 'e' )
[667]148             DO  i = nxlg, nxrg
149                DO  j = nysg, nyng
[1]150                   DO  k = nzb, nzt+1
[1322]151                      e_av(k,j,i) = e_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]152                   ENDDO
153                ENDDO
154             ENDDO
155
[1551]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
[354]163          CASE ( 'qsws*' )
[667]164             DO  i = nxlg, nxrg
165                DO  j = nysg, nyng
[1322]166                   qsws_av(j,i) = qsws_av(j,i) / REAL( average_count_3d, KIND=wp )
[354]167                ENDDO
168             ENDDO
169
[1551]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
[771]177          CASE ( 'lpt' )
178             DO  i = nxlg, nxrg
179                DO  j = nysg, nyng
180                   DO  k = nzb, nzt+1
[1322]181                      lpt_av(k,j,i) = lpt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[771]182                   ENDDO
183                ENDDO
184             ENDDO
185
[1]186          CASE ( 'lwp*' )
[667]187             DO  i = nxlg, nxrg
188                DO  j = nysg, nyng
[1322]189                   lwp_av(j,i) = lwp_av(j,i) / REAL( average_count_3d, KIND=wp )
[1]190                ENDDO
191             ENDDO
192
[1551]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
[1053]209          CASE ( 'nr' )
210             DO  i = nxlg, nxrg
211                DO  j = nysg, nyng
212                   DO  k = nzb, nzt+1
[1322]213                      nr_av(k,j,i) = nr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1053]214                   ENDDO
215                ENDDO
216             ENDDO
217
[1691]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
[1]225          CASE ( 'p' )
[667]226             DO  i = nxlg, nxrg
227                DO  j = nysg, nyng
[1]228                   DO  k = nzb, nzt+1
[1322]229                      p_av(k,j,i) = p_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]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
[1322]238                      pc_av(k,j,i) = pc_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]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
[1322]247                      pr_av(k,j,i) = pr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]248                   ENDDO
249                ENDDO
250             ENDDO
251
[72]252          CASE ( 'prr*' )
[667]253             DO  i = nxlg, nxrg
254                DO  j = nysg, nyng
[1320]255                   precipitation_rate_av(j,i) = precipitation_rate_av(j,i) /   &
[1322]256                                                REAL( average_count_3d, KIND=wp )
[72]257                ENDDO
258             ENDDO
259
[1]260          CASE ( 'pt' )
[667]261             DO  i = nxlg, nxrg
262                DO  j = nysg, nyng
[1]263                   DO  k = nzb, nzt+1
[1322]264                      pt_av(k,j,i) = pt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]265                   ENDDO
266                ENDDO
267             ENDDO
268
269          CASE ( 'q' )
[667]270             DO  i = nxlg, nxrg
271                DO  j = nysg, nyng
[1]272                   DO  k = nzb, nzt+1
[1322]273                      q_av(k,j,i) = q_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]274                   ENDDO
275                ENDDO
276             ENDDO
[367]277
[1115]278          CASE ( 'qc' )
279             DO  i = nxlg, nxrg
280                DO  j = nysg, nyng
281                   DO  k = nzb, nzt+1
[1322]282                      qc_av(k,j,i) = qc_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1115]283                   ENDDO
284                ENDDO
285             ENDDO
286
[1]287          CASE ( 'ql' )
[667]288             DO  i = nxlg, nxrg
289                DO  j = nysg, nyng
[1]290                   DO  k = nzb, nzt+1
[1322]291                      ql_av(k,j,i) = ql_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]292                   ENDDO
293                ENDDO
294             ENDDO
295
296          CASE ( 'ql_c' )
[667]297             DO  i = nxlg, nxrg
298                DO  j = nysg, nyng
[1]299                   DO  k = nzb, nzt+1
[1322]300                      ql_c_av(k,j,i) = ql_c_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]301                   ENDDO
302                ENDDO
303             ENDDO
304
305          CASE ( 'ql_v' )
[667]306             DO  i = nxlg, nxrg
307                DO  j = nysg, nyng
[1]308                   DO  k = nzb, nzt+1
[1322]309                      ql_v_av(k,j,i) = ql_v_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]310                   ENDDO
311                ENDDO
312             ENDDO
313
314          CASE ( 'ql_vp' )
[667]315             DO  i = nxlg, nxrg
316                DO  j = nysg, nyng
[1]317                   DO  k = nzb, nzt+1
[1320]318                      ql_vp_av(k,j,i) = ql_vp_av(k,j,i) /                      &
[1322]319                                        REAL( average_count_3d, KIND=wp )
[1]320                   ENDDO
321                ENDDO
322             ENDDO
323
[1053]324          CASE ( 'qr' )
325             DO  i = nxlg, nxrg
326                DO  j = nysg, nyng
327                   DO  k = nzb, nzt+1
[1322]328                      qr_av(k,j,i) = qr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1053]329                   ENDDO
330                ENDDO
331             ENDDO
332
[1551]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
[1]361          CASE ( 'qv' )
[667]362             DO  i = nxlg, nxrg
363                DO  j = nysg, nyng
[1]364                   DO  k = nzb, nzt+1
[1322]365                      qv_av(k,j,i) = qv_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]366                   ENDDO
367                ENDDO
368             ENDDO
[367]369
[1585]370         CASE ( 'rad_net*' )
[1551]371             DO  i = nxlg, nxrg
372                DO  j = nysg, nyng
[1585]373                   rad_net_av(j,i) = rad_net_av(j,i) / REAL( average_count_3d, KIND=wp )
[1551]374                ENDDO
375             ENDDO
376
[1585]377          CASE ( 'rad_lw_in' )
[1551]378             DO  i = nxlg, nxrg
379                DO  j = nysg, nyng
[1585]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
[1551]383                ENDDO
384             ENDDO
385
[1585]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
[1691]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
[1585]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
[1691]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
[1555]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
[96]463          CASE ( 'rho' )
[667]464             DO  i = nxlg, nxrg
465                DO  j = nysg, nyng
[96]466                   DO  k = nzb, nzt+1
[1322]467                      rho_av(k,j,i) = rho_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[96]468                   ENDDO
469                ENDDO
470             ENDDO
[367]471
[1]472          CASE ( 's' )
[667]473             DO  i = nxlg, nxrg
474                DO  j = nysg, nyng
[1]475                   DO  k = nzb, nzt+1
[1322]476                      s_av(k,j,i) = s_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]477                   ENDDO
478                ENDDO
479             ENDDO
[367]480
[96]481          CASE ( 'sa' )
[667]482             DO  i = nxlg, nxrg
483                DO  j = nysg, nyng
[96]484                   DO  k = nzb, nzt+1
[1322]485                      sa_av(k,j,i) = sa_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[96]486                   ENDDO
487                ENDDO
488             ENDDO
[367]489
[354]490         CASE ( 'shf*' )
[667]491             DO  i = nxlg, nxrg
492                DO  j = nysg, nyng
[1322]493                   shf_av(j,i) = shf_av(j,i) / REAL( average_count_3d, KIND=wp )
[354]494                ENDDO
495             ENDDO
[367]496
[1]497          CASE ( 't*' )
[667]498             DO  i = nxlg, nxrg
499                DO  j = nysg, nyng
[1322]500                   ts_av(j,i) = ts_av(j,i) / REAL( average_count_3d, KIND=wp )
[1]501                ENDDO
502             ENDDO
503
[1551]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
[1]513          CASE ( 'u' )
[667]514             DO  i = nxlg, nxrg
515                DO  j = nysg, nyng
[1]516                   DO  k = nzb, nzt+1
[1322]517                      u_av(k,j,i) = u_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]518                   ENDDO
519                ENDDO
520             ENDDO
521
522          CASE ( 'u*' )
[667]523             DO  i = nxlg, nxrg
524                DO  j = nysg, nyng
[1322]525                   us_av(j,i) = us_av(j,i) / REAL( average_count_3d, KIND=wp )
[1]526                ENDDO
527             ENDDO
528
529          CASE ( 'v' )
[667]530             DO  i = nxlg, nxrg
531                DO  j = nysg, nyng
[1]532                   DO  k = nzb, nzt+1
[1322]533                      v_av(k,j,i) = v_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]534                   ENDDO
535                ENDDO
536             ENDDO
537
538          CASE ( 'vpt' )
[667]539             DO  i = nxlg, nxrg
540                DO  j = nysg, nyng
[1]541                   DO  k = nzb, nzt+1
[1322]542                      vpt_av(k,j,i) = vpt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]543                   ENDDO
544                ENDDO
545             ENDDO
546
547          CASE ( 'w' )
[667]548             DO  i = nxlg, nxrg
549                DO  j = nysg, nyng
[1]550                   DO  k = nzb, nzt+1
[1322]551                      w_av(k,j,i) = w_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]552                   ENDDO
553                ENDDO
554             ENDDO
555
[72]556          CASE ( 'z0*' )
[667]557             DO  i = nxlg, nxrg
558                DO  j = nysg, nyng
[1322]559                   z0_av(j,i) = z0_av(j,i) / REAL( average_count_3d, KIND=wp )
[72]560                ENDDO
561             ENDDO
562
[978]563          CASE ( 'z0h*' )
564             DO  i = nxlg, nxrg
565                DO  j = nysg, nyng
[1322]566                   z0h_av(j,i) = z0h_av(j,i) / REAL( average_count_3d, KIND=wp )
[978]567                ENDDO
568             ENDDO
569
[1]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
[1318]583    CALL cpu_log( log_point(35), 'average_3d_data', 'stop' )
[1]584
585
586 END SUBROUTINE average_3d_data
Note: See TracBrowser for help on using the repository browser.