Changeset 4245 for palm/trunk
- Timestamp:
- Sep 30, 2019 8:40:37 AM (5 years ago)
- Location:
- palm/trunk
- Files:
-
- 15 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/Makefile
- Property svn:mergeinfo changed
/palm/branches/resler/SOURCE/Makefile merged: 4192,4244
r4227 r4245 25 25 # ----------------- 26 26 # $Id$ 27 # Remove no longer needed dependencies on surface_mod 28 # 29 # 4227 2019-09-10 18:04:34Z gronemeier 27 30 # Add palm_date_time_mod, remove date_and_time_mod 28 31 # - Property svn:mergeinfo changed
-
palm/trunk/SOURCE/biometeorology_mod.f90
- Property svn:mergeinfo
-
old new 6 6 /palm/branches/palm4u/SOURCE/biometeorology_mod.f90:2540-2692 7 7 /palm/branches/rans/SOURCE/biometeorology_mod.f90:2078-3128 8 /palm/branches/resler/SOURCE/biometeorology_mod.f90:2023- 3320,3337-34748 /palm/branches/resler/SOURCE/biometeorology_mod.f90:2023-4244 9 9 /palm/branches/salsa/SOURCE/biometeorology_mod.f90:2503-3581 10 10 /palm/branches/suehring/biometeorology_mod.f90:423-666 11 /palm/trunk/SOURCE/biometeorology_mod.f90:2 503-333611 /palm/trunk/SOURCE/biometeorology_mod.f90:2023-3336
-
- Property svn:mergeinfo
-
palm/trunk/SOURCE/check_parameters.f90
-
palm/trunk/SOURCE/indoor_model_mod.f90
r4242 r4245 26 26 ! ----------------- 27 27 ! $Id$ 28 ! 29 ! 30 ! 4242 2019-09-27 12:59:10Z suehring 28 31 ! Bugfix in array index 29 32 ! -
palm/trunk/SOURCE/init_3d_model.f90
- Property svn:mergeinfo changed
/palm/branches/resler/SOURCE/init_3d_model.f90 merged: 3617,3686,3713,3751,3777,3852,3892,3902,3940,3989,4025,4052,4092,4135,4152,4192,4244
- Property svn:mergeinfo changed
-
palm/trunk/SOURCE/init_grid.f90
r4189 r4245 25 25 ! ----------------- 26 26 ! $Id$ 27 ! Store oro_max (building z-offset) in 2D for building surfaces 28 ! 29 ! 4189 2019-08-26 16:19:38Z suehring 27 30 ! - Add check for proper setting of namelist parameter topography 28 31 ! - Set flag to indicate land surfaces in case no topography is provided … … 1312 1315 ENDIF 1313 1316 ! 1317 !-- Allocate array for storing terrain height under buildings 1318 IF ( buildings_f%from_file ) THEN 1319 ALLOCATE( buildings_f%oro_max(nysg:nyng,nxlg:nxrg) ) 1320 buildings_f%oro_max = buildings_f%fill1 1321 END IF 1322 ! 1314 1323 !-- Map orography as well as buildings onto grid. 1315 1324 DO i = nxl, nxr … … 1325 1334 nr = MINLOC( ABS( build_ids_final - & 1326 1335 building_id_f%var(j,i) ), DIM = 1 ) 1336 ! 1337 !-- Save grid-indexed oro_max 1338 buildings_f%oro_max(j,i) = oro_max(nr) 1327 1339 ENDIF 1328 1340 ENDIF … … 1433 1445 ENDDO 1434 1446 ENDDO 1447 ! 1448 !-- Horizontal exchange the oro_max array 1449 CALL exchange_horiz_2d( buildings_f%oro_max(:,:), nbgp ) 1435 1450 ! 1436 1451 !-- Deallocate temporary arrays required for processing and reading data -
palm/trunk/SOURCE/netcdf_data_input_mod.f90
r4226 r4245 25 25 ! ----------------- 26 26 ! $Id$ 27 ! Add reading and processing of building_surface_pars 28 ! 29 ! 4226 2019-09-10 17:03:24Z suehring 27 30 ! - Netcdf input routine for dimension length renamed 28 31 ! - Move offline-nesting-specific checks to nesting_offl_mod … … 376 379 REAL(wp) :: fill1 = -9999.9_wp !< fill values for lod = 1 377 380 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: var_2d !< 2d variable (lod = 1) 381 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: oro_max !< terraing height under particular buildings 378 382 END TYPE build_in 379 383 … … 416 420 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: pars_xyz !< respective parameters, level of detail = 2 417 421 END TYPE pars 422 ! 423 !-- Data type for surface parameter lists 424 TYPE pars_surf 425 INTEGER(iwp) :: np !< total number of parameters 426 INTEGER(iwp) :: nsurf !< number of local surfaces 427 INTEGER(iwp), DIMENSION(:,:,:), ALLOCATABLE :: index_ji !< index for beginning and end of surfaces at (j,i) 428 INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE :: coords !< (k,j,i,norm_z,norm_y,norm_x) 429 !< k,j,i: surface position 430 !< norm_z,norm_y,norm_x: surface normal vector 431 432 LOGICAL :: from_file = .FALSE. !< flag indicating whether an input variable is available and read from file or default values are used 433 434 REAL(wp) :: fill = -9999.9_wp !< fill value 435 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: pars !< respective parameters per surface 436 END TYPE pars_surf 418 437 ! 419 438 !-- Define type for global file attributes … … 551 570 TYPE(pars) :: water_pars_f !< input variable for water parameters 552 571 572 TYPE(pars_surf) :: building_surface_pars_f !< input variable for building surface parameters 573 553 574 TYPE(chem_emis_att_type) :: chem_emis_att !< Input Information of Chemistry Emission Data from netcdf 554 575 TYPE(chem_emis_val_type), ALLOCATABLE, DIMENSION(:) :: chem_emis !< Input Chemistry Emission Data from netcdf … … 683 704 !-- Public variables 684 705 PUBLIC albedo_pars_f, albedo_type_f, basal_area_density_f, buildings_f, & 685 building_id_f, building_pars_f, building_type_f, & 706 building_id_f, building_pars_f, building_surface_pars_f, & 707 building_type_f, & 686 708 char_fill, & 687 709 char_lod, & … … 1958 1980 building_pars_f%from_file = .FALSE. 1959 1981 ENDIF 1982 ! 1983 !-- Read building surface parameters 1984 IF ( check_existence( var_names, 'building_surface_pars' ) ) THEN 1985 building_surface_pars_f%from_file = .TRUE. 1986 CALL get_attribute( id_surf, char_fill, & 1987 building_surface_pars_f%fill, & 1988 .FALSE., 'building_surface_pars' ) 1989 ! 1990 !-- Read building_surface_pars 1991 CALL get_variable_surf( id_surf, 'building_surface_pars', & 1992 building_surface_pars_f ) 1993 ELSE 1994 building_surface_pars_f%from_file = .FALSE. 1995 ENDIF 1960 1996 1961 1997 ! … … 4302 4338 ENDIF 4303 4339 ! 4304 !-- Extrapolate if actual height is above the highest Inifor level 4340 !-- Extrapolate if actual height is above the highest Inifor level by the last value 4305 4341 ELSE 4306 var(k) = var_file(ku) + ( var_file(ku) - var_file(ku-1) ) / & 4307 ( z_file(ku) - z_file(ku-1) ) * & 4308 ( z_grid(k) - z_file(ku) ) 4309 4342 var(k) = var_file(ku) 4310 4343 ENDIF 4311 4344 … … 4965 4998 #endif 4966 4999 END SUBROUTINE get_variable_pr 5000 5001 5002 !------------------------------------------------------------------------------! 5003 ! Description: 5004 ! ------------ 5005 !> Reads a per-surface pars variable from file. Because all surfaces are stored 5006 !> as flat 1-D array, each PE has to scan the data and find the surface indices 5007 !> belonging to its subdomain. During this scan, it also builds a necessary 5008 !> (j,i) index. 5009 !------------------------------------------------------------------------------! 5010 SUBROUTINE get_variable_surf( id, variable_name, surf ) 5011 #if defined( __netcdf ) 5012 5013 USE pegrid 5014 5015 USE indices, & 5016 ONLY: nxl, nxr, nys, nyn, nzb, nzt 5017 5018 USE control_parameters, & 5019 ONLY: dz, message_string 5020 5021 USE grid_variables, & 5022 ONLY: dx, dy 5023 5024 USE basic_constants_and_equations_mod, & 5025 ONLY: pi 5026 5027 USE arrays_3d, & 5028 ONLY: zu, zw 5029 5030 IMPLICIT NONE 5031 5032 INTEGER, PARAMETER :: nsurf_pars_read = 1024**2 !< read buffer size 5033 5034 CHARACTER(LEN=*) :: variable_name !< variable name 5035 5036 INTEGER(iwp), DIMENSION(6) :: coords !< integer coordinates of surface 5037 INTEGER(iwp) :: i, j 5038 INTEGER(iwp) :: isurf !< netcdf surface index 5039 INTEGER(iwp) :: is !< local surface index 5040 INTEGER(iwp), INTENT(IN) :: id !< file id 5041 INTEGER(iwp), DIMENSION(2) :: id_dim !< dimension ids 5042 INTEGER(iwp) :: id_var !< variable id 5043 INTEGER(iwp) :: id_zs !< zs variable id 5044 INTEGER(iwp) :: id_ys !< ys variable id 5045 INTEGER(iwp) :: id_xs !< xs variable id 5046 INTEGER(iwp) :: id_zenith !< zeith variable id 5047 INTEGER(iwp) :: id_azimuth !< azimuth variable id 5048 INTEGER(iwp) :: is0, isc !< read surface start and count 5049 INTEGER(iwp) :: nsurf !< total number of surfaces in file 5050 INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE :: nsurf_ji !< numbers of surfaces by coords 5051 5052 TYPE(pars_surf) :: surf !< parameters variable to be loaded 5053 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: pars_read !< read buffer 5054 REAL(wp), DIMENSION(:), ALLOCATABLE :: zs, ys, xs !< read buffer for zs(s), ys, xs 5055 REAL(wp), DIMENSION(:), ALLOCATABLE :: zenith !< read buffer for zenith(s) 5056 REAL(wp), DIMENSION(:), ALLOCATABLE :: azimuth !< read buffer for azimuth(s) 5057 REAL(wp) :: oro_max_l !< maximum terrain height under building 5058 5059 ! 5060 !-- First, inquire variable ID 5061 nc_stat = NF90_INQ_VARID( id, TRIM( variable_name ), id_var ) 5062 nc_stat = NF90_INQ_VARID( id, 'zs', id_zs ) 5063 nc_stat = NF90_INQ_VARID( id, 'ys', id_ys ) 5064 nc_stat = NF90_INQ_VARID( id, 'xs', id_xs ) 5065 nc_stat = NF90_INQ_VARID( id, 'zenith', id_zenith ) 5066 nc_stat = NF90_INQ_VARID( id, 'azimuth', id_azimuth ) 5067 ! 5068 !-- Inquire dimension sizes 5069 nc_stat = NF90_INQUIRE_VARIABLE( id, id_var, DIMIDS = id_dim ) 5070 nc_stat = NF90_INQUIRE_DIMENSION( id, id_dim(1), LEN = nsurf ) 5071 nc_stat = NF90_INQUIRE_DIMENSION( id, id_dim(2), LEN = surf%np ) 5072 5073 ALLOCATE ( pars_read( nsurf_pars_read, surf%np ), & 5074 zs(nsurf_pars_read), ys(nsurf_pars_read), & 5075 xs(nsurf_pars_read), zenith(nsurf_pars_read), & 5076 azimuth(nsurf_pars_read), & 5077 nsurf_ji(nys:nyn, nxl:nxr) ) 5078 5079 nsurf_ji(:,:) = 0 5080 ! 5081 !-- Scan surface coordinates, count local 5082 is0 = 1 5083 DO 5084 isc = MIN(nsurf_pars_read, nsurf - is0 + 1) 5085 IF ( isc <= 0 ) EXIT 5086 5087 nc_stat = NF90_GET_VAR( id, id_ys, ys, & 5088 start = (/ is0 /), & 5089 count = (/ isc /) ) 5090 nc_stat = NF90_GET_VAR( id, id_xs, xs, & 5091 start = (/ is0 /), & 5092 count = (/ isc /) ) 5093 nc_stat = NF90_GET_VAR( id, id_zenith, zenith, & 5094 start = (/ is0 /), & 5095 count = (/ isc /) ) 5096 nc_stat = NF90_GET_VAR( id, id_azimuth, azimuth, & 5097 start = (/ is0 /), & 5098 count = (/ isc /) ) 5099 CALL handle_error( 'get_variable_surf', 682, 'azimuth' ) 5100 5101 DO isurf = 1, isc 5102 ! 5103 !-- Parse coordinates, detect if belongs to subdomain 5104 coords = transform_coords( xs(isurf), ys(isurf), & 5105 zenith(isurf), azimuth(isurf) ) 5106 IF ( coords(2) < nys .OR. coords(2) > nyn .OR. & 5107 coords(3) < nxl .OR. coords(3) > nxr ) CYCLE 5108 5109 nsurf_ji(coords(2), coords(3)) = nsurf_ji(coords(2), coords(3)) + 1 5110 ENDDO 5111 5112 is0 = is0 + isc 5113 ENDDO 5114 ! 5115 !-- Populate reverse index from surface counts 5116 ALLOCATE ( surf%index_ji( 2, nys:nyn, nxl:nxr ) ) 5117 5118 isurf = 1 5119 DO j = nys, nyn 5120 DO i = nxl, nxr 5121 surf%index_ji(:,j,i) = (/ isurf, isurf + nsurf_ji(j,i) - 1 /) 5122 isurf = isurf + nsurf_ji(j,i) 5123 ENDDO 5124 ENDDO 5125 5126 surf%nsurf = isurf - 1 5127 ALLOCATE( surf%pars( 0:surf%np-1, surf%nsurf ), & 5128 surf%coords( 6, surf%nsurf ) ) 5129 ! 5130 !-- Scan surfaces again, saving pars into allocated structures 5131 nsurf_ji(:,:) = 0 5132 is0 = 1 5133 DO 5134 isc = MIN(nsurf_pars_read, nsurf - is0 + 1) 5135 IF ( isc <= 0 ) EXIT 5136 5137 nc_stat = NF90_GET_VAR( id, id_var, pars_read(1:isc, 1:surf%np), & 5138 start = (/ is0, 1 /), & 5139 count = (/ isc, surf%np /) ) 5140 CALL handle_error( 'get_variable_surf', 683, variable_name ) 5141 5142 nc_stat = NF90_GET_VAR( id, id_zs, zs, & 5143 start = (/ is0 /), & 5144 count = (/ isc /) ) 5145 nc_stat = NF90_GET_VAR( id, id_ys, ys, & 5146 start = (/ is0 /), & 5147 count = (/ isc /) ) 5148 nc_stat = NF90_GET_VAR( id, id_xs, xs, & 5149 start = (/ is0 /), & 5150 count = (/ isc /) ) 5151 nc_stat = NF90_GET_VAR( id, id_zenith, zenith, & 5152 start = (/ is0 /), & 5153 count = (/ isc /) ) 5154 nc_stat = NF90_GET_VAR( id, id_azimuth, azimuth, & 5155 start = (/ is0 /), & 5156 count = (/ isc /) ) 5157 5158 DO isurf = 1, isc 5159 ! 5160 !-- Parse coordinates, detect if belongs to subdomain 5161 coords = transform_coords( xs(isurf), ys(isurf), & 5162 zenith(isurf), azimuth(isurf) ) 5163 IF ( coords(2) < nys .OR. coords(2) > nyn .OR. & 5164 coords(3) < nxl .OR. coords(3) > nxr ) CYCLE 5165 ! 5166 !-- Determine maximum terrain under building (base z-coordinate). Using 5167 !-- normal vector to locate building inner coordinates. 5168 oro_max_l = buildings_f%oro_max(coords(2)-coords(5), coords(3)-coords(6)) 5169 IF ( oro_max_l == buildings_f%fill1 ) THEN 5170 WRITE( message_string, * ) 'Found building surface on ' // & 5171 'non-building coordinates (xs, ys, zenith, azimuth): ', & 5172 xs(isurf), ys(isurf), zenith(isurf), azimuth(isurf) 5173 CALL message( 'get_variable_surf', 'PA0684', 2, 2, 0, 6, 0 ) 5174 ENDIF 5175 ! 5176 !-- Urban layer has no stretching, therefore using dz(1) instead of linear 5177 !-- searching through zu/zw 5178 coords(1) = NINT((zs(isurf) + oro_max_l) / dz(1) + & 5179 0.5_wp + 0.5_wp * coords(4), KIND=iwp) 5180 ! 5181 !-- Save surface entry 5182 is = surf%index_ji(1, coords(2), coords(3)) + nsurf_ji(coords(2), coords(3)) 5183 surf%pars(:,is) = pars_read(isurf,:) 5184 surf%coords(:,is) = coords(:) 5185 5186 nsurf_ji(coords(2), coords(3)) = nsurf_ji(coords(2), coords(3)) + 1 5187 ENDDO 5188 5189 is0 = is0 + isc 5190 ENDDO 5191 5192 DEALLOCATE( pars_read, zs, ys, xs, zenith, azimuth, nsurf_ji ) 5193 5194 CONTAINS 5195 5196 PURE FUNCTION transform_coords( x, y, zenith, azimuth ) 5197 5198 REAL(wp), INTENT(in) :: x, y !< surface centre coordinates in metres from origin 5199 REAL(wp), INTENT(in) :: zenith !< surface normal zenith angle in degrees 5200 REAL(wp), INTENT(in) :: azimuth !< surface normal azimuth angle in degrees 5201 5202 INTEGER(iwp), DIMENSION(6) :: transform_coords !< (k,j,i,norm_z,norm_y,norm_x) 5203 5204 transform_coords(4) = NINT(COS(zenith*pi/180._wp), KIND=iwp) 5205 IF ( transform_coords(4) == 0 ) THEN 5206 transform_coords(5) = NINT(COS(azimuth*pi/180._wp), KIND=iwp) 5207 transform_coords(6) = NINT(SIN(azimuth*pi/180._wp), KIND=iwp) 5208 ELSE 5209 transform_coords(5) = 0._wp 5210 transform_coords(6) = 0._wp 5211 ENDIF 5212 5213 transform_coords(1) = -999._wp ! not calculated here 5214 transform_coords(2) = NINT(y/dy - 0.5_wp + 0.5_wp*transform_coords(5), KIND=iwp) 5215 transform_coords(3) = NINT(x/dx - 0.5_wp + 0.5_wp*transform_coords(6), KIND=iwp) 5216 5217 END FUNCTION transform_coords 5218 5219 #endif 5220 END SUBROUTINE get_variable_surf 4967 5221 4968 5222 -
palm/trunk/SOURCE/pmc_child_mod.f90
r4182 r4245 26 26 ! ----------------- 27 27 ! $Id$ 28 ! 29 ! 30 ! 4182 2019-08-22 15:20:23Z scharf 28 31 ! Corrected "Former revisions" section 29 32 ! -
palm/trunk/SOURCE/pmc_parent_mod.f90
r4213 r4245 26 26 ! ----------------- 27 27 ! $Id$ 28 ! 29 ! 30 ! 4213 2019-09-02 14:25:56Z suehring 28 31 ! Allocate array for index_list_2d also for zero-size arrays, in order to 29 32 ! avoid errors when array bound checks are enabled -
palm/trunk/SOURCE/radiation_model_mod.f90
- Property svn:mergeinfo changed
/palm/branches/resler/SOURCE/radiation_model_mod.f90 merged: 4192,4199,4207,4240,4244
r4238 r4245 28 28 ! ----------------- 29 29 ! $Id$ 30 ! Initialize explicit per-surface albedos from building_surface_pars 31 ! 32 ! 4238 2019-09-25 16:06:01Z suehring 30 33 ! Modify check in order to avoid equality comparisons of floating points 31 34 ! … … 257 260 albedo_pars_f, & 258 261 building_type_f, & 262 building_surface_pars_f, & 259 263 pavement_type_f, & 260 264 vegetation_type_f, & … … 356 360 'building (dummy) ' & ! 33 357 361 /) 362 ! 363 !-- Indices of radiation-related input attributes in building_surface_pars 364 !-- (other are in urban_surface_mod) 365 INTEGER(iwp) :: ind_s_alb_b_wall = 19 !< index for Broadband albedo of wall fraction 366 INTEGER(iwp) :: ind_s_alb_l_wall = 20 !< index for Longwave albedo of wall fraction 367 INTEGER(iwp) :: ind_s_alb_s_wall = 21 !< index for Shortwave albedo of wall fraction 368 INTEGER(iwp) :: ind_s_alb_b_win = 22 !< index for Broadband albedo of window fraction 369 INTEGER(iwp) :: ind_s_alb_l_win = 23 !< index for Longwave albedo of window fraction 370 INTEGER(iwp) :: ind_s_alb_s_win = 24 !< index for Shortwave albedo of window fraction 371 INTEGER(iwp) :: ind_s_alb_b_green = 24 !< index for Broadband albedo of green fraction 372 INTEGER(iwp) :: ind_s_alb_l_green = 25 !< index for Longwave albedo of green fraction 373 INTEGER(iwp) :: ind_s_alb_s_green = 26 !< index for Shortwave albedo of green fraction 358 374 359 375 INTEGER(iwp) :: albedo_type = 9999999_iwp, & !< Albedo surface type … … 1497 1513 1498 1514 INTEGER(iwp) :: i !< running index x-direction 1515 INTEGER(iwp) :: is !< running index for input surface elements 1499 1516 INTEGER(iwp) :: ioff !< offset in x between surface element reference grid point in atmosphere and actual surface 1500 1517 INTEGER(iwp) :: j !< running index y-direction 1501 1518 INTEGER(iwp) :: joff !< offset in y between surface element reference grid point in atmosphere and actual surface 1519 INTEGER(iwp) :: k !< running index z-direction 1502 1520 INTEGER(iwp) :: l !< running index for orientation of vertical surfaces 1503 1521 INTEGER(iwp) :: m !< running index for surface elements … … 1887 1905 ENDIF 1888 1906 ! 1907 !-- Read explicit albedo values from building surface pars. If present, 1908 !-- they override all less specific albedo values and force a albedo_type 1909 !-- to zero in order to take effect. 1910 IF ( building_surface_pars_f%from_file ) THEN 1911 DO m = 1, surf_usm_h%ns 1912 i = surf_usm_h%i(m) 1913 j = surf_usm_h%j(m) 1914 k = surf_usm_h%k(m) 1915 ! 1916 !-- Iterate over surfaces in column, check height and orientation 1917 DO is = building_surface_pars_f%index_ji(1,j,i), & 1918 building_surface_pars_f%index_ji(2,j,i) 1919 IF ( building_surface_pars_f%coords(4,is) == -surf_usm_h%koff .AND. & 1920 building_surface_pars_f%coords(1,is) == k ) THEN 1921 1922 IF ( building_surface_pars_f%pars(ind_s_alb_b_wall,is) /= & 1923 building_surface_pars_f%fill ) THEN 1924 surf_usm_h%albedo(ind_veg_wall,m) = & 1925 building_surface_pars_f%pars(ind_s_alb_b_wall,is) 1926 surf_usm_h%albedo_type(ind_veg_wall,m) = 0 1927 ENDIF 1928 1929 IF ( building_surface_pars_f%pars(ind_s_alb_b_win,is) /= & 1930 building_surface_pars_f%fill ) THEN 1931 surf_usm_h%albedo(ind_wat_win,m) = & 1932 building_surface_pars_f%pars(ind_s_alb_b_win,is) 1933 surf_usm_h%albedo_type(ind_wat_win,m) = 0 1934 ENDIF 1935 1936 IF ( building_surface_pars_f%pars(ind_s_alb_b_green,is) /= & 1937 building_surface_pars_f%fill ) THEN 1938 surf_usm_h%albedo(ind_pav_green,m) = & 1939 building_surface_pars_f%pars(ind_s_alb_b_green,is) 1940 surf_usm_h%albedo_type(ind_pav_green,m) = 0 1941 ENDIF 1942 1943 EXIT ! surface was found and processed 1944 ENDIF 1945 ENDDO 1946 ENDDO 1947 1948 DO l = 0, 3 1949 DO m = 1, surf_usm_v(l)%ns 1950 i = surf_usm_v(l)%i(m) 1951 j = surf_usm_v(l)%j(m) 1952 k = surf_usm_v(l)%k(m) 1953 ! 1954 !-- Iterate over surfaces in column, check height and orientation 1955 DO is = building_surface_pars_f%index_ji(1,j,i), & 1956 building_surface_pars_f%index_ji(2,j,i) 1957 IF ( building_surface_pars_f%coords(5,is) == -surf_usm_v(l)%joff .AND. & 1958 building_surface_pars_f%coords(6,is) == -surf_usm_v(l)%ioff .AND. & 1959 building_surface_pars_f%coords(1,is) == k ) THEN 1960 1961 IF ( building_surface_pars_f%pars(ind_s_alb_b_wall,is) /= & 1962 building_surface_pars_f%fill ) THEN 1963 surf_usm_v(l)%albedo(ind_veg_wall,m) = & 1964 building_surface_pars_f%pars(ind_s_alb_b_wall,is) 1965 surf_usm_v(l)%albedo_type(ind_veg_wall,m) = 0 1966 ENDIF 1967 1968 IF ( building_surface_pars_f%pars(ind_s_alb_b_win,is) /= & 1969 building_surface_pars_f%fill ) THEN 1970 surf_usm_v(l)%albedo(ind_wat_win,m) = & 1971 building_surface_pars_f%pars(ind_s_alb_b_win,is) 1972 surf_usm_v(l)%albedo_type(ind_wat_win,m) = 0 1973 ENDIF 1974 1975 IF ( building_surface_pars_f%pars(ind_s_alb_b_green,is) /= & 1976 building_surface_pars_f%fill ) THEN 1977 surf_usm_v(l)%albedo(ind_pav_green,m) = & 1978 building_surface_pars_f%pars(ind_s_alb_b_green,is) 1979 surf_usm_v(l)%albedo_type(ind_pav_green,m) = 0 1980 ENDIF 1981 1982 EXIT ! surface was found and processed 1983 ENDIF 1984 ENDDO 1985 ENDDO 1986 ENDDO 1987 ENDIF 1988 ! 1889 1989 !-- Initialization actions for RRTMG 1890 1990 ELSEIF ( radiation_scheme == 'rrtmg' ) THEN … … 2289 2389 ENDDO 2290 2390 2391 ENDIF 2392 ! 2393 !-- Read explicit albedo values from building surface pars. If present, 2394 !-- they override all less specific albedo values and force a albedo_type 2395 !-- to zero in order to take effect. 2396 IF ( building_surface_pars_f%from_file ) THEN 2397 DO m = 1, surf_usm_h%ns 2398 i = surf_usm_h%i(m) 2399 j = surf_usm_h%j(m) 2400 k = surf_usm_h%k(m) 2401 ! 2402 !-- Iterate over surfaces in column, check height and orientation 2403 DO is = building_surface_pars_f%index_ji(1,j,i), & 2404 building_surface_pars_f%index_ji(2,j,i) 2405 IF ( building_surface_pars_f%coords(4,is) == -surf_usm_h%koff .AND. & 2406 building_surface_pars_f%coords(1,is) == k ) THEN 2407 2408 IF ( building_surface_pars_f%pars(ind_s_alb_b_wall,is) /= & 2409 building_surface_pars_f%fill ) THEN 2410 surf_usm_h%albedo(ind_veg_wall,m) = & 2411 building_surface_pars_f%pars(ind_s_alb_b_wall,is) 2412 surf_usm_h%albedo_type(ind_veg_wall,m) = 0 2413 ENDIF 2414 2415 IF ( building_surface_pars_f%pars(ind_s_alb_l_wall,is) /= & 2416 building_surface_pars_f%fill ) THEN 2417 surf_usm_h%aldir(ind_veg_wall,m) = & 2418 building_surface_pars_f%pars(ind_s_alb_l_wall,is) 2419 surf_usm_h%aldif(ind_veg_wall,m) = & 2420 building_surface_pars_f%pars(ind_s_alb_l_wall,is) 2421 surf_usm_h%albedo_type(ind_veg_wall,m) = 0 2422 ENDIF 2423 2424 IF ( building_surface_pars_f%pars(ind_s_alb_s_wall,is) /= & 2425 building_surface_pars_f%fill ) THEN 2426 surf_usm_h%asdir(ind_veg_wall,m) = & 2427 building_surface_pars_f%pars(ind_s_alb_s_wall,is) 2428 surf_usm_h%asdif(ind_veg_wall,m) = & 2429 building_surface_pars_f%pars(ind_s_alb_s_wall,is) 2430 surf_usm_h%albedo_type(ind_veg_wall,m) = 0 2431 ENDIF 2432 2433 IF ( building_surface_pars_f%pars(ind_s_alb_b_win,is) /= & 2434 building_surface_pars_f%fill ) THEN 2435 surf_usm_h%albedo(ind_wat_win,m) = & 2436 building_surface_pars_f%pars(ind_s_alb_b_win,is) 2437 surf_usm_h%albedo_type(ind_wat_win,m) = 0 2438 ENDIF 2439 2440 IF ( building_surface_pars_f%pars(ind_s_alb_l_win,is) /= & 2441 building_surface_pars_f%fill ) THEN 2442 surf_usm_h%aldir(ind_wat_win,m) = & 2443 building_surface_pars_f%pars(ind_s_alb_l_win,is) 2444 surf_usm_h%aldif(ind_wat_win,m) = & 2445 building_surface_pars_f%pars(ind_s_alb_l_win,is) 2446 surf_usm_h%albedo_type(ind_wat_win,m) = 0 2447 ENDIF 2448 2449 IF ( building_surface_pars_f%pars(ind_s_alb_s_win,is) /= & 2450 building_surface_pars_f%fill ) THEN 2451 surf_usm_h%asdir(ind_wat_win,m) = & 2452 building_surface_pars_f%pars(ind_s_alb_s_win,is) 2453 surf_usm_h%asdif(ind_wat_win,m) = & 2454 building_surface_pars_f%pars(ind_s_alb_s_win,is) 2455 surf_usm_h%albedo_type(ind_wat_win,m) = 0 2456 ENDIF 2457 2458 IF ( building_surface_pars_f%pars(ind_s_alb_b_green,is) /= & 2459 building_surface_pars_f%fill ) THEN 2460 surf_usm_h%albedo(ind_pav_green,m) = & 2461 building_surface_pars_f%pars(ind_s_alb_b_green,is) 2462 surf_usm_h%albedo_type(ind_pav_green,m) = 0 2463 ENDIF 2464 2465 IF ( building_surface_pars_f%pars(ind_s_alb_l_green,is) /= & 2466 building_surface_pars_f%fill ) THEN 2467 surf_usm_h%aldir(ind_pav_green,m) = & 2468 building_surface_pars_f%pars(ind_s_alb_l_green,is) 2469 surf_usm_h%aldif(ind_pav_green,m) = & 2470 building_surface_pars_f%pars(ind_s_alb_l_green,is) 2471 surf_usm_h%albedo_type(ind_pav_green,m) = 0 2472 ENDIF 2473 2474 IF ( building_surface_pars_f%pars(ind_s_alb_s_green,is) /= & 2475 building_surface_pars_f%fill ) THEN 2476 surf_usm_h%asdir(ind_pav_green,m) = & 2477 building_surface_pars_f%pars(ind_s_alb_s_green,is) 2478 surf_usm_h%asdif(ind_pav_green,m) = & 2479 building_surface_pars_f%pars(ind_s_alb_s_green,is) 2480 surf_usm_h%albedo_type(ind_pav_green,m) = 0 2481 ENDIF 2482 2483 EXIT ! surface was found and processed 2484 ENDIF 2485 ENDDO 2486 ENDDO 2487 2488 DO l = 0, 3 2489 DO m = 1, surf_usm_v(l)%ns 2490 i = surf_usm_v(l)%i(m) 2491 j = surf_usm_v(l)%j(m) 2492 k = surf_usm_v(l)%k(m) 2493 ! 2494 !-- Iterate over surfaces in column, check height and orientation 2495 DO is = building_surface_pars_f%index_ji(1,j,i), & 2496 building_surface_pars_f%index_ji(2,j,i) 2497 IF ( building_surface_pars_f%coords(5,is) == -surf_usm_v(l)%joff .AND. & 2498 building_surface_pars_f%coords(6,is) == -surf_usm_v(l)%ioff .AND. & 2499 building_surface_pars_f%coords(1,is) == k ) THEN 2500 2501 IF ( building_surface_pars_f%pars(ind_s_alb_b_wall,is) /= & 2502 building_surface_pars_f%fill ) THEN 2503 surf_usm_v(l)%albedo(ind_veg_wall,m) = & 2504 building_surface_pars_f%pars(ind_s_alb_b_wall,is) 2505 surf_usm_v(l)%albedo_type(ind_veg_wall,m) = 0 2506 ENDIF 2507 2508 IF ( building_surface_pars_f%pars(ind_s_alb_l_wall,is) /= & 2509 building_surface_pars_f%fill ) THEN 2510 surf_usm_v(l)%aldir(ind_veg_wall,m) = & 2511 building_surface_pars_f%pars(ind_s_alb_l_wall,is) 2512 surf_usm_v(l)%aldif(ind_veg_wall,m) = & 2513 building_surface_pars_f%pars(ind_s_alb_l_wall,is) 2514 surf_usm_v(l)%albedo_type(ind_veg_wall,m) = 0 2515 ENDIF 2516 2517 IF ( building_surface_pars_f%pars(ind_s_alb_s_wall,is) /= & 2518 building_surface_pars_f%fill ) THEN 2519 surf_usm_v(l)%asdir(ind_veg_wall,m) = & 2520 building_surface_pars_f%pars(ind_s_alb_s_wall,is) 2521 surf_usm_v(l)%asdif(ind_veg_wall,m) = & 2522 building_surface_pars_f%pars(ind_s_alb_s_wall,is) 2523 surf_usm_v(l)%albedo_type(ind_veg_wall,m) = 0 2524 ENDIF 2525 2526 IF ( building_surface_pars_f%pars(ind_s_alb_b_win,is) /= & 2527 building_surface_pars_f%fill ) THEN 2528 surf_usm_v(l)%albedo(ind_wat_win,m) = & 2529 building_surface_pars_f%pars(ind_s_alb_b_win,is) 2530 surf_usm_v(l)%albedo_type(ind_wat_win,m) = 0 2531 ENDIF 2532 2533 IF ( building_surface_pars_f%pars(ind_s_alb_l_win,is) /= & 2534 building_surface_pars_f%fill ) THEN 2535 surf_usm_v(l)%aldir(ind_wat_win,m) = & 2536 building_surface_pars_f%pars(ind_s_alb_l_win,is) 2537 surf_usm_v(l)%aldif(ind_wat_win,m) = & 2538 building_surface_pars_f%pars(ind_s_alb_l_win,is) 2539 surf_usm_v(l)%albedo_type(ind_wat_win,m) = 0 2540 ENDIF 2541 2542 IF ( building_surface_pars_f%pars(ind_s_alb_s_win,is) /= & 2543 building_surface_pars_f%fill ) THEN 2544 surf_usm_v(l)%asdir(ind_wat_win,m) = & 2545 building_surface_pars_f%pars(ind_s_alb_s_win,is) 2546 surf_usm_v(l)%asdif(ind_wat_win,m) = & 2547 building_surface_pars_f%pars(ind_s_alb_s_win,is) 2548 surf_usm_v(l)%albedo_type(ind_wat_win,m) = 0 2549 ENDIF 2550 2551 IF ( building_surface_pars_f%pars(ind_s_alb_b_green,is) /= & 2552 building_surface_pars_f%fill ) THEN 2553 surf_usm_v(l)%albedo(ind_pav_green,m) = & 2554 building_surface_pars_f%pars(ind_s_alb_b_green,is) 2555 surf_usm_v(l)%albedo_type(ind_pav_green,m) = 0 2556 ENDIF 2557 2558 IF ( building_surface_pars_f%pars(ind_s_alb_l_green,is) /= & 2559 building_surface_pars_f%fill ) THEN 2560 surf_usm_v(l)%aldir(ind_pav_green,m) = & 2561 building_surface_pars_f%pars(ind_s_alb_l_green,is) 2562 surf_usm_v(l)%aldif(ind_pav_green,m) = & 2563 building_surface_pars_f%pars(ind_s_alb_l_green,is) 2564 surf_usm_v(l)%albedo_type(ind_pav_green,m) = 0 2565 ENDIF 2566 2567 IF ( building_surface_pars_f%pars(ind_s_alb_s_green,is) /= & 2568 building_surface_pars_f%fill ) THEN 2569 surf_usm_v(l)%asdir(ind_pav_green,m) = & 2570 building_surface_pars_f%pars(ind_s_alb_s_green,is) 2571 surf_usm_v(l)%asdif(ind_pav_green,m) = & 2572 building_surface_pars_f%pars(ind_s_alb_s_green,is) 2573 surf_usm_v(l)%albedo_type(ind_pav_green,m) = 0 2574 ENDIF 2575 2576 EXIT ! surface was found and processed 2577 ENDIF 2578 ENDDO 2579 ENDDO 2580 ENDDO 2291 2581 ENDIF 2292 2582 - Property svn:mergeinfo changed
-
palm/trunk/SOURCE/surface_mod.f90
r4182 r4245 21 21 ! Current revisions: 22 22 ! ------------------ 23 ! 23 ! 24 24 ! 25 25 ! Former revisions: -
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. -
palm/trunk/UTIL
- Property svn:mergeinfo changed
Note: See TracChangeset
for help on using the changeset viewer.