Changeset 4500


Ignore:
Timestamp:
Apr 17, 2020 10:12:45 AM (5 years ago)
Author:
suehring
Message:

Surface output: correct output of ground/wall-heat flux at USM surfaces; add conversion factor to heat- and momentum-flux outputs; data_output_2d: Unify output conversion of sensible and latent heat flux; data-output module: avoid uninitialized variables; restart_data_mpi_io: fix overlong lines

Location:
palm/trunk/SOURCE
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/data_output_2d.f90

    r4457 r4500  
    2525! -----------------
    2626! $Id$
     27! Unify output conversion of sensible and latent heat flux
     28!
     29! 4457 2020-03-11 14:20:43Z raasch
    2730! use statement for exchange horiz added
    2831!
     
    9497
    9598    USE basic_constants_and_equations_mod,                                     &
    96         ONLY:  c_p, lv_d_cp, l_v
     99        ONLY:  lv_d_cp
    97100
    98101    USE bulk_cloud_model_mod,                                                  &
     
    716719                      j = surf_lsm_h%j(m)
    717720                      k = surf_lsm_h%k(m)
    718                       local_pf(i,j,nzb+1) = surf_lsm_h%qsws(m) * l_v
     721                      local_pf(i,j,nzb+1) = surf_lsm_h%qsws(m) * waterflux_output_conversion(k)
    719722                   ENDDO
    720723                   DO  m = 1, surf_usm_h%ns
     
    722725                      j = surf_usm_h%j(m)
    723726                      k = surf_usm_h%k(m)
    724                       local_pf(i,j,nzb+1) = surf_usm_h%qsws(m) * l_v
     727                      local_pf(i,j,nzb+1) = surf_usm_h%qsws(m) * waterflux_output_conversion(k)
    725728                   ENDDO
    726729                ELSE
     
    820823                      j = surf_lsm_h%j(m)
    821824                      k = surf_lsm_h%k(m)
    822                       local_pf(i,j,nzb+1) = surf_lsm_h%shf(m) * c_p
     825                      local_pf(i,j,nzb+1) = surf_lsm_h%shf(m) * heatflux_output_conversion(k)
    823826                   ENDDO
    824827                   DO  m = 1, surf_usm_h%ns
     
    826829                      j = surf_usm_h%j(m)
    827830                      k = surf_usm_h%k(m)
    828                       local_pf(i,j,nzb+1) = surf_usm_h%shf(m) * c_p
     831                      local_pf(i,j,nzb+1) = surf_usm_h%shf(m) * heatflux_output_conversion(k)
    829832                   ENDDO
    830833                ELSE
  • palm/trunk/SOURCE/data_output_module.f90

    r4481 r4500  
    2525! -----------------
    2626! $Id$
     27! Avoid uninitialized variables
     28!
     29! 4481 2020-03-31 18:55:54Z maronga
    2730! Enable character-array output
    2831!
     
    392395    INTEGER ::  i             !< loop index
    393396    INTEGER ::  j             !< loop index
    394     INTEGER ::  ndims         !< number of dimensions in file
     397    INTEGER ::  ndims = 0     !< number of dimensions in file
    395398    INTEGER ::  return_value  !< return value
    396399
     
    34003403    INTEGER, INTENT(OUT) ::  return_value  !< return value
    34013404
    3402     LOGICAL ::  found !< true if dimension required by variable was found in dimension list
     3405    LOGICAL ::  found = .False. !< true if dimension required by variable was found in dimension list
    34033406
    34043407    TYPE(dimension_type), DIMENSION(:), INTENT(IN) ::  dimensions  !< list of dimensions in file
  • palm/trunk/SOURCE/restart_data_mpi_io_mod.f90

    r4498 r4500  
    2424! -----------------
    2525! $Id$
     26! Fix too long lines
     27!
     28! 4498 2020-04-15 14:26:31Z raasch
    2629! bugfix for creation of filetypes, argument removed from rd_mpi_io_open
    2730!
     
    17641767             ELSE                                          ! read
    17651768#if defined( __parallel )
    1766                 IF ( debug_level >= 2 )  WRITE(9,'(a,8i8)') 'read block ', j, i, j_f, i_f, m_start_index(j_f,i_f), nr_bytes_f, disp_f
     1769                IF ( debug_level >= 2 )  WRITE(9,'(a,8i8)') 'read block ', j, i, j_f, i_f, &
     1770                                                            m_start_index(j_f,i_f), nr_bytes_f, disp_f
    17671771                CALL MPI_FILE_SEEK( fh, disp_f, MPI_SEEK_SET, ierr )
    17681772                nr_words = nr_bytes_f / wp
     
    17891793         IF ( debug_level >= 2 .AND. nr_val > 0 )  WRITE(9,*)  'r_surf ', TRIM( name ), ' ', nr_val, SUM( data(1:nr_val) )
    17901794      ELSE
    1791          IF ( debug_level >= 2 .AND. nr_val > 0 )  WRITE(9,*)  'r_surf_next ', TRIM( name ), ' ', lo_first_index,nr_val, SUM( data(1:nr_val) )
     1795         IF ( debug_level >= 2 .AND. nr_val > 0 )  WRITE(9,*)  'r_surf_next ', TRIM( name ), ' ', &
     1796                                                               lo_first_index,nr_val, SUM( data(1:nr_val) )
    17921797      ENDIF
    17931798
     
    18951900       IF ( debug_level >= 2 .AND. nr_val  > 0 )  WRITE(9,*) 'w_surf ', TRIM( name ), ' ', nr_val, SUM( data(1:nr_val) )
    18961901    ELSE
    1897        IF ( debug_level >= 2 .AND. nr_val  > 0 ) WRITE(9,*) 'w_surf_n ', TRIM( name ), ' ', lo_first_index, nr_val, SUM( data(1:nr_val) )
     1902       IF ( debug_level >= 2 .AND. nr_val  > 0 ) WRITE(9,*) 'w_surf_n ', TRIM( name ), ' ', &
     1903                                                            lo_first_index, nr_val, SUM( data(1:nr_val) )
    18981904    ENDIF
    18991905
  • palm/trunk/SOURCE/surface_data_output_mod.f90

    r4495 r4500  
    2525! -----------------
    2626! $Id$
     27! - Correct output of ground/wall heat flux at USM surfaces
     28! - Add conversion factor to heat and momentum-flux output
     29!
     30! 4495 2020-04-13 20:11:20Z raasch
    2731! restart data handling with MPI-IO added
    2832!
     
    106110   USE kinds
    107111
    108    USE arrays_3d,                                                              &
    109        ONLY:  zu, zw
    110 
    111    USE control_parameters,                                                     &
    112        ONLY:  coupling_char, data_output_during_spinup, end_time,              &
    113               message_string, restart_data_format_output, run_description_header, simulated_time_at_begin, &
     112   USE arrays_3d,                                                                                  &
     113       ONLY:  heatflux_output_conversion,                                                          &
     114              momentumflux_output_conversion,                                                      &
     115              waterflux_output_conversion,                                                         &
     116              zu,                                                                                  &
     117              zw
     118
     119   USE control_parameters,                                                                         &
     120       ONLY:  coupling_char, data_output_during_spinup, end_time,                                  &
     121              message_string,                                                                      &
     122              restart_data_format_output, run_description_header, simulated_time_at_begin,         &
    114123              spinup_time, surface_output
    115124
     
    137146       ONLY:  rrd_mpi_io, wrd_mpi_io
    138147
    139    USE surface_mod,                                                            &
    140        ONLY:  surf_def_h, surf_def_v, surf_lsm_h, surf_lsm_v,                  &
    141               surf_usm_h, surf_usm_v
     148   USE surface_mod,                                                                                &
     149       ONLY:  ind_pav_green,                                                                       &
     150              ind_veg_wall,                                                                        &
     151              ind_wat_win,                                                                         &
     152              surf_def_h,                                                                          &
     153              surf_def_v,                                                                          &
     154              surf_lsm_h,                                                                          &
     155              surf_lsm_v,                                                                          &
     156              surf_usm_h,                                                                          &
     157              surf_usm_v
    142158
    143159   IMPLICIT NONE
     
    14321448      INTEGER(iwp) ::  av     !< id indicating average or non-average data output
    14331449      INTEGER(iwp) ::  i      !< loop index
     1450      INTEGER(iwp) ::  l      !< running index for surface orientation
     1451      INTEGER(iwp) ::  m      !< running index for surface elements
    14341452      INTEGER(iwp) ::  n_out  !< counter variables for surface output
    14351453
     
    19571975                                               surf_def_v(3)%usws,             &
    19581976                                               surf_lsm_v(3)%usws,             &
    1959                                                surf_usm_v(3)%usws )
     1977                                               surf_usm_v(3)%usws,             &
     1978                                               momentumflux_output_conversion )
    19601979               ELSE
    19611980!
     
    19862005                                               surf_def_v(3)%vsws,             &
    19872006                                               surf_lsm_v(3)%vsws,             &
    1988                                                surf_usm_v(3)%vsws )
     2007                                               surf_usm_v(3)%vsws,             &
     2008                                               momentumflux_output_conversion )
    19892009               ELSE
    19902010!
     
    20152035                                               surf_def_v(3)%shf,              &
    20162036                                               surf_lsm_v(3)%shf,              &
    2017                                                surf_usm_v(3)%shf )
     2037                                               surf_usm_v(3)%shf,              &
     2038                                               heatflux_output_conversion )
    20182039               ELSE
    20192040!
     
    20432064                                               surf_def_v(3)%qsws,             &
    20442065                                               surf_lsm_v(3)%qsws,             &
    2045                                                surf_usm_v(3)%qsws )
     2066                                               surf_usm_v(3)%qsws,             &
     2067                                               waterflux_output_conversion )
    20462068               ELSE
    20472069!
     
    24632485!--            Output of instantaneous data
    24642486               IF ( av == 0 )  THEN
     2487!
     2488!--               Sum up ground / wall heat flux. Note, for urban surfaces the
     2489!--               wall heat flux is aggregated from the different green, window
     2490!--               and wall tiles.
     2491                  DO  m = 1, surf_usm_h%ns
     2492                     surf_usm_h%ghf(m) = surf_usm_h%frac(m,ind_veg_wall)       &
     2493                                       * surf_usm_h%wghf_eb(m) +               &
     2494                                         surf_usm_h%frac(m,ind_pav_green)      &
     2495                                       * surf_usm_h%wghf_eb_green(m) +         &
     2496                                         surf_usm_h%frac(m,ind_wat_win)        &
     2497                                       * surf_usm_h%wghf_eb_window(m)
     2498                  ENDDO
     2499                  DO  l = 0, 3
     2500                     DO  m = 1, surf_usm_v(l)%ns
     2501                        surf_usm_v(l)%ghf(m) = surf_usm_v(l)%frac(m,ind_veg_wall) &
     2502                                             * surf_usm_v(l)%wghf_eb(m) +          &
     2503                                               surf_usm_v(l)%frac(m,ind_pav_green) &
     2504                                             * surf_usm_v(l)%wghf_eb_green(m) +    &
     2505                                               surf_usm_v(l)%frac(m,ind_wat_win)   &
     2506                                             * surf_usm_v(l)%wghf_eb_window(m)
     2507                     ENDDO
     2508                  ENDDO
     2509
    24652510                  CALL surface_data_output_collect( surf_def_h(0)%ghf,         &
    24662511                                               surf_def_h(1)%ghf,              &
     
    24792524                                               surf_lsm_v(3)%ghf,              &
    24802525                                               surf_usm_v(3)%ghf )
    2481                                                                         ELSE
     2526               ELSE
    24822527!
    24832528!--               Output of averaged data
     
    29553000      CHARACTER(LEN=100) ::  trimvar !< dummy variable for current output variable
    29563001
     3002      INTEGER(iwp) ::  l      !< running index for surface orientation
     3003      INTEGER(iwp) ::  m      !< running index for surface elements
    29573004      INTEGER(iwp) ::  n_out  !< counter variables for surface output
    29583005
     
    32513298                                           surf_def_v(3)%usws,                 &
    32523299                                           surf_lsm_v(3)%usws,                 &
    3253                                            surf_usm_v(3)%usws, n_out )
     3300                                           surf_usm_v(3)%usws, n_out,          &
     3301                                           momentumflux_output_conversion )
    32543302
    32553303            CASE ( 'vsws' )
     
    32693317                                           surf_def_v(3)%vsws,                 &
    32703318                                           surf_lsm_v(3)%vsws,                 &
    3271                                            surf_usm_v(3)%vsws, n_out )
     3319                                           surf_usm_v(3)%vsws, n_out,          &
     3320                                           momentumflux_output_conversion )
    32723321
    32733322            CASE ( 'shf' )
     
    32873336                                           surf_def_v(3)%shf,                  &
    32883337                                           surf_lsm_v(3)%shf,                  &
    3289                                            surf_usm_v(3)%shf, n_out )
     3338                                           surf_usm_v(3)%shf, n_out,          &
     3339                                           heatflux_output_conversion )
    32903340
    32913341            CASE ( 'qsws' )
     
    33053355                                           surf_def_v(3)%qsws,                 &
    33063356                                           surf_lsm_v(3)%qsws,                 &
    3307                                            surf_usm_v(3)%qsws, n_out )
     3357                                           surf_usm_v(3)%qsws, n_out,          &
     3358                                           waterflux_output_conversion )
    33083359
    33093360            CASE ( 'ssws' )
     
    35613612
    35623613            CASE ( 'ghf' )
     3614!
     3615!--            Sum up ground / wall heat flux. Note, for urban surfaces the
     3616!--            wall heat flux is aggregated from the different green, window
     3617!--            and wall tiles.
     3618               DO  m = 1, surf_usm_h%ns
     3619                  surf_usm_h%ghf(m) = surf_usm_h%frac(m,ind_veg_wall)          &
     3620                                    * surf_usm_h%wghf_eb(m) +                  &
     3621                                      surf_usm_h%frac(m,ind_pav_green)         &
     3622                                    * surf_usm_h%wghf_eb_green(m) +            &
     3623                                      surf_usm_h%frac(m,ind_wat_win)           &
     3624                                    * surf_usm_h%wghf_eb_window(m)
     3625               ENDDO
     3626               DO  l = 0, 3
     3627                  DO  m = 1, surf_usm_v(l)%ns
     3628                     surf_usm_v(l)%ghf(m) = surf_usm_v(l)%frac(m,ind_veg_wall) &
     3629                                          * surf_usm_v(l)%wghf_eb(m) +         &
     3630                                            surf_usm_v(l)%frac(m,ind_pav_green)&
     3631                                          * surf_usm_v(l)%wghf_eb_green(m) +   &
     3632                                            surf_usm_v(l)%frac(m,ind_wat_win)  &
     3633                                          * surf_usm_v(l)%wghf_eb_window(m)
     3634                  ENDDO
     3635               ENDDO
     3636
    35633637               CALL surface_data_output_sum_up( surf_def_h(0)%ghf,             &
    35643638                                           surf_def_h(1)%ghf,                  &
     
    38463920                                     var_def_v1, var_lsm_v1, var_usm_v1,       &
    38473921                                     var_def_v2, var_lsm_v2, var_usm_v2,       &
    3848                                      var_def_v3, var_lsm_v3, var_usm_v3, n_out )
     3922                                     var_def_v3, var_lsm_v3, var_usm_v3, n_out,&
     3923                                     fac )
    38493924
    38503925      IMPLICIT NONE
    38513926
     3927      INTEGER(iwp) ::  k          !< height index of surface element
    38523928      INTEGER(iwp) ::  m          !< running index for surface elements
    38533929      INTEGER(iwp) ::  n_out      !< index for output variable
    38543930      INTEGER(iwp) ::  n_surf     !< running index for surface elements
     3931
     3932      REAL(wp), DIMENSION(:), OPTIONAL                ::  fac               !< passed output conversion factor for heatflux output
     3933      REAL(wp), DIMENSION(nzb:nzt+1)                  ::  conversion_factor !< effective array for output conversion factor
    38553934
    38563935      REAL(wp), DIMENSION(:), ALLOCATABLE, INTENT(IN) ::  var_def_h0 !< output variable at upward-facing default-type surfaces
     
    38723951
    38733952!
     3953!--   Set conversion factor to one if not present
     3954      IF ( .NOT. PRESENT( fac ) )  THEN
     3955         conversion_factor = 1.0_wp
     3956      ELSE
     3957         conversion_factor = fac
     3958      ENDIF
     3959!
    38743960!--   Set counter variable to zero before the variable is written to
    38753961!--   the output array.
     
    38883974         DO  m = 1, surf_def_h(0)%ns
    38893975            n_surf                        = n_surf + 1
     3976            k                             = surf_def_h(0)%k(m)
    38903977            surfaces%var_av(n_surf,n_out) = surfaces%var_av(n_surf,n_out)      &
    3891                                           + var_def_h0(m)
     3978                                          + var_def_h0(m) * conversion_factor(k)
    38923979         ENDDO
    38933980      ELSE
     
    38973984         DO  m = 1, surf_def_h(1)%ns
    38983985            n_surf                   = n_surf + 1
     3986            k                             = surf_def_h(1)%k(m)
    38993987            surfaces%var_av(n_surf,n_out) = surfaces%var_av(n_surf,n_out)      &
    3900                                           + var_def_h1(m)
     3988                                          + var_def_h1(m) * conversion_factor(k)
    39013989         ENDDO
    39023990      ELSE
     
    39063994         DO  m = 1, surf_lsm_h%ns
    39073995            n_surf                        = n_surf + 1
     3996            k                             = surf_lsm_h%k(m)
    39083997            surfaces%var_av(n_surf,n_out) = surfaces%var_av(n_surf,n_out)      &
    3909                                           + var_lsm_h(m)
     3998                                          + var_lsm_h(m) * conversion_factor(k)
    39103999         ENDDO
    39114000      ELSE
     
    39154004         DO  m = 1, surf_usm_h%ns
    39164005            n_surf                        = n_surf + 1
     4006            k                             = surf_usm_h%k(m)
    39174007            surfaces%var_av(n_surf,n_out) = surfaces%var_av(n_surf,n_out)      &
    3918                                           + var_usm_h(m)
     4008                                          + var_usm_h(m) * conversion_factor(k)
    39194009         ENDDO
    39204010      ELSE
     
    39264016         DO  m = 1, surf_def_v(0)%ns
    39274017            n_surf                        = n_surf + 1
     4018            k                             = surf_def_v(0)%k(m)
    39284019            surfaces%var_av(n_surf,n_out) = surfaces%var_av(n_surf,n_out)      &
    3929                                           + var_def_v0(m)
     4020                                          + var_def_v0(m) * conversion_factor(k)
    39304021         ENDDO
    39314022      ELSE
     
    39354026         DO  m = 1, surf_lsm_v(0)%ns
    39364027            n_surf                        = n_surf + 1
     4028            k                             = surf_lsm_v(0)%k(m)
    39374029            surfaces%var_av(n_surf,n_out) = surfaces%var_av(n_surf,n_out)      &
    3938                                           + var_lsm_v0(m)
     4030                                          + var_lsm_v0(m) * conversion_factor(k)
    39394031         ENDDO
    39404032      ELSE
     
    39444036         DO  m = 1, surf_usm_v(0)%ns
    39454037            n_surf                        = n_surf + 1
     4038            k                             = surf_usm_v(0)%k(m)
    39464039            surfaces%var_av(n_surf,n_out) = surfaces%var_av(n_surf,n_out)      &
    3947                                           + var_usm_v0(m)
     4040                                          + var_usm_v0(m) * conversion_factor(k)
    39484041         ENDDO
    39494042      ELSE
     
    39554048         DO  m = 1, surf_def_v(1)%ns
    39564049            n_surf                        = n_surf + 1
     4050            k                             = surf_def_v(1)%k(m)
    39574051            surfaces%var_av(n_surf,n_out) = surfaces%var_av(n_surf,n_out)      &
    3958                                           + var_def_v1(m)
     4052                                          + var_def_v1(m) * conversion_factor(k)
    39594053         ENDDO
    39604054      ELSE
     
    39644058         DO  m = 1, surf_lsm_v(1)%ns
    39654059            n_surf                        = n_surf + 1
     4060            k                             = surf_lsm_v(1)%k(m)
    39664061            surfaces%var_av(n_surf,n_out) = surfaces%var_av(n_surf,n_out)      &
    3967                                           + var_lsm_v1(m)
     4062                                          + var_lsm_v1(m) * conversion_factor(k)
    39684063         ENDDO
    39694064      ELSE
     
    39734068         DO  m = 1, surf_usm_v(1)%ns
    39744069            n_surf                        = n_surf + 1
     4070            k                             = surf_usm_v(1)%k(m)
    39754071            surfaces%var_av(n_surf,n_out) = surfaces%var_av(n_surf,n_out)      &
    3976                                           + var_usm_v1(m)
     4072                                          + var_usm_v1(m) * conversion_factor(k)
    39774073         ENDDO
    39784074      ELSE
     
    39844080         DO  m = 1, surf_def_v(2)%ns
    39854081            n_surf                        = n_surf + 1
     4082            k                             = surf_def_v(2)%k(m)
    39864083            surfaces%var_av(n_surf,n_out) = surfaces%var_av(n_surf,n_out)      &
    3987                                           + var_def_v2(m)
     4084                                          + var_def_v2(m) * conversion_factor(k)
    39884085         ENDDO
    39894086      ELSE
     
    39934090         DO  m = 1, surf_lsm_v(2)%ns
    39944091            n_surf                        = n_surf + 1
     4092            k                             = surf_lsm_v(2)%k(m)
    39954093            surfaces%var_av(n_surf,n_out) = surfaces%var_av(n_surf,n_out)      &
    3996                                           + var_lsm_v2(m)
     4094                                          + var_lsm_v2(m) * conversion_factor(k)
    39974095         ENDDO
    39984096      ELSE
     
    40024100         DO  m = 1, surf_usm_v(2)%ns
    40034101            n_surf                        = n_surf + 1
     4102            k                             = surf_usm_v(2)%k(m)
    40044103            surfaces%var_av(n_surf,n_out) = surfaces%var_av(n_surf,n_out)      &
    4005                                           + var_usm_v2(m)
     4104                                          + var_usm_v2(m) * conversion_factor(k)
    40064105         ENDDO
    40074106      ELSE
     
    40134112         DO  m = 1, surf_def_v(3)%ns
    40144113            n_surf                        = n_surf + 1
     4114            k                             = surf_def_v(3)%k(m)
    40154115            surfaces%var_av(n_surf,n_out) = surfaces%var_av(n_surf,n_out)      &
    4016                                           + var_def_v3(m)
     4116                                          + var_def_v3(m) * conversion_factor(k)
    40174117         ENDDO
    40184118      ELSE
     
    40224122         DO  m = 1, surf_lsm_v(3)%ns
    40234123            n_surf                        = n_surf + 1
     4124            k                             = surf_lsm_v(3)%k(m)
    40244125            surfaces%var_av(n_surf,n_out) = surfaces%var_av(n_surf,n_out)      &
    4025                                           + var_lsm_v3(m)
     4126                                          + var_lsm_v3(m) * conversion_factor(k)
    40264127         ENDDO
    40274128      ELSE
     
    40314132         DO  m = 1, surf_usm_v(3)%ns
    40324133            n_surf                        = n_surf + 1
     4134            k                             = surf_usm_v(3)%k(m)
    40334135            surfaces%var_av(n_surf,n_out) = surfaces%var_av(n_surf,n_out)      &
    4034                                           + var_usm_v3(m)
     4136                                          + var_usm_v3(m) * conversion_factor(k)
    40354137         ENDDO
    40364138      ELSE
     
    40504152                                      var_def_v1, var_lsm_v1, var_usm_v1,      &
    40514153                                      var_def_v2, var_lsm_v2, var_usm_v2,      &
    4052                                       var_def_v3, var_lsm_v3, var_usm_v3 )
     4154                                      var_def_v3, var_lsm_v3, var_usm_v3,      &
     4155                                      fac )
    40534156
    40544157      IMPLICIT NONE
    40554158
     4159      INTEGER(iwp) ::  k      !< height index of surface element
    40564160      INTEGER(iwp) ::  m      !< running index for surface elements
    40574161      INTEGER(iwp) ::  n_surf !< running index for surface elements
     4162
     4163      REAL(wp), DIMENSION(:), OPTIONAL                ::  fac               !< passed output conversion factor for heatflux output
     4164      REAL(wp), DIMENSION(nzb:nzt+1)                  ::  conversion_factor !< effective array for output conversion factor
    40584165
    40594166      REAL(wp), DIMENSION(:), ALLOCATABLE, INTENT(IN) ::  var_def_h0 !< output variable at upward-facing default-type surfaces
     
    40754182
    40764183!
     4184!--   Set conversion factor to one if not present
     4185      IF ( .NOT. PRESENT( fac ) )  THEN
     4186         conversion_factor = 1.0_wp
     4187      ELSE
     4188         conversion_factor = fac
     4189      ENDIF
     4190!
    40774191!--   Set counter variable to zero before the variable is written to
    40784192!--   the output array.
    40794193      n_surf = 0
    4080 
    40814194!
    40824195!--   Write the horizontal surfaces.
     
    40854198!--   If a variable is not defined, skip the block and increment the counter
    40864199!--   variable by the number of surface elements of this type. Usually this
    4087 !--   is zere, however, there might be the situation that e.g. urban surfaces
     4200!--   is zero, however, there might be the situation that e.g. urban surfaces
    40884201!--   are defined but the respective variable is not allocated for this surface
    40894202!--   type. To write the data on the exact position, increment the counter.
     
    40914204         DO  m = 1, surf_def_h(0)%ns
    40924205            n_surf                   = n_surf + 1
    4093             surfaces%var_out(n_surf) = var_def_h0(m)
     4206            k                        = surf_def_h(0)%k(m)
     4207            surfaces%var_out(n_surf) = var_def_h0(m) * conversion_factor(k)
    40944208         ENDDO
    40954209      ELSE
     
    40994213         DO  m = 1, surf_def_h(1)%ns
    41004214            n_surf                   = n_surf + 1
    4101             surfaces%var_out(n_surf) = var_def_h1(m)
     4215            k                        = surf_def_h(1)%k(m)
     4216            surfaces%var_out(n_surf) = var_def_h1(m) * conversion_factor(k)
    41024217         ENDDO
    41034218      ELSE
     
    41074222         DO  m = 1, surf_lsm_h%ns
    41084223            n_surf                   = n_surf + 1
    4109             surfaces%var_out(n_surf) = var_lsm_h(m)
     4224            k                        = surf_lsm_h%k(m)
     4225            surfaces%var_out(n_surf) = var_lsm_h(m) * conversion_factor(k)
    41104226         ENDDO
    41114227      ELSE
     
    41154231         DO  m = 1, surf_usm_h%ns
    41164232            n_surf                   = n_surf + 1
    4117             surfaces%var_out(n_surf) = var_usm_h(m)
     4233            k                        = surf_usm_h%k(m)
     4234            surfaces%var_out(n_surf) = var_usm_h(m) * conversion_factor(k)
    41184235         ENDDO
    41194236      ELSE
     
    41254242         DO  m = 1, surf_def_v(0)%ns
    41264243            n_surf                   = n_surf + 1
    4127             surfaces%var_out(n_surf) = var_def_v0(m)
     4244            k                        = surf_def_v(0)%k(m)
     4245            surfaces%var_out(n_surf) = var_def_v0(m) * conversion_factor(k)
    41284246         ENDDO
    41294247      ELSE
     
    41334251         DO  m = 1, surf_lsm_v(0)%ns
    41344252            n_surf                   = n_surf + 1
    4135             surfaces%var_out(n_surf) = var_lsm_v0(m)
     4253            k                        = surf_lsm_v(0)%k(m)
     4254            surfaces%var_out(n_surf) = var_lsm_v0(m) * conversion_factor(k)
    41364255         ENDDO
    41374256      ELSE
     
    41414260         DO  m = 1, surf_usm_v(0)%ns
    41424261            n_surf                   = n_surf + 1
    4143             surfaces%var_out(n_surf) = var_usm_v0(m)
     4262            k                        = surf_usm_v(0)%k(m)
     4263            surfaces%var_out(n_surf) = var_usm_v0(m) * conversion_factor(k)
    41444264         ENDDO
    41454265      ELSE
     
    41514271         DO  m = 1, surf_def_v(1)%ns
    41524272            n_surf                   = n_surf + 1
    4153             surfaces%var_out(n_surf) = var_def_v1(m)
     4273            k                        = surf_def_v(1)%k(m)
     4274            surfaces%var_out(n_surf) = var_def_v1(m) * conversion_factor(k)
    41544275         ENDDO
    41554276      ELSE
     
    41594280         DO  m = 1, surf_lsm_v(1)%ns
    41604281            n_surf                   = n_surf + 1
    4161             surfaces%var_out(n_surf) = var_lsm_v1(m)
     4282            k                        = surf_lsm_v(1)%k(m)
     4283            surfaces%var_out(n_surf) = var_lsm_v1(m) * conversion_factor(k)
    41624284         ENDDO
    41634285      ELSE
     
    41674289         DO  m = 1, surf_usm_v(1)%ns
    41684290            n_surf                   = n_surf + 1
    4169             surfaces%var_out(n_surf) = var_usm_v1(m)
     4291            k                        = surf_usm_v(1)%k(m)
     4292            surfaces%var_out(n_surf) = var_usm_v1(m) * conversion_factor(k)
    41704293         ENDDO
    41714294      ELSE
     
    41774300         DO  m = 1, surf_def_v(2)%ns
    41784301            n_surf                   = n_surf + 1
    4179             surfaces%var_out(n_surf) = var_def_v2(m)
     4302            k                        = surf_def_v(2)%k(m)
     4303            surfaces%var_out(n_surf) = var_def_v2(m) * conversion_factor(k)
    41804304         ENDDO
    41814305      ELSE
     
    41854309         DO  m = 1, surf_lsm_v(2)%ns
    41864310            n_surf                   = n_surf + 1
    4187             surfaces%var_out(n_surf) = var_lsm_v2(m)
     4311            k                        = surf_lsm_v(2)%k(m)
     4312            surfaces%var_out(n_surf) = var_lsm_v2(m) * conversion_factor(k)
    41884313         ENDDO
    41894314      ELSE
     
    41934318         DO  m = 1, surf_usm_v(2)%ns
    41944319            n_surf                   = n_surf + 1
    4195             surfaces%var_out(n_surf) = var_usm_v2(m)
     4320            k                        = surf_usm_v(2)%k(m)
     4321            surfaces%var_out(n_surf) = var_usm_v2(m) * conversion_factor(k)
    41964322         ENDDO
    41974323      ELSE
     
    42034329         DO  m = 1, surf_def_v(3)%ns
    42044330            n_surf                   = n_surf + 1
    4205             surfaces%var_out(n_surf) = var_def_v3(m)
     4331            k                        = surf_def_v(3)%k(m)
     4332            surfaces%var_out(n_surf) = var_def_v3(m) * conversion_factor(k)
    42064333         ENDDO
    42074334      ELSE
     
    42114338         DO  m = 1, surf_lsm_v(3)%ns
    42124339            n_surf                   = n_surf + 1
    4213             surfaces%var_out(n_surf) = var_lsm_v3(m)
     4340            k                        = surf_lsm_v(3)%k(m)
     4341            surfaces%var_out(n_surf) = var_lsm_v3(m) * conversion_factor(k)
    42144342         ENDDO
    42154343      ELSE
     
    42194347         DO  m = 1, surf_usm_v(3)%ns
    42204348            n_surf                   = n_surf + 1
    4221             surfaces%var_out(n_surf) = var_usm_v3(m)
     4349            k                        = surf_usm_v(3)%k(m)
     4350            surfaces%var_out(n_surf) = var_usm_v3(m) * conversion_factor(k)
    42224351         ENDDO
    42234352      ELSE
  • palm/trunk/SOURCE/urban_surface_mod.f90

    r4495 r4500  
    2828! -----------------
    2929! $Id$
     30! Allocate array for wall heat flux, which is further used to aggregate tile
     31! fractions in the surface output
     32!
     33! 4495 2020-04-13 20:11:20Z raasch
    3034! restart data handling with MPI-IO added
    3135!
     
    11221126        ENDDO
    11231127!
    1124 !--     allocate wall heat flux output array and set initial values. For horizontal surfaces
     1128!--     Allocate wall heat flux output arrays and set initial values. For horizontal surfaces
    11251129!        ALLOCATE ( surf_usm_h%wshf(1:surf_usm_h%ns)    )  !can be removed
    11261130        ALLOCATE ( surf_usm_h%wshf_eb(1:surf_usm_h%ns) )
     
    11301134        ALLOCATE ( surf_usm_h%iwghf_eb(1:surf_usm_h%ns) )
    11311135        ALLOCATE ( surf_usm_h%iwghf_eb_window(1:surf_usm_h%ns) )
     1136        ALLOCATE ( surf_usm_h%ghf(1:surf_usm_h%ns) )
    11321137        IF ( ALLOCATED( surf_usm_h%wshf    ) )  surf_usm_h%wshf    = 0.0_wp
    11331138        IF ( ALLOCATED( surf_usm_h%wshf_eb ) )  surf_usm_h%wshf_eb = 0.0_wp
     
    11371142        IF ( ALLOCATED( surf_usm_h%iwghf_eb ) )  surf_usm_h%iwghf_eb = 0.0_wp
    11381143        IF ( ALLOCATED( surf_usm_h%iwghf_eb_window ) )  surf_usm_h%iwghf_eb_window = 0.0_wp
     1144        IF ( ALLOCATED( surf_usm_h%ghf ) )  surf_usm_h%ghf = 0.0_wp
    11391145!
    11401146!--     Now, for vertical surfaces
     
    11471153           ALLOCATE ( surf_usm_v(l)%iwghf_eb(1:surf_usm_v(l)%ns) )
    11481154           ALLOCATE ( surf_usm_v(l)%iwghf_eb_window(1:surf_usm_v(l)%ns) )
     1155           ALLOCATE ( surf_usm_v(l)%ghf(1:surf_usm_v(l)%ns) )
    11491156           IF ( ALLOCATED( surf_usm_v(l)%wshf    ) )  surf_usm_v(l)%wshf    = 0.0_wp
    11501157           IF ( ALLOCATED( surf_usm_v(l)%wshf_eb ) )  surf_usm_v(l)%wshf_eb = 0.0_wp
     
    11541161           IF ( ALLOCATED( surf_usm_v(l)%iwghf_eb ) )  surf_usm_v(l)%iwghf_eb = 0.0_wp
    11551162           IF ( ALLOCATED( surf_usm_v(l)%iwghf_eb_window ) )  surf_usm_v(l)%iwghf_eb_window = 0.0_wp
     1163           IF ( ALLOCATED( surf_usm_v(l)%ghf ) )  surf_usm_v(l)%ghf = 0.0_wp
    11561164        ENDDO
    11571165!
Note: See TracChangeset for help on using the changeset viewer.