Ignore:
Timestamp:
Jul 14, 2020 2:49:45 PM (4 years ago)
Author:
suehring
Message:

Bugfix in level 3 initialization of pavements - wrongly assumed existence of pavement_subsurface_pars; Add missing initialization of albedo type with values given from static input file (so far albedo type was only initialized via the values given in the *_pars lists)

File:
1 edited

Legend:

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

    r4581 r4602  
    2020! Current revisions:
    2121! -----------------
    22 ! 
    23 ! 
     22!
     23!
    2424! Former revisions:
    2525! -----------------
    2626! $Id$
     27! - Bugfix in level 3 initialization of pavements - wrongly assumed existence of
     28!   pavement_subsurface_pars
     29! - Add missing initialization of albedo type with values given from static input
     30!   file
     31!
     32! 4581 2020-06-29 08:49:58Z suehring
    2733! Minor formatting of error message
    2834!
     
    264270
    265271    USE netcdf_data_input_mod,                                                 &
    266         ONLY :  building_type_f,                                               &
     272        ONLY :  albedo_type_f,                                                 &
     273                building_type_f,                                               &
    267274                char_fill,                                                     &
    268275                char_lod,                                                      &
     
    40364043                   surf_lsm_h%z0q(m) = pavement_pars_f%pars_xy(ind_p_z0h,j,i)
    40374044                ENDIF
     4045                IF ( pavement_pars_f%pars_xy(ind_p_at,j,i) /=                  &
     4046                     pavement_pars_f%fill )                                    &
     4047                   surf_lsm_h%albedo_type(m,ind_pav_green) =                   &
     4048                                   INT( pavement_pars_f%pars_xy(ind_p_at,j,i) )
     4049                IF ( pavement_pars_f%pars_xy(ind_p_emis,j,i) /=                &
     4050                     pavement_pars_f%fill )                                    &
     4051                   surf_lsm_h%emissivity(m,ind_pav_green)  =                   &
     4052                                   pavement_pars_f%pars_xy(ind_p_emis,j,i)
     4053             ENDIF
     4054
     4055          ENDDO
     4056!
     4057!--       Vertical surfaces
     4058          DO  l = 0, 3
     4059             DO  m = 1, surf_lsm_v(l)%ns
     4060                i = surf_lsm_v(l)%i(m) + MERGE( 0, surf_lsm_v(l)%ioff,         &
     4061                                                surf_lsm_v(l)%building_covered(m) )
     4062                j = surf_lsm_v(l)%j(m) + MERGE( 0, surf_lsm_v(l)%joff,         &
     4063                                                surf_lsm_v(l)%building_covered(m) )
     4064!
     4065!--             If surface element is not a pavement surface and any value in
     4066!--             pavement_pars is given, neglect this information and give an
     4067!--             informative message that this value will not be used.
     4068                IF ( .NOT. surf_lsm_v(l)%pavement_surface(m)  .AND.            &
     4069                      ANY( pavement_pars_f%pars_xy(:,j,i) /=                   &
     4070                      pavement_pars_f%fill ) )  THEN
     4071                   WRITE( message_string, * )                                  &
     4072                                 'surface element at grid point (j,i) = (',    &
     4073                                 j, i, ') is not a pavement surface, ',        &
     4074                                 'so that information given in ',              &
     4075                                 'pavement_pars at this point is neglected.'
     4076                   CALL message( 'land_surface_model_mod', 'PA0647', 0, 0, myid, 6, 0 )
     4077                ELSE
     4078                   IF ( pavement_pars_f%pars_xy(ind_p_z0,j,i) /=               &
     4079                        pavement_pars_f%fill )                                 &
     4080                      surf_lsm_v(l)%z0(m) = pavement_pars_f%pars_xy(ind_p_z0,j,i)
     4081                   IF ( pavement_pars_f%pars_xy(ind_p_z0h,j,i) /=              &
     4082                        pavement_pars_f%fill )  THEN
     4083                      surf_lsm_v(l)%z0h(m) = pavement_pars_f%pars_xy(ind_p_z0h,j,i)
     4084                      surf_lsm_v(l)%z0q(m) = pavement_pars_f%pars_xy(ind_p_z0h,j,i)
     4085                   ENDIF
     4086                   IF ( pavement_pars_f%pars_xy(ind_p_at,j,i) /=               &
     4087                        pavement_pars_f%fill )                                 &
     4088                      surf_lsm_v(l)%albedo_type(m,ind_pav_green) =             &
     4089                                   INT( pavement_pars_f%pars_xy(ind_p_at,j,i) )
     4090
     4091                   IF ( pavement_pars_f%pars_xy(ind_p_emis,j,i) /=             &
     4092                        pavement_pars_f%fill )                                 &
     4093                      surf_lsm_v(l)%emissivity(m,ind_pav_green)  =             &
     4094                                   pavement_pars_f%pars_xy(ind_p_emis,j,i)
     4095                ENDIF
     4096             ENDDO
     4097          ENDDO
     4098       ENDIF
     4099!
     4100!--    Moreover, for grid points which are flagged with pavement-type 0 or whre
     4101!--    pavement_subsurface_pars_f is provided, soil heat conductivity and
     4102!--    capacity are initialized with parameters given in
     4103!--    pavement_subsurface_pars read from file.
     4104       IF ( pavement_subsurface_pars_f%from_file )  THEN
     4105!
     4106!--       Set pavement depth to nzt_soil. Please note, this is just a
     4107!--       workaround at the moment.
     4108          DO  m = 1, surf_lsm_h%ns
     4109             IF ( surf_lsm_h%pavement_surface(m) )  THEN
     4110
     4111                i = surf_lsm_h%i(m)
     4112                j = surf_lsm_h%j(m)
     4113
     4114                surf_lsm_h%nzt_pavement(m) = nzt_soil
     4115
    40384116                IF ( pavement_subsurface_pars_f%pars_xyz(ind_p_lambda_h,0,j,i) &
    40394117                     /= pavement_subsurface_pars_f%fill )  THEN
     
    40544132                                                  * 0.25_wp
    40554133                ENDIF
    4056                 IF ( pavement_pars_f%pars_xy(ind_p_at,j,i) /=                  &
    4057                      pavement_pars_f%fill )                                    &
    4058                    surf_lsm_h%albedo_type(m,ind_pav_green) =                   &
    4059                                    INT( pavement_pars_f%pars_xy(ind_p_at,j,i) )
    4060                 IF ( pavement_pars_f%pars_xy(ind_p_emis,j,i) /=                &
    4061                      pavement_pars_f%fill )                                    &
    4062                    surf_lsm_h%emissivity(m,ind_pav_green)  =                   &
    4063                                    pavement_pars_f%pars_xy(ind_p_emis,j,i)
    4064              ENDIF
    4065 
    4066           ENDDO
    4067 !
    4068 !--       Vertical surfaces
    4069           DO  l = 0, 3
    4070              DO  m = 1, surf_lsm_v(l)%ns
    4071                 i = surf_lsm_v(l)%i(m) + MERGE( 0, surf_lsm_v(l)%ioff,         &
    4072                                                 surf_lsm_v(l)%building_covered(m) )
    4073                 j = surf_lsm_v(l)%j(m) + MERGE( 0, surf_lsm_v(l)%joff,         &
    4074                                                 surf_lsm_v(l)%building_covered(m) )
    4075 !
    4076 !--             If surface element is not a pavement surface and any value in
    4077 !--             pavement_pars is given, neglect this information and give an
    4078 !--             informative message that this value will not be used.
    4079                 IF ( .NOT. surf_lsm_v(l)%pavement_surface(m)  .AND.            &
    4080                       ANY( pavement_pars_f%pars_xy(:,j,i) /=                   &
    4081                       pavement_pars_f%fill ) )  THEN
    4082                    WRITE( message_string, * )                                  &
    4083                                  'surface element at grid point (j,i) = (',    &
    4084                                  j, i, ') is not a pavement surface, ',        &
    4085                                  'so that information given in ',              &
    4086                                  'pavement_pars at this point is neglected.'
    4087                    CALL message( 'land_surface_model_mod', 'PA0647', 0, 0, myid, 6, 0 )
    4088                 ELSE
    4089 
    4090                    IF ( pavement_pars_f%pars_xy(ind_p_z0,j,i) /=               &
    4091                         pavement_pars_f%fill )                                 &
    4092                       surf_lsm_v(l)%z0(m) = pavement_pars_f%pars_xy(ind_p_z0,j,i)
    4093                    IF ( pavement_pars_f%pars_xy(ind_p_z0h,j,i) /=              &
    4094                         pavement_pars_f%fill )  THEN
    4095                       surf_lsm_v(l)%z0h(m) = pavement_pars_f%pars_xy(ind_p_z0h,j,i)
    4096                       surf_lsm_v(l)%z0q(m) = pavement_pars_f%pars_xy(ind_p_z0h,j,i)
     4134
     4135                DO  k = nzb_soil, nzt_soil
     4136                   IF ( pavement_subsurface_pars_f%pars_xyz(ind_p_lambda_h,k,j,i) /= &
     4137                        pavement_subsurface_pars_f%fill )  THEN
     4138                      surf_lsm_h%lambda_h_def(k,m) =                              &
     4139                          pavement_subsurface_pars_f%pars_xyz(ind_p_lambda_h,k,j,i)
    40974140                   ENDIF
    4098                    IF ( pavement_subsurface_pars_f%pars_xyz(ind_p_lambda_h,0,j,i)&
    4099                         /= pavement_subsurface_pars_f%fill )  THEN
    4100                       surf_lsm_v(l)%lambda_surface_s(m) =                      &
    4101                       pavement_subsurface_pars_f%pars_xyz(ind_p_lambda_h,0,j,i)&
    4102                                                   * ddz_soil(nzb_soil)         &
    4103                                                   * 2.0_wp
    4104                       surf_lsm_v(l)%lambda_surface_u(m) =                      &
    4105                       pavement_subsurface_pars_f%pars_xyz(ind_p_lambda_h,0,j,i)&
    4106                                                   * ddz_soil(nzb_soil)         &
    4107                                                   * 2.0_wp
     4141                   IF ( pavement_subsurface_pars_f%pars_xyz(ind_p_rho_c,k,j,i) /= &
     4142                        pavement_subsurface_pars_f%fill )  THEN
     4143                      surf_lsm_h%rho_c_total_def(k,m) =                           &
     4144                          pavement_subsurface_pars_f%pars_xyz(ind_p_rho_c,k,j,i)
    41084145                   ENDIF
    4109                    IF ( pavement_subsurface_pars_f%pars_xyz(ind_p_rho_c,0,j,i) &
    4110                         /= pavement_subsurface_pars_f%fill )  THEN
    4111                       surf_lsm_v(l)%c_surface(m)    =                          &
    4112                          pavement_subsurface_pars_f%pars_xyz(ind_p_rho_c,0,j,i)&
    4113                                                   * dz_soil(nzb_soil)          &
    4114                                                   * 0.25_wp
    4115                    ENDIF
    4116                    IF ( pavement_pars_f%pars_xy(ind_p_at,j,i) /=               &
    4117                         pavement_pars_f%fill )                                 &
    4118                       surf_lsm_v(l)%albedo_type(m,ind_pav_green) =             &
    4119                                    INT( pavement_pars_f%pars_xy(ind_p_at,j,i) )
    4120 
    4121                    IF ( pavement_pars_f%pars_xy(ind_p_emis,j,i) /=             &
    4122                         pavement_pars_f%fill )                                 &
    4123                       surf_lsm_v(l)%emissivity(m,ind_pav_green)  =             &
    4124                                    pavement_pars_f%pars_xy(ind_p_emis,j,i)
    4125                 ENDIF
    4126              ENDDO
    4127           ENDDO
    4128        ENDIF
    4129 !
    4130 !--    Moreover, for grid points which are flagged with pavement-type 0 or whre
    4131 !--    pavement_subsurface_pars_f is provided, soil heat conductivity and
    4132 !--    capacity are initialized with parameters given in
    4133 !--    pavement_subsurface_pars read from file.
    4134        IF ( pavement_subsurface_pars_f%from_file )  THEN
    4135 !
    4136 !--       Set pavement depth to nzt_soil. Please note, this is just a
    4137 !--       workaround at the moment.
    4138           DO  m = 1, surf_lsm_h%ns
    4139              IF ( surf_lsm_h%pavement_surface(m) )  THEN
    4140 
    4141                 i = surf_lsm_h%i(m)
    4142                 j = surf_lsm_h%j(m)
    4143 
    4144                 surf_lsm_h%nzt_pavement(m) = nzt_soil
    4145 
    4146                 DO  k = nzb_soil, nzt_soil
    4147                    surf_lsm_h%lambda_h_def(k,m) =                              &
    4148                        pavement_subsurface_pars_f%pars_xyz(ind_p_lambda_h,k,j,i)
    4149                    surf_lsm_h%rho_c_total_def(k,m) =                           &
    4150                        pavement_subsurface_pars_f%pars_xyz(ind_p_rho_c,k,j,i)
    41514146                ENDDO
    41524147
     
    41644159                   surf_lsm_v(l)%nzt_pavement(m) = nzt_soil
    41654160
     4161                   IF ( pavement_subsurface_pars_f%pars_xyz(ind_p_lambda_h,0,j,i)                  &
     4162                        /= pavement_subsurface_pars_f%fill )  THEN
     4163                      surf_lsm_v(l)%lambda_surface_s(m) =                                          &
     4164                      pavement_subsurface_pars_f%pars_xyz(ind_p_lambda_h,0,j,i)                    &
     4165                                                  * ddz_soil(nzb_soil)                             &
     4166                                                  * 2.0_wp
     4167                      surf_lsm_v(l)%lambda_surface_u(m) =                                          &
     4168                      pavement_subsurface_pars_f%pars_xyz(ind_p_lambda_h,0,j,i)                    &
     4169                                                  * ddz_soil(nzb_soil)                             &
     4170                                                  * 2.0_wp
     4171                   ENDIF
     4172                   IF ( pavement_subsurface_pars_f%pars_xyz(ind_p_rho_c,0,j,i)                     &
     4173                        /= pavement_subsurface_pars_f%fill )  THEN
     4174                      surf_lsm_v(l)%c_surface(m)    =                                              &
     4175                         pavement_subsurface_pars_f%pars_xyz(ind_p_rho_c,0,j,i)                    &
     4176                                                  * dz_soil(nzb_soil)                              &
     4177                                                  * 0.25_wp
     4178                   ENDIF
     4179
    41664180                   DO  k = nzb_soil, nzt_soil
    4167                       surf_lsm_v(l)%lambda_h_def(k,m) =                        &
    4168                        pavement_subsurface_pars_f%pars_xyz(ind_p_lambda_h,k,j,i)
    4169                       surf_lsm_v(l)%rho_c_total_def(k,m) =                     &
    4170                        pavement_subsurface_pars_f%pars_xyz(ind_p_rho_c,k,j,i)
     4181                      IF ( pavement_subsurface_pars_f%pars_xyz(ind_p_lambda_h,0,j,i)               &
     4182                           /= pavement_subsurface_pars_f%fill )  THEN
     4183                         surf_lsm_v(l)%lambda_h_def(k,m) =                                         &
     4184                            pavement_subsurface_pars_f%pars_xyz(ind_p_lambda_h,k,j,i)
     4185                      ENDIF
     4186                      IF ( pavement_subsurface_pars_f%pars_xyz(ind_p_rho_c,0,j,i)                  &
     4187                           /= pavement_subsurface_pars_f%fill )  THEN
     4188                         surf_lsm_v(l)%rho_c_total_def(k,m) =                                      &
     4189                            pavement_subsurface_pars_f%pars_xyz(ind_p_rho_c,k,j,i)
     4190                      ENDIF
    41714191                   ENDDO
    41724192
     
    41754195          ENDDO
    41764196       ENDIF
    4177 
     4197!
     4198!--    Initialize albedo type via given type from static input file. Please note, even though
     4199!--    the albedo type has been already given by the pars, albedo_type overwrites these values.
     4200       IF ( albedo_type_f%from_file )  THEN
     4201          DO  m = 1, surf_lsm_h%ns
     4202             i = surf_lsm_h%i(m)
     4203             j = surf_lsm_h%j(m)
     4204             IF ( albedo_type_f%var(j,i) /= albedo_type_f%fill )                                   &
     4205                surf_lsm_h%albedo_type(m,:) = albedo_type_f%var(j,i)
     4206          ENDDO
     4207          DO  l = 0, 3
     4208             DO  m = 1, surf_lsm_v(l)%ns
     4209                i = surf_lsm_v(l)%i(m) + MERGE( 0, surf_lsm_v(l)%ioff,                             &
     4210                                                surf_lsm_v(l)%building_covered(m) )
     4211                j = surf_lsm_v(l)%j(m) + MERGE( 0, surf_lsm_v(l)%joff,                             &
     4212                                                surf_lsm_v(l)%building_covered(m) )
     4213                IF ( albedo_type_f%var(j,i) /= albedo_type_f%fill )                                &
     4214                   surf_lsm_v(l)%albedo_type(m,:) = albedo_type_f%var(j,i)
     4215             ENDDO
     4216          ENDDO
     4217       ENDIF
    41784218!
    41794219!--    Initial run actions
Note: See TracChangeset for help on using the changeset viewer.