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

Last change on this file since 2001 was 2001, checked in by knoop, 8 years ago

last commit documented

  • Property svn:keywords set to Id
File size: 12.7 KB
RevLine 
[1682]1!> @file average_3d_data.f90
[2000]2!------------------------------------------------------------------------------!
[1036]3! This file is part of PALM.
4!
[2000]5! PALM is free software: you can redistribute it and/or modify it under the
6! terms of the GNU General Public License as published by the Free Software
7! Foundation, either version 3 of the License, or (at your option) any later
8! version.
[1036]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!
[1818]17! Copyright 1997-2016 Leibniz Universitaet Hannover
[2000]18!------------------------------------------------------------------------------!
[1036]19!
[484]20! Current revisions:
[1]21! -----------------
[1552]22!
[2001]23!
[1321]24! Former revisions:
25! -----------------
26! $Id: average_3d_data.f90 2001 2016-08-20 18:41:22Z knoop $
27!
[2001]28! 2000 2016-08-20 18:09:15Z knoop
29! Forced header and separation lines into 80 columns
30!
[1973]31! 1972 2016-07-26 07:52:02Z maronga
32! Output of land surface quantities is now done directly in the respective module
33!
[1961]34! 1960 2016-07-12 16:34:24Z suehring
35! Treat humidity and passive scalar separately
36!
[1692]37! 1691 2015-10-26 16:17:44Z maronga
38! Added output of Obukhov length and radiative heating rates for RRTMG.
39!
[1683]40! 1682 2015-10-07 23:56:08Z knoop
41! Code annotations made doxygen readable
42!
[1586]43! 1585 2015-04-30 07:05:52Z maronga
44! Adapted for RRTMG
45!
[1556]46! 1555 2015-03-04 17:44:27Z maronga
47! Added output of r_a and r_s
48!
[1552]49! 1551 2015-03-03 14:18:16Z maronga
50! Added support for land surface and radiation model parameters.
51!
[1323]52! 1322 2014-03-20 16:38:49Z raasch
53! REAL functions provided with KIND-attribute
54!
[1321]55! 1320 2014-03-20 08:40:49Z raasch
[1320]56! ONLY-attribute added to USE-statements,
57! kind-parameters added to all INTEGER and REAL declaration statements,
58! kinds are defined in new module kinds,
59! revision history before 2012 removed,
60! comment fields (!:) to be used for variable explanations added to
61! all variable declaration statements
[772]62!
[1319]63! 1318 2014-03-17 13:35:16Z raasch
64! barrier argument removed from cpu_log,
65! module interfaces removed
66!
[1116]67! 1115 2013-03-26 18:16:16Z hoffmann
68! +qc
69!
[1054]70! 1053 2012-11-13 17:11:03Z hoffmann
71! averaging of nr, qr added
72!
[1037]73! 1036 2012-10-22 13:43:42Z raasch
74! code put under GPL (PALM 3.9)
75!
[979]76! 978 2012-08-09 08:28:32Z fricke
77! +z0h_av
[77]78!
[1]79! Revision 1.1  2006/02/23 09:48:58  raasch
80! Initial revision
81!
82!
83! Description:
84! ------------
[1682]85!> Time-averaging of 3d-data-arrays.
[1]86!------------------------------------------------------------------------------!
[1682]87 SUBROUTINE average_3d_data
88 
[1]89
90    USE averaging
91
[1320]92    USE control_parameters,                                                    &
93        ONLY:  average_count_3d, doav, doav_n
94
95    USE cpulog,                                                                &
96        ONLY:  cpu_log, log_point
97
98    USE indices,                                                               &
99        ONLY:  nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzt
100
101    USE kinds
102
[1551]103    USE land_surface_model_mod,                                                &
[1972]104        ONLY:  land_surface, lsm_3d_data_averaging
[1320]105
[1551]106    USE radiation_model_mod,                                                   &
[1976]107        ONLY:  radiation, radiation_3d_data_averaging
[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
[96]297          CASE ( 'rho' )
[667]298             DO  i = nxlg, nxrg
299                DO  j = nysg, nyng
[96]300                   DO  k = nzb, nzt+1
[1322]301                      rho_av(k,j,i) = rho_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[96]302                   ENDDO
303                ENDDO
304             ENDDO
[367]305
[1]306          CASE ( 's' )
[667]307             DO  i = nxlg, nxrg
308                DO  j = nysg, nyng
[1]309                   DO  k = nzb, nzt+1
[1322]310                      s_av(k,j,i) = s_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]311                   ENDDO
312                ENDDO
313             ENDDO
[367]314
[96]315          CASE ( 'sa' )
[667]316             DO  i = nxlg, nxrg
317                DO  j = nysg, nyng
[96]318                   DO  k = nzb, nzt+1
[1322]319                      sa_av(k,j,i) = sa_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[96]320                   ENDDO
321                ENDDO
322             ENDDO
[367]323
[354]324         CASE ( 'shf*' )
[667]325             DO  i = nxlg, nxrg
326                DO  j = nysg, nyng
[1322]327                   shf_av(j,i) = shf_av(j,i) / REAL( average_count_3d, KIND=wp )
[354]328                ENDDO
329             ENDDO
[367]330
[1960]331          CASE ( 'ssws*' )
332             DO  i = nxlg, nxrg
333                DO  j = nysg, nyng
334                   ssws_av(j,i) = ssws_av(j,i) / REAL( average_count_3d, KIND=wp )
335                ENDDO
336             ENDDO
337
[1]338          CASE ( 't*' )
[667]339             DO  i = nxlg, nxrg
340                DO  j = nysg, nyng
[1322]341                   ts_av(j,i) = ts_av(j,i) / REAL( average_count_3d, KIND=wp )
[1]342                ENDDO
343             ENDDO
344
345          CASE ( 'u' )
[667]346             DO  i = nxlg, nxrg
347                DO  j = nysg, nyng
[1]348                   DO  k = nzb, nzt+1
[1322]349                      u_av(k,j,i) = u_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]350                   ENDDO
351                ENDDO
352             ENDDO
353
354          CASE ( 'u*' )
[667]355             DO  i = nxlg, nxrg
356                DO  j = nysg, nyng
[1322]357                   us_av(j,i) = us_av(j,i) / REAL( average_count_3d, KIND=wp )
[1]358                ENDDO
359             ENDDO
360
361          CASE ( 'v' )
[667]362             DO  i = nxlg, nxrg
363                DO  j = nysg, nyng
[1]364                   DO  k = nzb, nzt+1
[1322]365                      v_av(k,j,i) = v_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]366                   ENDDO
367                ENDDO
368             ENDDO
369
370          CASE ( 'vpt' )
[667]371             DO  i = nxlg, nxrg
372                DO  j = nysg, nyng
[1]373                   DO  k = nzb, nzt+1
[1322]374                      vpt_av(k,j,i) = vpt_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]375                   ENDDO
376                ENDDO
377             ENDDO
378
379          CASE ( 'w' )
[667]380             DO  i = nxlg, nxrg
381                DO  j = nysg, nyng
[1]382                   DO  k = nzb, nzt+1
[1322]383                      w_av(k,j,i) = w_av(k,j,i) / REAL( average_count_3d, KIND=wp )
[1]384                   ENDDO
385                ENDDO
386             ENDDO
387
[72]388          CASE ( 'z0*' )
[667]389             DO  i = nxlg, nxrg
390                DO  j = nysg, nyng
[1322]391                   z0_av(j,i) = z0_av(j,i) / REAL( average_count_3d, KIND=wp )
[72]392                ENDDO
393             ENDDO
394
[978]395          CASE ( 'z0h*' )
396             DO  i = nxlg, nxrg
397                DO  j = nysg, nyng
[1322]398                   z0h_av(j,i) = z0h_av(j,i) / REAL( average_count_3d, KIND=wp )
[978]399                ENDDO
400             ENDDO
401
[1]402          CASE DEFAULT
403!
[1972]404!--          Land surface quantity
405             IF ( land_surface )  THEN
406                CALL lsm_3d_data_averaging( 'average', doav(ii) )
407             ENDIF
408
409!
[1976]410!--          Radiation quantity
411             IF ( radiation )  THEN
412                CALL radiation_3d_data_averaging( 'average', doav(ii) )
413             ENDIF
414
415!
[1]416!--          User-defined quantity
417             CALL user_3d_data_averaging( 'average', doav(ii) )
418
419       END SELECT
420
421    ENDDO
422
423!
424!-- Reset the counter
425    average_count_3d = 0.0
426
[1318]427    CALL cpu_log( log_point(35), 'average_3d_data', 'stop' )
[1]428
429
430 END SUBROUTINE average_3d_data
Note: See TracBrowser for help on using the repository browser.