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

Last change on this file since 1682 was 1682, checked in by knoop, 9 years ago

Code annotations made doxygen readable

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