Ignore:
Timestamp:
Sep 30, 2019 8:40:37 AM (21 months ago)
Author:
pavelkrc
Message:

Merge branch resler into trunk

Location:
palm/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk

  • palm/trunk/SOURCE

  • palm/trunk/SOURCE/urban_surface_mod.f90

    r4238 r4245  
    2828! -----------------
    2929! $Id$
     30! Initialize explicit per-surface parameters from building_surface_pars
     31!
     32! 4238 2019-09-25 16:06:01Z suehring
    3033! Indoor-model parameters for some building types adjusted in order to avoid
    3134! unrealistically high indoor temperatures (S. Rissmann)
     
    465468    INTEGER(iwp) ::  ind_z0qh_gfl          = 37   !< index in input list for z0h / z0q, ground floor level
    466469    INTEGER(iwp) ::  ind_green_type_roof   = 118  !< index in input list for type of green roof
    467 
     470!
     471!-- Indices of input attributes in building_surface_pars (except for
     472!-- radiation-related, which are in radiation_model_mod)
     473    INTEGER(iwp) ::  ind_s_wall_frac                 = 0  !< index for wall fraction (0-1)
     474    INTEGER(iwp) ::  ind_s_win_frac                  = 1  !< index for window fraction (0-1)
     475    INTEGER(iwp) ::  ind_s_green_frac_w              = 2  !< index for green fraction on wall (0-1)
     476    INTEGER(iwp) ::  ind_s_green_frac_r              = 3  !< index for green fraction on roof (0-1)
     477    INTEGER(iwp) ::  ind_s_lai_r                     = 4  !< index for leaf area index of green fraction
     478    INTEGER(iwp) ::  ind_s_hc1                       = 5  !< index for heat capacity of wall layer 1
     479    INTEGER(iwp) ::  ind_s_hc2                       = 6  !< index for heat capacity of wall layer 2
     480    INTEGER(iwp) ::  ind_s_hc3                       = 7  !< index for heat capacity of wall layer 3
     481    INTEGER(iwp) ::  ind_s_tc1                       = 8  !< index for thermal conducivity of wall layer 1
     482    INTEGER(iwp) ::  ind_s_tc2                       = 9  !< index for thermal conducivity of wall layer 2
     483    INTEGER(iwp) ::  ind_s_tc3                       = 10 !< index for thermal conducivity of wall layer 3
     484    INTEGER(iwp) ::  ind_s_indoor_target_temp_summer = 11 !< index for indoor target summer temperature
     485    INTEGER(iwp) ::  ind_s_indoor_target_temp_winter = 12 !< index for indoor target winter temperature
     486    INTEGER(iwp) ::  ind_s_emis_wall                 = 13 !< index for emissivity of wall fraction (0-1)
     487    INTEGER(iwp) ::  ind_s_emis_green                = 14 !< index for emissivity of green fraction (0-1)
     488    INTEGER(iwp) ::  ind_s_emis_win                  = 15 !< index for emissivity o f window fraction (0-1)
     489    INTEGER(iwp) ::  ind_s_trans                     = 16 !< index for transmissivity of window fraction (0-1)
     490    INTEGER(iwp) ::  ind_s_z0                        = 17 !< index for roughness length for momentum (m)
     491    INTEGER(iwp) ::  ind_s_z0qh                      = 18 !< index for roughness length for heat (m)
    468492
    469493    REAL(wp)  ::  roof_height_limit = 4.0_wp         !< height for distinguish between land surfaces and roofs
     
    34373461
    34383462        USE netcdf_data_input_mod,                                             &
    3439             ONLY:  building_pars_f, building_type_f, terrain_height_f
     3463            ONLY:  building_pars_f, building_surface_pars_f, building_type_f,  &
     3464                   terrain_height_f
    34403465   
    34413466        IMPLICIT NONE
     
    34773502        INTEGER(iwp) ::  ind_z0              !< index in input list for z0
    34783503        INTEGER(iwp) ::  ind_z0qh            !< index in input list for z0h / z0q
     3504        INTEGER(iwp) ::  is                  !< loop index input surface element
    34793505        INTEGER(iwp) ::  j                   !< loop index y-dirction
    34803506        INTEGER(iwp) ::  k                   !< loop index z-dirction
     
    47054731           ENDDO
    47064732        ENDIF
     4733!
     4734!--     Read building surface pars. If present, they override LOD1-LOD3 building
     4735!--     pars where applicable
     4736        IF ( building_surface_pars_f%from_file )  THEN
     4737           DO  m = 1, surf_usm_h%ns
     4738              i = surf_usm_h%i(m)
     4739              j = surf_usm_h%j(m)
     4740              k = surf_usm_h%k(m)
     4741!
     4742!--           Iterate over surfaces in column, check height and orientation
     4743              DO  is = building_surface_pars_f%index_ji(1,j,i), &
     4744                       building_surface_pars_f%index_ji(2,j,i)
     4745                 IF ( building_surface_pars_f%coords(4,is) == -surf_usm_h%koff .AND.            &
     4746                      building_surface_pars_f%coords(1,is) == k )  THEN
     4747
     4748                    IF ( building_surface_pars_f%pars(ind_s_wall_frac,is) /=                     &
     4749                         building_surface_pars_f%fill )                                          &
     4750                       surf_usm_h%frac(ind_veg_wall,m) =                                         &
     4751                                building_surface_pars_f%pars(ind_s_wall_frac,is)
     4752
     4753                    IF ( building_surface_pars_f%pars(ind_s_green_frac_w,is) /=                  &
     4754                         building_surface_pars_f%fill )                                          &
     4755                       surf_usm_h%frac(ind_pav_green,m) =                                        &
     4756                                building_surface_pars_f%pars(ind_s_green_frac_w,is)
     4757
     4758                    IF ( building_surface_pars_f%pars(ind_s_green_frac_r,is) /=                  &
     4759                         building_surface_pars_f%fill )                                          &
     4760                       surf_usm_h%frac(ind_pav_green,m) =                                        &
     4761                                building_surface_pars_f%pars(ind_s_green_frac_r,is)
     4762                                !TODO clarify: why should _w and _r be on the same surface?
     4763
     4764                    IF ( building_surface_pars_f%pars(ind_s_win_frac,is) /=                      &
     4765                         building_surface_pars_f%fill )                                          &
     4766                       surf_usm_h%frac(ind_wat_win,m) =                                          &
     4767                                building_surface_pars_f%pars(ind_s_win_frac,is)
     4768
     4769                    IF ( building_surface_pars_f%pars(ind_s_lai_r,is) /=                         &
     4770                         building_surface_pars_f%fill )                                          &
     4771                       surf_usm_h%lai(m) =                                                       &
     4772                                building_surface_pars_f%pars(ind_s_lai_r,is)
     4773
     4774                    IF ( building_surface_pars_f%pars(ind_s_hc1,is) /=                           &
     4775                         building_surface_pars_f%fill )  THEN
     4776                       surf_usm_h%rho_c_wall(nzb_wall:nzb_wall+1,m) =                            &
     4777                                building_surface_pars_f%pars(ind_s_hc1,is)
     4778                       surf_usm_h%rho_c_green(nzb_wall:nzb_wall+1,m) =                           &
     4779                                building_surface_pars_f%pars(ind_s_hc1,is)
     4780                       surf_usm_h%rho_c_window(nzb_wall:nzb_wall+1,m) =                          &
     4781                                building_surface_pars_f%pars(ind_s_hc1,is)
     4782                    ENDIF
     4783
     4784                    IF ( building_surface_pars_f%pars(ind_s_hc2,is) /=                           &
     4785                         building_surface_pars_f%fill )  THEN
     4786                       surf_usm_h%rho_c_wall(nzb_wall+2,m) =                                     &
     4787                                building_surface_pars_f%pars(ind_s_hc2,is)
     4788                       surf_usm_h%rho_c_green(nzb_wall+2,m) =                                    &
     4789                                building_surface_pars_f%pars(ind_s_hc2,is)
     4790                       surf_usm_h%rho_c_window(nzb_wall+2,m) =                                   &
     4791                                building_surface_pars_f%pars(ind_s_hc2,is)
     4792                    ENDIF
     4793
     4794                    IF ( building_surface_pars_f%pars(ind_s_hc3,is) /=                           &
     4795                         building_surface_pars_f%fill )  THEN
     4796                       surf_usm_h%rho_c_wall(nzb_wall+3,m) =                                     &
     4797                                building_surface_pars_f%pars(ind_s_hc3,is)
     4798                       surf_usm_h%rho_c_green(nzb_wall+3,m) =                                    &
     4799                                building_surface_pars_f%pars(ind_s_hc3,is)
     4800                       surf_usm_h%rho_c_window(nzb_wall+3,m) =                                   &
     4801                                building_surface_pars_f%pars(ind_s_hc3,is)
     4802                    ENDIF
     4803
     4804                    IF ( building_surface_pars_f%pars(ind_s_tc1,is) /=                           &
     4805                         building_surface_pars_f%fill )  THEN
     4806                       surf_usm_h%lambda_h(nzb_wall:nzb_wall+1,m) =                              &
     4807                                building_surface_pars_f%pars(ind_s_tc1,is)
     4808                       surf_usm_h%lambda_h_green(nzb_wall:nzb_wall+1,m) =                        &
     4809                                building_surface_pars_f%pars(ind_s_tc1,is)
     4810                       surf_usm_h%lambda_h_window(nzb_wall:nzb_wall+1,m) =                       &
     4811                                building_surface_pars_f%pars(ind_s_tc1,is)
     4812                    ENDIF
     4813
     4814                    IF ( building_surface_pars_f%pars(ind_s_tc2,is) /=                           &
     4815                         building_surface_pars_f%fill )  THEN
     4816                       surf_usm_h%lambda_h(nzb_wall+2,m) =                                       &
     4817                                building_surface_pars_f%pars(ind_s_tc2,is)
     4818                       surf_usm_h%lambda_h_green(nzb_wall+2,m) =                                 &
     4819                                building_surface_pars_f%pars(ind_s_tc2,is)
     4820                       surf_usm_h%lambda_h_window(nzb_wall+2,m) =                                &
     4821                                building_surface_pars_f%pars(ind_s_tc2,is)
     4822                    ENDIF
     4823
     4824                    IF ( building_surface_pars_f%pars(ind_s_tc3,is) /=                           &
     4825                         building_surface_pars_f%fill )  THEN
     4826                       surf_usm_h%lambda_h(nzb_wall+3,m) =                                       &
     4827                                building_surface_pars_f%pars(ind_s_tc3,is)
     4828                       surf_usm_h%lambda_h_green(nzb_wall+3,m) =                                 &
     4829                                building_surface_pars_f%pars(ind_s_tc3,is)
     4830                       surf_usm_h%lambda_h_window(nzb_wall+3,m) =                                &
     4831                                building_surface_pars_f%pars(ind_s_tc3,is)
     4832                    ENDIF
     4833
     4834                    IF ( building_surface_pars_f%pars(ind_s_indoor_target_temp_summer,is) /=     &
     4835                         building_surface_pars_f%fill )                                          &
     4836                       surf_usm_h%target_temp_summer(m) =                                        &
     4837                                building_surface_pars_f%pars(ind_s_indoor_target_temp_summer,is)
     4838
     4839                    IF ( building_surface_pars_f%pars(ind_s_indoor_target_temp_winter,is) /=     &
     4840                         building_surface_pars_f%fill )                                          &
     4841                       surf_usm_h%target_temp_winter(m) =                                        &
     4842                                building_surface_pars_f%pars(ind_s_indoor_target_temp_winter,is)
     4843
     4844                    IF ( building_surface_pars_f%pars(ind_s_emis_wall,is) /=                     &
     4845                         building_surface_pars_f%fill )                                          &
     4846                       surf_usm_h%emissivity(ind_veg_wall,m) =                                   &
     4847                                building_surface_pars_f%pars(ind_s_emis_wall,is)
     4848
     4849                    IF ( building_surface_pars_f%pars(ind_s_emis_green,is) /=                    &
     4850                         building_surface_pars_f%fill )                                          &
     4851                       surf_usm_h%emissivity(ind_pav_green,m) =                                  &
     4852                                building_surface_pars_f%pars(ind_s_emis_green,is)
     4853
     4854                    IF ( building_surface_pars_f%pars(ind_s_emis_win,is) /=                      &
     4855                         building_surface_pars_f%fill )                                          &
     4856                       surf_usm_h%emissivity(ind_wat_win,m) =                                    &
     4857                                building_surface_pars_f%pars(ind_s_emis_win,is)
     4858
     4859                    IF ( building_surface_pars_f%pars(ind_s_trans,is) /=                         &
     4860                         building_surface_pars_f%fill )                                          &
     4861                       surf_usm_h%transmissivity(m) =                                            &
     4862                                building_surface_pars_f%pars(ind_s_trans,is)
     4863
     4864                    IF ( building_surface_pars_f%pars(ind_s_z0,is) /=                            &
     4865                         building_surface_pars_f%fill )                                          &
     4866                       surf_usm_h%z0(m) =                                                        &
     4867                                building_surface_pars_f%pars(ind_s_z0,is)
     4868
     4869                    IF ( building_surface_pars_f%pars(ind_s_z0qh,is) /=                          &
     4870                         building_surface_pars_f%fill )  THEN
     4871                       surf_usm_h%z0q(m) =                                                       &
     4872                                building_surface_pars_f%pars(ind_s_z0qh,is)
     4873                       surf_usm_h%z0h(m) =                                                       &
     4874                                building_surface_pars_f%pars(ind_s_z0qh,is)
     4875                    ENDIF
     4876
     4877                    EXIT ! surface was found and processed
     4878                 ENDIF
     4879              ENDDO
     4880           ENDDO
     4881
     4882           DO  l = 0, 3
     4883              DO  m = 1, surf_usm_v(l)%ns
     4884                 i = surf_usm_v(l)%i(m)
     4885                 j = surf_usm_v(l)%j(m)
     4886                 k = surf_usm_v(l)%k(m)
     4887!
     4888!--              Iterate over surfaces in column, check height and orientation
     4889                 DO  is = building_surface_pars_f%index_ji(1,j,i), &
     4890                          building_surface_pars_f%index_ji(2,j,i)
     4891                    IF ( building_surface_pars_f%coords(5,is) == -surf_usm_v(l)%joff .AND.    &
     4892                         building_surface_pars_f%coords(6,is) == -surf_usm_v(l)%ioff .AND.    &
     4893                         building_surface_pars_f%coords(1,is) == k )  THEN
     4894
     4895                       IF ( building_surface_pars_f%pars(ind_s_wall_frac,is) /=                &
     4896                            building_surface_pars_f%fill )                                     &
     4897                          surf_usm_v(l)%frac(ind_veg_wall,m) =                                 &
     4898                                   building_surface_pars_f%pars(ind_s_wall_frac,is)
     4899
     4900                       IF ( building_surface_pars_f%pars(ind_s_green_frac_w,is) /=             &
     4901                            building_surface_pars_f%fill )                                     &
     4902                          surf_usm_v(l)%frac(ind_pav_green,m) =                                &
     4903                                   building_surface_pars_f%pars(ind_s_green_frac_w,is)
     4904
     4905                       IF ( building_surface_pars_f%pars(ind_s_green_frac_r,is) /=             &
     4906                            building_surface_pars_f%fill )                                     &
     4907                          surf_usm_v(l)%frac(ind_pav_green,m) =                                &
     4908                                   building_surface_pars_f%pars(ind_s_green_frac_r,is)
     4909                                   !TODO clarify: why should _w and _r be on the same surface?
     4910
     4911                       IF ( building_surface_pars_f%pars(ind_s_win_frac,is) /=                 &
     4912                            building_surface_pars_f%fill )                                     &
     4913                          surf_usm_v(l)%frac(ind_wat_win,m) =                                  &
     4914                                   building_surface_pars_f%pars(ind_s_win_frac,is)
     4915
     4916                       IF ( building_surface_pars_f%pars(ind_s_lai_r,is) /=                    &
     4917                            building_surface_pars_f%fill )                                     &
     4918                          surf_usm_v(l)%lai(m) =                                               &
     4919                                   building_surface_pars_f%pars(ind_s_lai_r,is)
     4920
     4921                       IF ( building_surface_pars_f%pars(ind_s_hc1,is) /=                      &
     4922                            building_surface_pars_f%fill )  THEN
     4923                          surf_usm_v(l)%rho_c_wall(nzb_wall:nzb_wall+1,m) =                    &
     4924                                   building_surface_pars_f%pars(ind_s_hc1,is)
     4925                          surf_usm_v(l)%rho_c_green(nzb_wall:nzb_wall+1,m) =                   &
     4926                                   building_surface_pars_f%pars(ind_s_hc1,is)
     4927                          surf_usm_v(l)%rho_c_window(nzb_wall:nzb_wall+1,m) =                  &
     4928                                   building_surface_pars_f%pars(ind_s_hc1,is)
     4929                       ENDIF
     4930
     4931                       IF ( building_surface_pars_f%pars(ind_s_hc2,is) /=                      &
     4932                            building_surface_pars_f%fill )  THEN
     4933                          surf_usm_v(l)%rho_c_wall(nzb_wall+2,m) =                             &
     4934                                   building_surface_pars_f%pars(ind_s_hc2,is)
     4935                          surf_usm_v(l)%rho_c_green(nzb_wall+2,m) =                            &
     4936                                   building_surface_pars_f%pars(ind_s_hc2,is)
     4937                          surf_usm_v(l)%rho_c_window(nzb_wall+2,m) =                           &
     4938                                   building_surface_pars_f%pars(ind_s_hc2,is)
     4939                       ENDIF
     4940
     4941                       IF ( building_surface_pars_f%pars(ind_s_hc3,is) /=                      &
     4942                            building_surface_pars_f%fill )  THEN
     4943                          surf_usm_v(l)%rho_c_wall(nzb_wall+3,m) =                             &
     4944                                   building_surface_pars_f%pars(ind_s_hc3,is)
     4945                          surf_usm_v(l)%rho_c_green(nzb_wall+3,m) =                            &
     4946                                   building_surface_pars_f%pars(ind_s_hc3,is)
     4947                          surf_usm_v(l)%rho_c_window(nzb_wall+3,m) =                           &
     4948                                   building_surface_pars_f%pars(ind_s_hc3,is)
     4949                       ENDIF
     4950
     4951                       IF ( building_surface_pars_f%pars(ind_s_tc1,is) /=                      &
     4952                            building_surface_pars_f%fill )  THEN
     4953                          surf_usm_v(l)%lambda_h(nzb_wall:nzb_wall+1,m) =                      &
     4954                                   building_surface_pars_f%pars(ind_s_tc1,is)
     4955                          surf_usm_v(l)%lambda_h_green(nzb_wall:nzb_wall+1,m) =                &
     4956                                   building_surface_pars_f%pars(ind_s_tc1,is)
     4957                          surf_usm_v(l)%lambda_h_window(nzb_wall:nzb_wall+1,m) =               &
     4958                                   building_surface_pars_f%pars(ind_s_tc1,is)
     4959                       ENDIF
     4960
     4961                       IF ( building_surface_pars_f%pars(ind_s_tc2,is) /=                      &
     4962                            building_surface_pars_f%fill )  THEN
     4963                          surf_usm_v(l)%lambda_h(nzb_wall+2,m) =                               &
     4964                                   building_surface_pars_f%pars(ind_s_tc2,is)
     4965                          surf_usm_v(l)%lambda_h_green(nzb_wall+2,m) =                         &
     4966                                   building_surface_pars_f%pars(ind_s_tc2,is)
     4967                          surf_usm_v(l)%lambda_h_window(nzb_wall+2,m) =                        &
     4968                                   building_surface_pars_f%pars(ind_s_tc2,is)
     4969                       ENDIF
     4970
     4971                       IF ( building_surface_pars_f%pars(ind_s_tc3,is) /=                      &
     4972                            building_surface_pars_f%fill )  THEN
     4973                          surf_usm_v(l)%lambda_h(nzb_wall+3,m) =                               &
     4974                                   building_surface_pars_f%pars(ind_s_tc3,is)
     4975                          surf_usm_v(l)%lambda_h_green(nzb_wall+3,m) =                         &
     4976                                   building_surface_pars_f%pars(ind_s_tc3,is)
     4977                          surf_usm_v(l)%lambda_h_window(nzb_wall+3,m) =                        &
     4978                                   building_surface_pars_f%pars(ind_s_tc3,is)
     4979                       ENDIF
     4980
     4981                       IF ( building_surface_pars_f%pars(ind_s_indoor_target_temp_summer,is) /=    &
     4982                            building_surface_pars_f%fill )                                         &
     4983                          surf_usm_v(l)%target_temp_summer(m) =                                    &
     4984                                   building_surface_pars_f%pars(ind_s_indoor_target_temp_summer,is)
     4985
     4986                       IF ( building_surface_pars_f%pars(ind_s_indoor_target_temp_winter,is) /=    &
     4987                            building_surface_pars_f%fill )                                         &
     4988                          surf_usm_v(l)%target_temp_winter(m) =                                    &
     4989                                   building_surface_pars_f%pars(ind_s_indoor_target_temp_winter,is)
     4990
     4991                       IF ( building_surface_pars_f%pars(ind_s_emis_wall,is) /=      &
     4992                            building_surface_pars_f%fill )                           &
     4993                          surf_usm_v(l)%emissivity(ind_veg_wall,m) =                 &
     4994                                   building_surface_pars_f%pars(ind_s_emis_wall,is)
     4995
     4996                       IF ( building_surface_pars_f%pars(ind_s_emis_green,is) /=     &
     4997                            building_surface_pars_f%fill )                           &
     4998                          surf_usm_v(l)%emissivity(ind_pav_green,m) =                &
     4999                                   building_surface_pars_f%pars(ind_s_emis_green,is)
     5000
     5001                       IF ( building_surface_pars_f%pars(ind_s_emis_win,is) /=       &
     5002                            building_surface_pars_f%fill )                           &
     5003                          surf_usm_v(l)%emissivity(ind_wat_win,m) =                  &
     5004                                   building_surface_pars_f%pars(ind_s_emis_win,is)
     5005
     5006                       IF ( building_surface_pars_f%pars(ind_s_trans,is) /=          &
     5007                            building_surface_pars_f%fill )                           &
     5008                          surf_usm_v(l)%transmissivity(m) =                          &
     5009                                   building_surface_pars_f%pars(ind_s_trans,is)
     5010
     5011                       IF ( building_surface_pars_f%pars(ind_s_z0,is) /=             &
     5012                            building_surface_pars_f%fill )                           &
     5013                          surf_usm_v(l)%z0(m) =                                      &
     5014                                   building_surface_pars_f%pars(ind_s_z0,is)
     5015
     5016                       IF ( building_surface_pars_f%pars(ind_s_z0qh,is) /=           &
     5017                            building_surface_pars_f%fill )  THEN
     5018                          surf_usm_v(l)%z0q(m) =                                     &
     5019                                   building_surface_pars_f%pars(ind_s_z0qh,is)
     5020                          surf_usm_v(l)%z0h(m) =                                     &
     5021                                   building_surface_pars_f%pars(ind_s_z0qh,is)
     5022                       ENDIF
     5023
     5024                       EXIT ! surface was found and processed
     5025                    ENDIF
     5026                 ENDDO
     5027              ENDDO
     5028           ENDDO
     5029        ENDIF
    47075030!       
    47085031!--     Read the surface_types array.
Note: See TracChangeset for help on using the changeset viewer.