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

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

LSM output of r_a and r_s added

  • Property svn:keywords set to Id
File size: 15.2 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! -----------------
[1555]22! Added output of r_a and r_s
[1552]23!
[1321]24! Former revisions:
25! -----------------
26! $Id: average_3d_data.f90 1555 2015-03-04 17:44:27Z maronga $
27!
[1552]28! 1551 2015-03-03 14:18:16Z maronga
29! Added support for land surface and radiation model parameters.
30!
[1323]31! 1322 2014-03-20 16:38:49Z raasch
32! REAL functions provided with KIND-attribute
33!
[1321]34! 1320 2014-03-20 08:40:49Z raasch
[1320]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
[772]41!
[1319]42! 1318 2014-03-17 13:35:16Z raasch
43! barrier argument removed from cpu_log,
44! module interfaces removed
45!
[1116]46! 1115 2013-03-26 18:16:16Z hoffmann
47! +qc
48!
[1054]49! 1053 2012-11-13 17:11:03Z hoffmann
50! averaging of nr, qr added
51!
[1037]52! 1036 2012-10-22 13:43:42Z raasch
53! code put under GPL (PALM 3.9)
54!
[979]55! 978 2012-08-09 08:28:32Z fricke
56! +z0h_av
[77]57!
[1]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
[1320]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
[1551]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,      &
[1555]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
[1320]85
[1551]86    USE radiation_model_mod,                                                   &
87        ONLY:  rad_net, rad_net_av, rad_sw_in, rad_sw_in_av
88
[1]89    IMPLICIT NONE
90
[1320]91    INTEGER(iwp) ::  i  !:
92    INTEGER(iwp) ::  ii !:
93    INTEGER(iwp) ::  j  !:
94    INTEGER(iwp) ::  k  !:
[1]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
[1551]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
[1]132          CASE ( 'e' )
[667]133             DO  i = nxlg, nxrg
134                DO  j = nysg, nyng
[1]135                   DO  k = nzb, nzt+1
[1322]136                      e_av(k,j,i) = e_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]137                   ENDDO
138                ENDDO
139             ENDDO
140
[1551]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
[354]148          CASE ( 'qsws*' )
[667]149             DO  i = nxlg, nxrg
150                DO  j = nysg, nyng
[1322]151                   qsws_av(j,i) = qsws_av(j,i) / REAL( average_count_3d, KIND=wp )
[354]152                ENDDO
153             ENDDO
154
[1551]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
[771]162          CASE ( 'lpt' )
163             DO  i = nxlg, nxrg
164                DO  j = nysg, nyng
165                   DO  k = nzb, nzt+1
[1322]166                      lpt_av(k,j,i) = lpt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[771]167                   ENDDO
168                ENDDO
169             ENDDO
170
[1]171          CASE ( 'lwp*' )
[667]172             DO  i = nxlg, nxrg
173                DO  j = nysg, nyng
[1322]174                   lwp_av(j,i) = lwp_av(j,i) / REAL( average_count_3d, KIND=wp )
[1]175                ENDDO
176             ENDDO
177
[1551]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
[1053]194          CASE ( 'nr' )
195             DO  i = nxlg, nxrg
196                DO  j = nysg, nyng
197                   DO  k = nzb, nzt+1
[1322]198                      nr_av(k,j,i) = nr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1053]199                   ENDDO
200                ENDDO
201             ENDDO
202
[1]203          CASE ( 'p' )
[667]204             DO  i = nxlg, nxrg
205                DO  j = nysg, nyng
[1]206                   DO  k = nzb, nzt+1
[1322]207                      p_av(k,j,i) = p_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]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
[1322]216                      pc_av(k,j,i) = pc_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]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
[1322]225                      pr_av(k,j,i) = pr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]226                   ENDDO
227                ENDDO
228             ENDDO
229
[72]230          CASE ( 'prr*' )
[667]231             DO  i = nxlg, nxrg
232                DO  j = nysg, nyng
[1320]233                   precipitation_rate_av(j,i) = precipitation_rate_av(j,i) /   &
[1322]234                                                REAL( average_count_3d, KIND=wp )
[72]235                ENDDO
236             ENDDO
237
[1]238          CASE ( 'pt' )
[667]239             DO  i = nxlg, nxrg
240                DO  j = nysg, nyng
[1]241                   DO  k = nzb, nzt+1
[1322]242                      pt_av(k,j,i) = pt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]243                   ENDDO
244                ENDDO
245             ENDDO
246
247          CASE ( 'q' )
[667]248             DO  i = nxlg, nxrg
249                DO  j = nysg, nyng
[1]250                   DO  k = nzb, nzt+1
[1322]251                      q_av(k,j,i) = q_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]252                   ENDDO
253                ENDDO
254             ENDDO
[367]255
[1115]256          CASE ( 'qc' )
257             DO  i = nxlg, nxrg
258                DO  j = nysg, nyng
259                   DO  k = nzb, nzt+1
[1322]260                      qc_av(k,j,i) = qc_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1115]261                   ENDDO
262                ENDDO
263             ENDDO
264
[1]265          CASE ( 'ql' )
[667]266             DO  i = nxlg, nxrg
267                DO  j = nysg, nyng
[1]268                   DO  k = nzb, nzt+1
[1322]269                      ql_av(k,j,i) = ql_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]270                   ENDDO
271                ENDDO
272             ENDDO
273
274          CASE ( 'ql_c' )
[667]275             DO  i = nxlg, nxrg
276                DO  j = nysg, nyng
[1]277                   DO  k = nzb, nzt+1
[1322]278                      ql_c_av(k,j,i) = ql_c_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]279                   ENDDO
280                ENDDO
281             ENDDO
282
283          CASE ( 'ql_v' )
[667]284             DO  i = nxlg, nxrg
285                DO  j = nysg, nyng
[1]286                   DO  k = nzb, nzt+1
[1322]287                      ql_v_av(k,j,i) = ql_v_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]288                   ENDDO
289                ENDDO
290             ENDDO
291
292          CASE ( 'ql_vp' )
[667]293             DO  i = nxlg, nxrg
294                DO  j = nysg, nyng
[1]295                   DO  k = nzb, nzt+1
[1320]296                      ql_vp_av(k,j,i) = ql_vp_av(k,j,i) /                      &
[1322]297                                        REAL( average_count_3d, KIND=wp )
[1]298                   ENDDO
299                ENDDO
300             ENDDO
301
[1053]302          CASE ( 'qr' )
303             DO  i = nxlg, nxrg
304                DO  j = nysg, nyng
305                   DO  k = nzb, nzt+1
[1322]306                      qr_av(k,j,i) = qr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1053]307                   ENDDO
308                ENDDO
309             ENDDO
310
[1551]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
[1]339          CASE ( 'qv' )
[667]340             DO  i = nxlg, nxrg
341                DO  j = nysg, nyng
[1]342                   DO  k = nzb, nzt+1
[1322]343                      qv_av(k,j,i) = qv_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]344                   ENDDO
345                ENDDO
346             ENDDO
[367]347
[1551]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
[1555]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
[96]376          CASE ( 'rho' )
[667]377             DO  i = nxlg, nxrg
378                DO  j = nysg, nyng
[96]379                   DO  k = nzb, nzt+1
[1322]380                      rho_av(k,j,i) = rho_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[96]381                   ENDDO
382                ENDDO
383             ENDDO
[367]384
[1]385          CASE ( 's' )
[667]386             DO  i = nxlg, nxrg
387                DO  j = nysg, nyng
[1]388                   DO  k = nzb, nzt+1
[1322]389                      s_av(k,j,i) = s_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]390                   ENDDO
391                ENDDO
392             ENDDO
[367]393
[96]394          CASE ( 'sa' )
[667]395             DO  i = nxlg, nxrg
396                DO  j = nysg, nyng
[96]397                   DO  k = nzb, nzt+1
[1322]398                      sa_av(k,j,i) = sa_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[96]399                   ENDDO
400                ENDDO
401             ENDDO
[367]402
[354]403         CASE ( 'shf*' )
[667]404             DO  i = nxlg, nxrg
405                DO  j = nysg, nyng
[1322]406                   shf_av(j,i) = shf_av(j,i) / REAL( average_count_3d, KIND=wp )
[354]407                ENDDO
408             ENDDO
[367]409
[1]410          CASE ( 't*' )
[667]411             DO  i = nxlg, nxrg
412                DO  j = nysg, nyng
[1322]413                   ts_av(j,i) = ts_av(j,i) / REAL( average_count_3d, KIND=wp )
[1]414                ENDDO
415             ENDDO
416
[1551]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
[1]426          CASE ( 'u' )
[667]427             DO  i = nxlg, nxrg
428                DO  j = nysg, nyng
[1]429                   DO  k = nzb, nzt+1
[1322]430                      u_av(k,j,i) = u_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]431                   ENDDO
432                ENDDO
433             ENDDO
434
435          CASE ( 'u*' )
[667]436             DO  i = nxlg, nxrg
437                DO  j = nysg, nyng
[1322]438                   us_av(j,i) = us_av(j,i) / REAL( average_count_3d, KIND=wp )
[1]439                ENDDO
440             ENDDO
441
442          CASE ( 'v' )
[667]443             DO  i = nxlg, nxrg
444                DO  j = nysg, nyng
[1]445                   DO  k = nzb, nzt+1
[1322]446                      v_av(k,j,i) = v_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]447                   ENDDO
448                ENDDO
449             ENDDO
450
451          CASE ( 'vpt' )
[667]452             DO  i = nxlg, nxrg
453                DO  j = nysg, nyng
[1]454                   DO  k = nzb, nzt+1
[1322]455                      vpt_av(k,j,i) = vpt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]456                   ENDDO
457                ENDDO
458             ENDDO
459
460          CASE ( 'w' )
[667]461             DO  i = nxlg, nxrg
462                DO  j = nysg, nyng
[1]463                   DO  k = nzb, nzt+1
[1322]464                      w_av(k,j,i) = w_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]465                   ENDDO
466                ENDDO
467             ENDDO
468
[72]469          CASE ( 'z0*' )
[667]470             DO  i = nxlg, nxrg
471                DO  j = nysg, nyng
[1322]472                   z0_av(j,i) = z0_av(j,i) / REAL( average_count_3d, KIND=wp )
[72]473                ENDDO
474             ENDDO
475
[978]476          CASE ( 'z0h*' )
477             DO  i = nxlg, nxrg
478                DO  j = nysg, nyng
[1322]479                   z0h_av(j,i) = z0h_av(j,i) / REAL( average_count_3d, KIND=wp )
[978]480                ENDDO
481             ENDDO
482
[1]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
[1318]496    CALL cpu_log( log_point(35), 'average_3d_data', 'stop' )
[1]497
498
499 END SUBROUTINE average_3d_data
Note: See TracBrowser for help on using the repository browser.