Changeset 3943 for palm/trunk/SOURCE


Ignore:
Timestamp:
May 2, 2019 9:50:41 AM (6 years ago)
Author:
maronga
Message:

bugfixes in urban surface model; output of greenz roof transpiration added/corrected; minor formatting improvements

Location:
palm/trunk/SOURCE
Files:
10 edited

Legend:

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

    r3885 r3943  
    2525! -----------------
    2626! $Id$
     27! Added output of qsws for green roofs.
     28!
     29! 3885 2019-04-11 11:29:34Z kanani
    2730! Changes related to global restructuring of location messages and introduction
    2831! of additional debug messages
     
    919922                      k = surf_lsm_h%k(m)
    920923                      local_pf(i,j,nzb+1) = surf_lsm_h%qsws(m) * l_v
     924                   ENDDO
     925                   DO  m = 1, surf_usm_h%ns
     926                      i = surf_usm_h%i(m)
     927                      j = surf_usm_h%j(m)
     928                      k = surf_usm_h%k(m)
     929                      local_pf(i,j,nzb+1) = surf_usm_h%qsws(m) * l_v
    921930                   ENDDO
    922931                ELSE
  • palm/trunk/SOURCE/land_surface_model_mod.f90

    r3941 r3943  
    2525! -----------------
    2626! $Id$
     27! Removed extra blank character
     28!
     29! 3941 2019-04-30 09:48:33Z suehring
    2730! Check that at least one surface type is set at surface element.
    2831!
     
    54755478
    54765479
    5477              IF (  calc_soil_moisture )  THEN
     5480             IF ( calc_soil_moisture )  THEN
    54785481
    54795482!
  • palm/trunk/SOURCE/netcdf_data_input_mod.f90

    r3942 r3943  
    2525! -----------------
    2626! $Id$
     27! Temporarily disabled some (faulty) checks for static driver.
     28!
     29! 3942 2019-04-30 13:08:30Z kanani
    2730! Fix: increase LEN of all NetCDF attribute values (caused crash in
    2831! netcdf_create_global_atts due to insufficient length)
     
    42564259!
    42574260!--          Check if building_type is set at each building and vice versa.
    4258              IF ( building_type_f%from_file  .AND.  buildings_f%from_file )  THEN
    4259                 IF ( buildings_f%lod == 1 )  THEN
    4260                    IF ( buildings_f%var_2d(j,i)  /= buildings_f%fill1  .AND.   &
    4261                         building_type_f%var(j,i) == building_type_f%fill  .OR. &
    4262                         buildings_f%var_2d(j,i)  == buildings_f%fill1  .AND.   &
    4263                         building_type_f%var(j,i) /= building_type_f%fill )  THEN
    4264                       WRITE( message_string, * ) 'Each location where a ' //   &
    4265                                       '2D building is set requires a type ' // &
    4266                                       '( and vice versa ) in case the ' //     &
    4267                                       'urban-surface model is applied. ' //    &
    4268                                       'i, j = ', i, j
    4269                       CALL message( 'netcdf_data_input_mod', 'PA0573',         &
    4270                                      2, 2, myid, 6, 0 )
    4271                    ENDIF
    4272                 ENDIF
    4273                 IF ( buildings_f%lod == 2 )  THEN
    4274                    IF ( ANY( buildings_f%var_3d(:,j,i) == 1 )  .AND.           &
    4275                         building_type_f%var(j,i) == building_type_f%fill  .OR. &
    4276                   .NOT. ANY( buildings_f%var_3d(:,j,i) == 1 )  .AND.           &
    4277                         building_type_f%var(j,i) /= building_type_f%fill )  THEN
    4278                       WRITE( message_string, * ) 'Each location where a ' //   &
    4279                                       '3D building is set requires a type ' // &
    4280                                       '( and vice versa ) in case the ' //     &
    4281                                       'urban-surface model is applied. ' //    &
    4282                                       'i, j = ', i, j
    4283                       CALL message( 'netcdf_data_input_mod', 'PA0573',         &
    4284                                      2, 2, myid, 6, 0 )
    4285                    ENDIF
    4286                 ENDIF
    4287              ENDIF
     4261!              IF ( building_type_f%from_file  .AND.  buildings_f%from_file )  THEN
     4262!                 IF ( buildings_f%lod == 1 )  THEN
     4263!                    IF ( buildings_f%var_2d(j,i)  /= buildings_f%fill1  .AND.   &
     4264!                         building_type_f%var(j,i) == building_type_f%fill  .OR. &
     4265!                         buildings_f%var_2d(j,i)  == buildings_f%fill1  .AND.   &
     4266!                         building_type_f%var(j,i) /= building_type_f%fill )  THEN
     4267!                       WRITE( message_string, * ) 'Each location where a ' //   &
     4268!                                       '2D building is set requires a type ' // &
     4269!                                       '( and vice versa ) in case the ' //     &
     4270!                                       'urban-surface model is applied. ' //    &
     4271!                                       'i, j = ', i, j
     4272!                       CALL message( 'netcdf_data_input_mod', 'PA0573',         &
     4273!                                      2, 2, myid, 6, 0 )
     4274!                    ENDIF
     4275!                 ENDIF
     4276!                 IF ( buildings_f%lod == 2 )  THEN
     4277!                    IF ( ANY( buildings_f%var_3d(:,j,i) == 1 )  .AND.           &
     4278!                         building_type_f%var(j,i) == building_type_f%fill  .OR. &
     4279!                   .NOT. ANY( buildings_f%var_3d(:,j,i) == 1 )  .AND.           &
     4280!                         building_type_f%var(j,i) /= building_type_f%fill )  THEN
     4281!                       WRITE( message_string, * ) 'Each location where a ' //   &
     4282!                                       '3D building is set requires a type ' // &
     4283!                                       '( and vice versa ) in case the ' //     &
     4284!                                       'urban-surface model is applied. ' //    &
     4285!                                       'i, j = ', i, j
     4286!                       CALL message( 'netcdf_data_input_mod', 'PA0573',         &
     4287!                                      2, 2, myid, 6, 0 )
     4288!                    ENDIF
     4289!                 ENDIF
     4290!              ENDIF
    42884291!
    42894292!--          Check if at each location where a building is present also an ID
    42904293!--          is set and vice versa.
    4291              IF ( buildings_f%from_file )  THEN
    4292                 IF ( buildings_f%lod == 1 )  THEN
    4293                    IF ( buildings_f%var_2d(j,i) /= buildings_f%fill1  .AND.    &
    4294                         building_id_f%var(j,i)  == building_id_f%fill  .OR.    &
    4295                         buildings_f%var_2d(j,i) == buildings_f%fill1  .AND.    &
    4296                         building_id_f%var(j,i)  /= building_id_f%fill )  THEN
    4297                       WRITE( message_string, * ) 'Each location where a ' //   &
    4298                                       '2D building is set requires an ID ' //  &
    4299                                       '( and vice versa ). i, j = ', i, j
    4300                       CALL message( 'netcdf_data_input_mod', 'PA0574',         &
    4301                                      2, 2, myid, 6, 0 )
    4302                    ENDIF
    4303                 ELSEIF ( buildings_f%lod == 2 )  THEN
    4304                    IF ( ANY( buildings_f%var_3d(:,j,i) == 1 )  .AND.           &
    4305                         building_id_f%var(j,i) == building_id_f%fill  .OR.     &
    4306                   .NOT. ANY( buildings_f%var_3d(:,j,i) == 1 )  .AND.           &
    4307                         building_id_f%var(j,i) /= building_id_f%fill )  THEN
    4308                       WRITE( message_string, * ) 'Each location where a ' //   &
    4309                                       '3D building is set requires an ID ' //  &
    4310                                       '( and vice versa ). i, j = ', i, j
    4311                       CALL message( 'netcdf_data_input_mod', 'PA0574',         &
    4312                                      2, 2, myid, 6, 0 )
    4313                    ENDIF
    4314                 ENDIF
    4315              ENDIF
     4294!              IF ( buildings_f%from_file )  THEN
     4295!                 IF ( buildings_f%lod == 1 )  THEN
     4296!                    IF ( buildings_f%var_2d(j,i) /= buildings_f%fill1  .AND.    &
     4297!                         building_id_f%var(j,i)  == building_id_f%fill  .OR.    &
     4298!                         buildings_f%var_2d(j,i) == buildings_f%fill1  .AND.    &
     4299!                         building_id_f%var(j,i)  /= building_id_f%fill )  THEN
     4300!                       WRITE( message_string, * ) 'Each location where a ' //   &
     4301!                                       '2D building is set requires an ID ' //  &
     4302!                                       '( and vice versa ). i, j = ', i, j
     4303!                       CALL message( 'netcdf_data_input_mod', 'PA0574',         &
     4304!                                      2, 2, myid, 6, 0 )
     4305!                    ENDIF
     4306!                 ELSEIF ( buildings_f%lod == 2 )  THEN
     4307!                    IF ( ANY( buildings_f%var_3d(:,j,i) == 1 )  .AND.           &
     4308!                         building_id_f%var(j,i) == building_id_f%fill  .OR.     &
     4309!                   .NOT. ANY( buildings_f%var_3d(:,j,i) == 1 )  .AND.           &
     4310!                         building_id_f%var(j,i) /= building_id_f%fill )  THEN
     4311!                       WRITE( message_string, * ) 'Each location where a ' //   &
     4312!                                       '3D building is set requires an ID ' //  &
     4313!                                       '( and vice versa ). i, j = ', i, j
     4314!                       CALL message( 'netcdf_data_input_mod', 'PA0574',         &
     4315!                                      2, 2, myid, 6, 0 )
     4316!                    ENDIF
     4317!                 ENDIF
     4318!              ENDIF
    43164319!
    43174320!--          Check if building ID is set where a bulding is defined.
  • palm/trunk/SOURCE/pmc_child_mod.f90

    r3932 r3943  
    2121! Current revisions:
    2222! ------------------
    23 ! typo removed
     23!
    2424!
    2525! Former revisions:
    2626! -----------------
    2727! $Id$
     28! typo removed
     29!
     30! 3932 2019-04-24 17:31:34Z suehring
    2831! statement added to avoid compiler warning
    2932!
  • palm/trunk/SOURCE/pmc_general_mod.f90

    r3932 r3943  
    2121! Current revisions:
    2222! ------------------
    23 ! Increase character length so that also chemistry variable names fully fit
     23!
    2424!
    2525! Former revisions:
    2626! -----------------
    2727! $Id$
     28! Increase character length so that also chemistry variable names fully fit
     29!
     30! 3932 2019-04-24 17:31:34Z suehring
    2831! Determine number of coupled arrays dynamically.
    2932!
  • palm/trunk/SOURCE/pmc_interface_mod.f90

    r3932 r3943  
    2020! Current revisions:
    2121! ------------------
    22 ! Add missing if statements for call of pmc_set_dataarray_name for TKE and
    23 ! dissipation.
     22!
    2423!
    2524! Former revisions:
    2625! -----------------
    2726! $Id$
     27! Add missing if statements for call of pmc_set_dataarray_name for TKE and
     28! dissipation.
     29!
     30! 3932 2019-04-24 17:31:34Z suehring
    2831! Variables renamed, commenting improved etc.
    2932!
  • palm/trunk/SOURCE/radiation_model_mod.f90

    r3900 r3943  
    2828! -----------------
    2929! $Id$
     30! Missing blank characteer added.
     31!
     32! 3900 2019-04-16 15:17:43Z suehring
    3033! Fixed initialization problem
    3134!
     
    83318334
    83328335      WRITE ( message_string, * ) 'Precalculated', ndsidir, ' solar positions', &
    8333                                   'from', it, ' timesteps.'
     8336                                  ' from', it, ' timesteps.'
    83348337      CALL message( 'radiation_presimulate_solar_pos', 'UI0013', 0, 0, 0, 6, 0 )
    83358338
  • palm/trunk/SOURCE/sum_up_3d_data.f90

    r3933 r3943  
    2525! -----------------
    2626! $Id$
     27! Added output of qsws_av for green roofs.
     28!
     29! 3933 2019-04-25 12:33:20Z kanani
    2730! Formatting
    2831!
     
    792795!--          In case of land- and urban-surfaces, convert fluxes into
    793796!--          dynamic units.
     797!--          Question (maronga): are the .NOT. statements really required?
    794798             IF ( ALLOCATED( qsws_av ) ) THEN
    795799                DO  i = nxl, nxr
     
    811815                         qsws_av(j,i) = qsws_av(j,i) +                         &
    812816                                         surf_lsm_h%qsws(m) * l_v
     817                      ELSEIF ( match_usm  .AND.  .NOT. match_lsm )  THEN
     818                         m = surf_usm_h%end_index(j,i)
     819                         qsws_av(j,i) = qsws_av(j,i) +                         &
     820                                         surf_usm_h%qsws(m) * l_v
    813821                      ENDIF
    814822                   ENDDO
  • palm/trunk/SOURCE/surface_mod.f90

    r3933 r3943  
    2626! -----------------
    2727! $Id$
     28! Removed qsws_eb as it is no longer needed.
     29!
     30! 3933 2019-04-25 12:33:20Z kanani
    2831! Add (de)allocation of pt_2m,
    2932! bugfix: initialize pt_2m
     
    448451       REAL(wp), DIMENSION(:), ALLOCATABLE ::  lambda_surface_u    !< coupling between surface and soil (depends on vegetation type) (W/m2/K)
    449452       REAL(wp), DIMENSION(:), ALLOCATABLE ::  lambda_surface_s    !< coupling between surface and soil (depends on vegetation type) (W/m2/K)
    450        REAL(wp), DIMENSION(:), ALLOCATABLE ::  qsws_eb             !<
    451453       REAL(wp), DIMENSION(:), ALLOCATABLE ::  qsws_liq            !< surface flux of latent heat (liquid water portion)
    452454       REAL(wp), DIMENSION(:), ALLOCATABLE ::  qsws_soil           !< surface flux of latent heat (soil portion)
     
    580582       REAL(wp), DIMENSION(:), ALLOCATABLE ::  iwghf_eb_window_av !< indoor average of wghf_eb window
    581583       REAL(wp), DIMENSION(:), ALLOCATABLE ::  wshf_eb_av       !< average of wshf_eb
    582        REAL(wp), DIMENSION(:), ALLOCATABLE ::  qsws_eb_av       !< average of qsws_eb
     584       REAL(wp), DIMENSION(:), ALLOCATABLE ::  qsws_av           !< average of qsws
    583585       REAL(wp), DIMENSION(:), ALLOCATABLE ::  qsws_veg_av       !< average of qsws_veg_eb
    584586       REAL(wp), DIMENSION(:), ALLOCATABLE ::  qsws_liq_av       !< average of qsws_liq_eb
  • palm/trunk/SOURCE/urban_surface_mod.f90

    r3933 r3943  
    2828! -----------------
    2929! $Id$
     30! Removed qsws_eb. Bugfix in calculation of qsws.
     31!
     32! 3933 2019-04-25 12:33:20Z kanani
    3033! Remove allocation of pt_2m, this is done in surface_mod now (surfaces%pt_2m)
    3134!
     
    11611164        ALLOCATE ( surf_usm_h%r_canopy(1:surf_usm_h%ns)         )
    11621165        ALLOCATE ( surf_usm_h%r_canopy_min(1:surf_usm_h%ns)     )
    1163         ALLOCATE ( surf_usm_h%qsws_eb(1:surf_usm_h%ns)          )
    11641166        ALLOCATE ( surf_usm_h%pt_10cm(1:surf_usm_h%ns)          )
    11651167
     
    11711173          ALLOCATE ( surf_usm_v(l)%qsws_liq(1:surf_usm_v(l)%ns)         )
    11721174          ALLOCATE ( surf_usm_v(l)%qsws_veg(1:surf_usm_v(l)%ns)         )
    1173           ALLOCATE ( surf_usm_v(l)%qsws_eb(1:surf_usm_v(l)%ns)          )
    11741175          ALLOCATE ( surf_usm_v(l)%r_canopy(1:surf_usm_v(l)%ns)         )
    11751176          ALLOCATE ( surf_usm_v(l)%r_canopy_min(1:surf_usm_v(l)%ns)     )
     
    15321533!--                 array of latent heat flux from surfaces
    15331534!--                 land surfaces
    1534                     IF ( l == -1 .AND. .NOT.  ALLOCATED(surf_usm_h%qsws_eb_av) )  THEN
    1535                         ALLOCATE ( surf_usm_h%qsws_eb_av(1:surf_usm_h%ns) )
    1536                         surf_usm_h%qsws_eb_av = 0.0_wp
     1535                    IF ( l == -1 .AND. .NOT.  ALLOCATED(surf_usm_h%qsws_av) )  THEN
     1536                        ALLOCATE ( surf_usm_h%qsws_av(1:surf_usm_h%ns) )
     1537                        surf_usm_h%qsws_av = 0.0_wp
    15371538                    ELSE
    1538                        IF ( .NOT.  ALLOCATED(surf_usm_v(l)%qsws_eb_av) )  THEN
    1539                            ALLOCATE ( surf_usm_v(l)%qsws_eb_av(1:surf_usm_v(l)%ns) )
    1540                            surf_usm_v(l)%qsws_eb_av = 0.0_wp
     1539                       IF ( .NOT.  ALLOCATED(surf_usm_v(l)%qsws_av) )  THEN
     1540                           ALLOCATE ( surf_usm_v(l)%qsws_av(1:surf_usm_v(l)%ns) )
     1541                           surf_usm_v(l)%qsws_av = 0.0_wp
    15411542                       ENDIF
    15421543                    ENDIF
     
    17971798                    IF ( l == -1 ) THEN
    17981799                    DO  m = 1, surf_usm_h%ns
    1799                        surf_usm_h%qsws_eb_av(m) =                              &
    1800                                           surf_usm_h%qsws_eb_av(m) +           &
    1801                                           surf_usm_h%qsws_eb(m)
     1800                       surf_usm_h%qsws_av(m) =                              &
     1801                                          surf_usm_h%qsws_av(m) +           &
     1802                                          surf_usm_h%qsws(m) * l_v
    18021803                    ENDDO
    18031804                    ELSE
    18041805                       DO  m = 1, surf_usm_v(l)%ns
    1805                           surf_usm_v(l)%qsws_eb_av(m) =                        &
    1806                                           surf_usm_v(l)%qsws_eb_av(m) +        &
    1807                                           surf_usm_v(l)%qsws_eb(m)
     1806                          surf_usm_v(l)%qsws_av(m) =                        &
     1807                                          surf_usm_v(l)%qsws_av(m) +        &
     1808                                          surf_usm_v(l)%qsws(m) * l_v
    18081809                       ENDDO
    18091810                    ENDIF
     
    20952096                    IF ( l == -1 ) THEN
    20962097                    DO  m = 1, surf_usm_h%ns
    2097                        surf_usm_h%qsws_eb_av(m) =                              &
    2098                                           surf_usm_h%qsws_eb_av(m) /           &
     2098                       surf_usm_h%qsws_av(m) =                              &
     2099                                          surf_usm_h%qsws_av(m) /           &
    20992100                                          REAL( average_count_3d, kind=wp )
    21002101                    ENDDO
    21012102                    ELSE
    21022103                       DO  m = 1, surf_usm_v(l)%ns
    2103                           surf_usm_v(l)%qsws_eb_av(m) =                        &
    2104                                           surf_usm_v(l)%qsws_eb_av(m) /        &
     2104                          surf_usm_v(l)%qsws_av(m) =                        &
     2105                                          surf_usm_v(l)%qsws_av(m) /        &
    21052106                                          REAL( average_count_3d, kind=wp )
    21062107                       ENDDO
     
    24322433        CHARACTER(LEN=2)                              :: ls
    24332434        CHARACTER(LEN=varnamelength)                  :: var           !< TRIM(variable)
    2434         INTEGER(iwp), PARAMETER                       :: nl1 = 14      !< number of directional usm variables
     2435        INTEGER(iwp), PARAMETER                       :: nl1 = 15      !< number of directional usm variables
    24352436        CHARACTER(LEN=varnamelength), DIMENSION(nl1)  :: varlist1 = &  !< list of directional usm variables
    24362437                  (/'usm_wshf                      ', &
     
    24472448                    'usm_t_surf_green              ', &
    24482449                    'usm_t_green                   ', &
     2450                    'usm_qsws                      ', &
    24492451                    'usm_theta_10cm                '/)
    24502452
     
    28012803                       j = surf_usm_h%j(m)
    28022804                       k = surf_usm_h%k(m)
    2803                        temp_pf(k,j,i) = surf_usm_h%qsws_eb(m)
     2805                       temp_pf(k,j,i) = surf_usm_h%qsws(m) * l_v
    28042806                    ENDDO
    28052807                 ELSE
     
    28092811                       j = surf_usm_v(l)%j(m)
    28102812                       k = surf_usm_v(l)%k(m)
    2811                        temp_pf(k,j,i) = surf_usm_v(l)%qsws_eb(m)
     2813                       temp_pf(k,j,i) = surf_usm_v(l)%qsws(m) * l_v
    28122814                    ENDDO
    28132815                 ENDIF
     
    28182820                       j = surf_usm_h%j(m)
    28192821                       k = surf_usm_h%k(m)
    2820                        temp_pf(k,j,i) = surf_usm_h%qsws_eb_av(m)
     2822                       temp_pf(k,j,i) = surf_usm_h%qsws_av(m)
    28212823                    ENDDO
    28222824                 ELSE
     
    28262828                       j = surf_usm_v(l)%j(m)
    28272829                       k = surf_usm_v(l)%k(m)
    2828                        temp_pf(k,j,i) = surf_usm_v(l)%qsws_eb_av(m)
     2830                       temp_pf(k,j,i) = surf_usm_v(l)%qsws_av(m)
    28292831                    ENDDO
    28302832                 ENDIF
     
    80738075
    80748076           IF (surf_usm_h%frac(ind_pav_green,m) > 0.0_wp) THEN
    8075 
     8077             
     8078           
    80768079              IF ( humidity )  THEN
    8077                  surf_usm_h%qsws_eb(m)  = - f_qsws * ( qv1 - q_s + dq_s_dt                  &
     8080                 surf_usm_h%qsws(m)  = - f_qsws * ( qv1 - q_s + dq_s_dt                     &
    80788081                                 * t_surf_green_h(m) - dq_s_dt *               &
    80798082                                   t_surf_green_h_p(m) )
    8080        
    8081                  surf_usm_h%qsws(m) = surf_usm_h%qsws_eb(m) / rho_lv
    80828083       
    80838084                 surf_usm_h%qsws_veg(m)  = - f_qsws_veg  * ( qv1 - q_s                      &
     
    80888089                                     + dq_s_dt * t_surf_green_h(m) - dq_s_dt   &
    80898090                                     * t_surf_green_h_p(m) )
     8091                                     
    80908092              ENDIF
    80918093 
     
    85288530
    85298531                 IF ( humidity )  THEN
    8530                     surf_usm_v(l)%qsws_eb(m)  = - f_qsws * ( qv1 - q_s + dq_s_dt       &
     8532                    surf_usm_v(l)%qsws(m)  = - f_qsws * ( qv1 - q_s + dq_s_dt          &
    85318533                                    * t_surf_green_v(l)%t(m) - dq_s_dt *               &
    85328534                                      t_surf_green_v_p(l)%t(m) )
    85338535         
    8534                     surf_usm_v(l)%qsws(m) = surf_usm_v(l)%qsws_eb(m) / rho_lv
     8536                    surf_usm_v(l)%qsws(m) = surf_usm_v(l)%qsws(m) / l_v
    85358537         
    85368538                    surf_usm_v(l)%qsws_veg(m)  = - f_qsws_veg  * ( qv1 - q_s           &
Note: See TracChangeset for help on using the changeset viewer.