Changeset 4245 for palm/trunk/SOURCE/urban_surface_mod.f90
- Timestamp:
- Sep 30, 2019 8:40:37 AM (5 years ago)
- Location:
- palm/trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk
- Property svn:mergeinfo changed
-
palm/trunk/SOURCE
- Property svn:mergeinfo changed
/palm/branches/resler/SOURCE merged: 4192-4193,4199-4200,4202,4206-4207,4240,4244
- Property svn:mergeinfo changed
-
palm/trunk/SOURCE/urban_surface_mod.f90
r4238 r4245 28 28 ! ----------------- 29 29 ! $Id$ 30 ! Initialize explicit per-surface parameters from building_surface_pars 31 ! 32 ! 4238 2019-09-25 16:06:01Z suehring 30 33 ! Indoor-model parameters for some building types adjusted in order to avoid 31 34 ! unrealistically high indoor temperatures (S. Rissmann) … … 465 468 INTEGER(iwp) :: ind_z0qh_gfl = 37 !< index in input list for z0h / z0q, ground floor level 466 469 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) 468 492 469 493 REAL(wp) :: roof_height_limit = 4.0_wp !< height for distinguish between land surfaces and roofs … … 3437 3461 3438 3462 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 3440 3465 3441 3466 IMPLICIT NONE … … 3477 3502 INTEGER(iwp) :: ind_z0 !< index in input list for z0 3478 3503 INTEGER(iwp) :: ind_z0qh !< index in input list for z0h / z0q 3504 INTEGER(iwp) :: is !< loop index input surface element 3479 3505 INTEGER(iwp) :: j !< loop index y-dirction 3480 3506 INTEGER(iwp) :: k !< loop index z-dirction … … 4705 4731 ENDDO 4706 4732 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 4707 5030 ! 4708 5031 !-- Read the surface_types array.
Note: See TracChangeset
for help on using the changeset viewer.