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

Last change on this file since 1555 was 1555, checked in by maronga, 7 years ago

LSM output of r_a and r_s added

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