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

Last change on this file since 1973 was 1973, checked in by maronga, 8 years ago

last commit documented

  • Property svn:keywords set to Id
File size: 15.3 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!
[1818]16! Copyright 1997-2016 Leibniz Universitaet Hannover
[1036]17!--------------------------------------------------------------------------------!
18!
[484]19! Current revisions:
[1]20! -----------------
[1552]21!
[1973]22!
[1321]23! Former revisions:
24! -----------------
25! $Id: average_3d_data.f90 1973 2016-07-26 07:52:45Z maronga $
26!
[1973]27! 1972 2016-07-26 07:52:02Z maronga
28! Output of land surface quantities is now done directly in the respective module
29!
[1961]30! 1960 2016-07-12 16:34:24Z suehring
31! Treat humidity and passive scalar separately
32!
[1692]33! 1691 2015-10-26 16:17:44Z maronga
34! Added output of Obukhov length and radiative heating rates for RRTMG.
35!
[1683]36! 1682 2015-10-07 23:56:08Z knoop
37! Code annotations made doxygen readable
38!
[1586]39! 1585 2015-04-30 07:05:52Z maronga
40! Adapted for RRTMG
41!
[1556]42! 1555 2015-03-04 17:44:27Z maronga
43! Added output of r_a and r_s
44!
[1552]45! 1551 2015-03-03 14:18:16Z maronga
46! Added support for land surface and radiation model parameters.
47!
[1323]48! 1322 2014-03-20 16:38:49Z raasch
49! REAL functions provided with KIND-attribute
50!
[1321]51! 1320 2014-03-20 08:40:49Z raasch
[1320]52! ONLY-attribute added to USE-statements,
53! kind-parameters added to all INTEGER and REAL declaration statements,
54! kinds are defined in new module kinds,
55! revision history before 2012 removed,
56! comment fields (!:) to be used for variable explanations added to
57! all variable declaration statements
[772]58!
[1319]59! 1318 2014-03-17 13:35:16Z raasch
60! barrier argument removed from cpu_log,
61! module interfaces removed
62!
[1116]63! 1115 2013-03-26 18:16:16Z hoffmann
64! +qc
65!
[1054]66! 1053 2012-11-13 17:11:03Z hoffmann
67! averaging of nr, qr added
68!
[1037]69! 1036 2012-10-22 13:43:42Z raasch
70! code put under GPL (PALM 3.9)
71!
[979]72! 978 2012-08-09 08:28:32Z fricke
73! +z0h_av
[77]74!
[1]75! Revision 1.1  2006/02/23 09:48:58  raasch
76! Initial revision
77!
78!
79! Description:
80! ------------
[1682]81!> Time-averaging of 3d-data-arrays.
[1]82!------------------------------------------------------------------------------!
[1682]83 SUBROUTINE average_3d_data
84 
[1]85
86    USE averaging
87
[1320]88    USE control_parameters,                                                    &
89        ONLY:  average_count_3d, doav, doav_n
90
91    USE cpulog,                                                                &
92        ONLY:  cpu_log, log_point
93
94    USE indices,                                                               &
95        ONLY:  nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzt
96
97    USE kinds
98
[1551]99    USE land_surface_model_mod,                                                &
[1972]100        ONLY:  land_surface, lsm_3d_data_averaging
[1320]101
[1551]102    USE radiation_model_mod,                                                   &
[1585]103        ONLY:  rad_net, rad_net_av, rad_lw_in, rad_lw_in_av, rad_lw_out,       &
[1691]104               rad_lw_out_av, rad_lw_cs_hr, rad_lw_cs_hr_av, rad_lw_hr,        &
105               rad_lw_hr_av, rad_sw_in, rad_sw_in_av, rad_sw_out,              &
106               rad_sw_out_av, rad_sw_cs_hr, rad_sw_cs_hr_av, rad_sw_hr,        &
107               rad_sw_hr_av
[1551]108
[1691]109
[1]110    IMPLICIT NONE
111
[1682]112    INTEGER(iwp) ::  i  !<
113    INTEGER(iwp) ::  ii !<
114    INTEGER(iwp) ::  j  !<
115    INTEGER(iwp) ::  k  !<
[1]116
117
118    CALL cpu_log (log_point(35),'average_3d_data','start')
119
120!
121!-- Check, if averaging is necessary
122    IF ( average_count_3d <= 1 )  RETURN
123
124!
125!-- Loop of all variables to be averaged.
126    DO  ii = 1, doav_n
127
128!
129!--    Store the array chosen on the temporary array.
130       SELECT CASE ( TRIM( doav(ii) ) )
131
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
[354]141          CASE ( 'qsws*' )
[667]142             DO  i = nxlg, nxrg
143                DO  j = nysg, nyng
[1322]144                   qsws_av(j,i) = qsws_av(j,i) / REAL( average_count_3d, KIND=wp )
[354]145                ENDDO
146             ENDDO
147
[771]148          CASE ( 'lpt' )
149             DO  i = nxlg, nxrg
150                DO  j = nysg, nyng
151                   DO  k = nzb, nzt+1
[1322]152                      lpt_av(k,j,i) = lpt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[771]153                   ENDDO
154                ENDDO
155             ENDDO
156
[1]157          CASE ( 'lwp*' )
[667]158             DO  i = nxlg, nxrg
159                DO  j = nysg, nyng
[1322]160                   lwp_av(j,i) = lwp_av(j,i) / REAL( average_count_3d, KIND=wp )
[1]161                ENDDO
162             ENDDO
163
[1053]164          CASE ( 'nr' )
165             DO  i = nxlg, nxrg
166                DO  j = nysg, nyng
167                   DO  k = nzb, nzt+1
[1322]168                      nr_av(k,j,i) = nr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1053]169                   ENDDO
170                ENDDO
171             ENDDO
172
[1691]173         CASE ( 'ol*' )
174             DO  i = nxlg, nxrg
175                DO  j = nysg, nyng
176                   ol_av(j,i) = ol_av(j,i) / REAL( average_count_3d, KIND=wp )
177                ENDDO
178             ENDDO
179
[1]180          CASE ( 'p' )
[667]181             DO  i = nxlg, nxrg
182                DO  j = nysg, nyng
[1]183                   DO  k = nzb, nzt+1
[1322]184                      p_av(k,j,i) = p_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]185                   ENDDO
186                ENDDO
187             ENDDO
188
189          CASE ( 'pc' )
190             DO  i = nxl, nxr
191                DO  j = nys, nyn
192                   DO  k = nzb, nzt+1
[1322]193                      pc_av(k,j,i) = pc_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]194                   ENDDO
195                ENDDO
196             ENDDO
197
198          CASE ( 'pr' )
199             DO  i = nxl, nxr
200                DO  j = nys, nyn
201                   DO  k = nzb, nzt+1
[1322]202                      pr_av(k,j,i) = pr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]203                   ENDDO
204                ENDDO
205             ENDDO
206
[72]207          CASE ( 'prr*' )
[667]208             DO  i = nxlg, nxrg
209                DO  j = nysg, nyng
[1320]210                   precipitation_rate_av(j,i) = precipitation_rate_av(j,i) /   &
[1322]211                                                REAL( average_count_3d, KIND=wp )
[72]212                ENDDO
213             ENDDO
214
[1]215          CASE ( 'pt' )
[667]216             DO  i = nxlg, nxrg
217                DO  j = nysg, nyng
[1]218                   DO  k = nzb, nzt+1
[1322]219                      pt_av(k,j,i) = pt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]220                   ENDDO
221                ENDDO
222             ENDDO
223
224          CASE ( 'q' )
[667]225             DO  i = nxlg, nxrg
226                DO  j = nysg, nyng
[1]227                   DO  k = nzb, nzt+1
[1322]228                      q_av(k,j,i) = q_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]229                   ENDDO
230                ENDDO
231             ENDDO
[367]232
[1115]233          CASE ( 'qc' )
234             DO  i = nxlg, nxrg
235                DO  j = nysg, nyng
236                   DO  k = nzb, nzt+1
[1322]237                      qc_av(k,j,i) = qc_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1115]238                   ENDDO
239                ENDDO
240             ENDDO
241
[1]242          CASE ( 'ql' )
[667]243             DO  i = nxlg, nxrg
244                DO  j = nysg, nyng
[1]245                   DO  k = nzb, nzt+1
[1322]246                      ql_av(k,j,i) = ql_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]247                   ENDDO
248                ENDDO
249             ENDDO
250
251          CASE ( 'ql_c' )
[667]252             DO  i = nxlg, nxrg
253                DO  j = nysg, nyng
[1]254                   DO  k = nzb, nzt+1
[1322]255                      ql_c_av(k,j,i) = ql_c_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]256                   ENDDO
257                ENDDO
258             ENDDO
259
260          CASE ( 'ql_v' )
[667]261             DO  i = nxlg, nxrg
262                DO  j = nysg, nyng
[1]263                   DO  k = nzb, nzt+1
[1322]264                      ql_v_av(k,j,i) = ql_v_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]265                   ENDDO
266                ENDDO
267             ENDDO
268
269          CASE ( 'ql_vp' )
[667]270             DO  i = nxlg, nxrg
271                DO  j = nysg, nyng
[1]272                   DO  k = nzb, nzt+1
[1320]273                      ql_vp_av(k,j,i) = ql_vp_av(k,j,i) /                      &
[1322]274                                        REAL( average_count_3d, KIND=wp )
[1]275                   ENDDO
276                ENDDO
277             ENDDO
278
[1053]279          CASE ( 'qr' )
280             DO  i = nxlg, nxrg
281                DO  j = nysg, nyng
282                   DO  k = nzb, nzt+1
[1322]283                      qr_av(k,j,i) = qr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1053]284                   ENDDO
285                ENDDO
286             ENDDO
287
[1]288          CASE ( 'qv' )
[667]289             DO  i = nxlg, nxrg
290                DO  j = nysg, nyng
[1]291                   DO  k = nzb, nzt+1
[1322]292                      qv_av(k,j,i) = qv_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]293                   ENDDO
294                ENDDO
295             ENDDO
[367]296
[1585]297         CASE ( 'rad_net*' )
[1551]298             DO  i = nxlg, nxrg
299                DO  j = nysg, nyng
[1585]300                   rad_net_av(j,i) = rad_net_av(j,i) / REAL( average_count_3d, KIND=wp )
[1551]301                ENDDO
302             ENDDO
303
[1585]304          CASE ( 'rad_lw_in' )
[1551]305             DO  i = nxlg, nxrg
306                DO  j = nysg, nyng
[1585]307                   DO  k = nzb, nzt+1
308                      rad_lw_in_av(k,j,i) = rad_lw_in_av(k,j,i) / REAL( average_count_3d, KIND=wp )
309                   ENDDO
[1551]310                ENDDO
311             ENDDO
312
[1585]313          CASE ( 'rad_lw_out' )
314             DO  i = nxlg, nxrg
315                DO  j = nysg, nyng
316                   DO  k = nzb, nzt+1
317                      rad_lw_out_av(k,j,i) = rad_lw_out_av(k,j,i) / REAL( average_count_3d, KIND=wp )
318                   ENDDO
319                ENDDO
320             ENDDO
321
[1691]322          CASE ( 'rad_lw_cs_hr' )
323             DO  i = nxlg, nxrg
324                DO  j = nysg, nyng
325                   DO  k = nzb, nzt+1
326                      rad_lw_cs_hr_av(k,j,i) = rad_lw_cs_hr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
327                   ENDDO
328                ENDDO
329             ENDDO
330
331          CASE ( 'rad_lw_hr' )
332             DO  i = nxlg, nxrg
333                DO  j = nysg, nyng
334                   DO  k = nzb, nzt+1
335                      rad_lw_hr_av(k,j,i) = rad_lw_hr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
336                   ENDDO
337                ENDDO
338             ENDDO
339
[1585]340          CASE ( 'rad_sw_in' )
341             DO  i = nxlg, nxrg
342                DO  j = nysg, nyng
343                   DO  k = nzb, nzt+1
344                      rad_sw_in_av(k,j,i) = rad_sw_in_av(k,j,i) / REAL( average_count_3d, KIND=wp )
345                   ENDDO
346                ENDDO
347             ENDDO
348
349          CASE ( 'rad_sw_out' )
350             DO  i = nxlg, nxrg
351                DO  j = nysg, nyng
352                   DO  k = nzb, nzt+1
353                      rad_sw_out_av(k,j,i) = rad_sw_out_av(k,j,i) / REAL( average_count_3d, KIND=wp )
354                   ENDDO
355                ENDDO
356             ENDDO
357
[1691]358          CASE ( 'rad_sw_cs_hr' )
359             DO  i = nxlg, nxrg
360                DO  j = nysg, nyng
361                   DO  k = nzb, nzt+1
362                      rad_sw_cs_hr_av(k,j,i) = rad_sw_cs_hr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
363                   ENDDO
364                ENDDO
365             ENDDO
366
367          CASE ( 'rad_sw_hr' )
368             DO  i = nxlg, nxrg
369                DO  j = nysg, nyng
370                   DO  k = nzb, nzt+1
371                      rad_sw_hr_av(k,j,i) = rad_sw_hr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
372                   ENDDO
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
[1960]410          CASE ( 'ssws*' )
411             DO  i = nxlg, nxrg
412                DO  j = nysg, nyng
413                   ssws_av(j,i) = ssws_av(j,i) / REAL( average_count_3d, KIND=wp )
414                ENDDO
415             ENDDO
416
[1]417          CASE ( 't*' )
[667]418             DO  i = nxlg, nxrg
419                DO  j = nysg, nyng
[1322]420                   ts_av(j,i) = ts_av(j,i) / REAL( average_count_3d, KIND=wp )
[1]421                ENDDO
422             ENDDO
423
424          CASE ( 'u' )
[667]425             DO  i = nxlg, nxrg
426                DO  j = nysg, nyng
[1]427                   DO  k = nzb, nzt+1
[1322]428                      u_av(k,j,i) = u_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]429                   ENDDO
430                ENDDO
431             ENDDO
432
433          CASE ( 'u*' )
[667]434             DO  i = nxlg, nxrg
435                DO  j = nysg, nyng
[1322]436                   us_av(j,i) = us_av(j,i) / REAL( average_count_3d, KIND=wp )
[1]437                ENDDO
438             ENDDO
439
440          CASE ( 'v' )
[667]441             DO  i = nxlg, nxrg
442                DO  j = nysg, nyng
[1]443                   DO  k = nzb, nzt+1
[1322]444                      v_av(k,j,i) = v_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]445                   ENDDO
446                ENDDO
447             ENDDO
448
449          CASE ( 'vpt' )
[667]450             DO  i = nxlg, nxrg
451                DO  j = nysg, nyng
[1]452                   DO  k = nzb, nzt+1
[1322]453                      vpt_av(k,j,i) = vpt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]454                   ENDDO
455                ENDDO
456             ENDDO
457
458          CASE ( 'w' )
[667]459             DO  i = nxlg, nxrg
460                DO  j = nysg, nyng
[1]461                   DO  k = nzb, nzt+1
[1322]462                      w_av(k,j,i) = w_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]463                   ENDDO
464                ENDDO
465             ENDDO
466
[72]467          CASE ( 'z0*' )
[667]468             DO  i = nxlg, nxrg
469                DO  j = nysg, nyng
[1322]470                   z0_av(j,i) = z0_av(j,i) / REAL( average_count_3d, KIND=wp )
[72]471                ENDDO
472             ENDDO
473
[978]474          CASE ( 'z0h*' )
475             DO  i = nxlg, nxrg
476                DO  j = nysg, nyng
[1322]477                   z0h_av(j,i) = z0h_av(j,i) / REAL( average_count_3d, KIND=wp )
[978]478                ENDDO
479             ENDDO
480
[1]481          CASE DEFAULT
482!
[1972]483!--          Land surface quantity
484             IF ( land_surface )  THEN
485                CALL lsm_3d_data_averaging( 'average', doav(ii) )
486             ENDIF
487
488!
[1]489!--          User-defined quantity
490             CALL user_3d_data_averaging( 'average', doav(ii) )
491
492       END SELECT
493
494    ENDDO
495
496!
497!-- Reset the counter
498    average_count_3d = 0.0
499
[1318]500    CALL cpu_log( log_point(35), 'average_3d_data', 'stop' )
[1]501
502
503 END SUBROUTINE average_3d_data
Note: See TracBrowser for help on using the repository browser.