Changeset 3943 for palm/trunk/SOURCE
- Timestamp:
- May 2, 2019 9:50:41 AM (6 years ago)
- Location:
- palm/trunk/SOURCE
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/data_output_2d.f90
r3885 r3943 25 25 ! ----------------- 26 26 ! $Id$ 27 ! Added output of qsws for green roofs. 28 ! 29 ! 3885 2019-04-11 11:29:34Z kanani 27 30 ! Changes related to global restructuring of location messages and introduction 28 31 ! of additional debug messages … … 919 922 k = surf_lsm_h%k(m) 920 923 local_pf(i,j,nzb+1) = surf_lsm_h%qsws(m) * l_v 924 ENDDO 925 DO m = 1, surf_usm_h%ns 926 i = surf_usm_h%i(m) 927 j = surf_usm_h%j(m) 928 k = surf_usm_h%k(m) 929 local_pf(i,j,nzb+1) = surf_usm_h%qsws(m) * l_v 921 930 ENDDO 922 931 ELSE -
palm/trunk/SOURCE/land_surface_model_mod.f90
r3941 r3943 25 25 ! ----------------- 26 26 ! $Id$ 27 ! Removed extra blank character 28 ! 29 ! 3941 2019-04-30 09:48:33Z suehring 27 30 ! Check that at least one surface type is set at surface element. 28 31 ! … … 5475 5478 5476 5479 5477 IF ( 5480 IF ( calc_soil_moisture ) THEN 5478 5481 5479 5482 ! -
palm/trunk/SOURCE/netcdf_data_input_mod.f90
r3942 r3943 25 25 ! ----------------- 26 26 ! $Id$ 27 ! Temporarily disabled some (faulty) checks for static driver. 28 ! 29 ! 3942 2019-04-30 13:08:30Z kanani 27 30 ! Fix: increase LEN of all NetCDF attribute values (caused crash in 28 31 ! netcdf_create_global_atts due to insufficient length) … … 4256 4259 ! 4257 4260 !-- Check if building_type is set at each building and vice versa. 4258 IF ( building_type_f%from_file .AND. buildings_f%from_file ) THEN4259 IF ( buildings_f%lod == 1 ) THEN4260 IF ( buildings_f%var_2d(j,i) /= buildings_f%fill1 .AND. &4261 building_type_f%var(j,i) == building_type_f%fill .OR. &4262 buildings_f%var_2d(j,i) == buildings_f%fill1 .AND. &4263 building_type_f%var(j,i) /= building_type_f%fill ) THEN4264 WRITE( message_string, * ) 'Each location where a ' // &4265 '2D building is set requires a type ' // &4266 '( and vice versa ) in case the ' // &4267 'urban-surface model is applied. ' // &4268 'i, j = ', i, j4269 CALL message( 'netcdf_data_input_mod', 'PA0573', &4270 2, 2, myid, 6, 0 )4271 ENDIF4272 ENDIF4273 IF ( buildings_f%lod == 2 ) THEN4274 IF ( ANY( buildings_f%var_3d(:,j,i) == 1 ) .AND. &4275 building_type_f%var(j,i) == building_type_f%fill .OR. &4276 .NOT. ANY( buildings_f%var_3d(:,j,i) == 1 ) .AND. &4277 building_type_f%var(j,i) /= building_type_f%fill ) THEN4278 WRITE( message_string, * ) 'Each location where a ' // &4279 '3D building is set requires a type ' // &4280 '( and vice versa ) in case the ' // &4281 'urban-surface model is applied. ' // &4282 'i, j = ', i, j4283 CALL message( 'netcdf_data_input_mod', 'PA0573', &4284 2, 2, myid, 6, 0 )4285 ENDIF4286 ENDIF4287 ENDIF4261 ! IF ( building_type_f%from_file .AND. buildings_f%from_file ) THEN 4262 ! IF ( buildings_f%lod == 1 ) THEN 4263 ! IF ( buildings_f%var_2d(j,i) /= buildings_f%fill1 .AND. & 4264 ! building_type_f%var(j,i) == building_type_f%fill .OR. & 4265 ! buildings_f%var_2d(j,i) == buildings_f%fill1 .AND. & 4266 ! building_type_f%var(j,i) /= building_type_f%fill ) THEN 4267 ! WRITE( message_string, * ) 'Each location where a ' // & 4268 ! '2D building is set requires a type ' // & 4269 ! '( and vice versa ) in case the ' // & 4270 ! 'urban-surface model is applied. ' // & 4271 ! 'i, j = ', i, j 4272 ! CALL message( 'netcdf_data_input_mod', 'PA0573', & 4273 ! 2, 2, myid, 6, 0 ) 4274 ! ENDIF 4275 ! ENDIF 4276 ! IF ( buildings_f%lod == 2 ) THEN 4277 ! IF ( ANY( buildings_f%var_3d(:,j,i) == 1 ) .AND. & 4278 ! building_type_f%var(j,i) == building_type_f%fill .OR. & 4279 ! .NOT. ANY( buildings_f%var_3d(:,j,i) == 1 ) .AND. & 4280 ! building_type_f%var(j,i) /= building_type_f%fill ) THEN 4281 ! WRITE( message_string, * ) 'Each location where a ' // & 4282 ! '3D building is set requires a type ' // & 4283 ! '( and vice versa ) in case the ' // & 4284 ! 'urban-surface model is applied. ' // & 4285 ! 'i, j = ', i, j 4286 ! CALL message( 'netcdf_data_input_mod', 'PA0573', & 4287 ! 2, 2, myid, 6, 0 ) 4288 ! ENDIF 4289 ! ENDIF 4290 ! ENDIF 4288 4291 ! 4289 4292 !-- Check if at each location where a building is present also an ID 4290 4293 !-- is set and vice versa. 4291 IF ( buildings_f%from_file ) THEN4292 IF ( buildings_f%lod == 1 ) THEN4293 IF ( buildings_f%var_2d(j,i) /= buildings_f%fill1 .AND. &4294 building_id_f%var(j,i) == building_id_f%fill .OR. &4295 buildings_f%var_2d(j,i) == buildings_f%fill1 .AND. &4296 building_id_f%var(j,i) /= building_id_f%fill ) THEN4297 WRITE( message_string, * ) 'Each location where a ' // &4298 '2D building is set requires an ID ' // &4299 '( and vice versa ). i, j = ', i, j4300 CALL message( 'netcdf_data_input_mod', 'PA0574', &4301 2, 2, myid, 6, 0 )4302 ENDIF4303 ELSEIF ( buildings_f%lod == 2 ) THEN4304 IF ( ANY( buildings_f%var_3d(:,j,i) == 1 ) .AND. &4305 building_id_f%var(j,i) == building_id_f%fill .OR. &4306 .NOT. ANY( buildings_f%var_3d(:,j,i) == 1 ) .AND. &4307 building_id_f%var(j,i) /= building_id_f%fill ) THEN4308 WRITE( message_string, * ) 'Each location where a ' // &4309 '3D building is set requires an ID ' // &4310 '( and vice versa ). i, j = ', i, j4311 CALL message( 'netcdf_data_input_mod', 'PA0574', &4312 2, 2, myid, 6, 0 )4313 ENDIF4314 ENDIF4315 ENDIF4294 ! IF ( buildings_f%from_file ) THEN 4295 ! IF ( buildings_f%lod == 1 ) THEN 4296 ! IF ( buildings_f%var_2d(j,i) /= buildings_f%fill1 .AND. & 4297 ! building_id_f%var(j,i) == building_id_f%fill .OR. & 4298 ! buildings_f%var_2d(j,i) == buildings_f%fill1 .AND. & 4299 ! building_id_f%var(j,i) /= building_id_f%fill ) THEN 4300 ! WRITE( message_string, * ) 'Each location where a ' // & 4301 ! '2D building is set requires an ID ' // & 4302 ! '( and vice versa ). i, j = ', i, j 4303 ! CALL message( 'netcdf_data_input_mod', 'PA0574', & 4304 ! 2, 2, myid, 6, 0 ) 4305 ! ENDIF 4306 ! ELSEIF ( buildings_f%lod == 2 ) THEN 4307 ! IF ( ANY( buildings_f%var_3d(:,j,i) == 1 ) .AND. & 4308 ! building_id_f%var(j,i) == building_id_f%fill .OR. & 4309 ! .NOT. ANY( buildings_f%var_3d(:,j,i) == 1 ) .AND. & 4310 ! building_id_f%var(j,i) /= building_id_f%fill ) THEN 4311 ! WRITE( message_string, * ) 'Each location where a ' // & 4312 ! '3D building is set requires an ID ' // & 4313 ! '( and vice versa ). i, j = ', i, j 4314 ! CALL message( 'netcdf_data_input_mod', 'PA0574', & 4315 ! 2, 2, myid, 6, 0 ) 4316 ! ENDIF 4317 ! ENDIF 4318 ! ENDIF 4316 4319 ! 4317 4320 !-- Check if building ID is set where a bulding is defined. -
palm/trunk/SOURCE/pmc_child_mod.f90
r3932 r3943 21 21 ! Current revisions: 22 22 ! ------------------ 23 ! typo removed23 ! 24 24 ! 25 25 ! Former revisions: 26 26 ! ----------------- 27 27 ! $Id$ 28 ! typo removed 29 ! 30 ! 3932 2019-04-24 17:31:34Z suehring 28 31 ! statement added to avoid compiler warning 29 32 ! -
palm/trunk/SOURCE/pmc_general_mod.f90
r3932 r3943 21 21 ! Current revisions: 22 22 ! ------------------ 23 ! Increase character length so that also chemistry variable names fully fit23 ! 24 24 ! 25 25 ! Former revisions: 26 26 ! ----------------- 27 27 ! $Id$ 28 ! Increase character length so that also chemistry variable names fully fit 29 ! 30 ! 3932 2019-04-24 17:31:34Z suehring 28 31 ! Determine number of coupled arrays dynamically. 29 32 ! -
palm/trunk/SOURCE/pmc_interface_mod.f90
r3932 r3943 20 20 ! Current revisions: 21 21 ! ------------------ 22 ! Add missing if statements for call of pmc_set_dataarray_name for TKE and 23 ! dissipation. 22 ! 24 23 ! 25 24 ! Former revisions: 26 25 ! ----------------- 27 26 ! $Id$ 27 ! Add missing if statements for call of pmc_set_dataarray_name for TKE and 28 ! dissipation. 29 ! 30 ! 3932 2019-04-24 17:31:34Z suehring 28 31 ! Variables renamed, commenting improved etc. 29 32 ! -
palm/trunk/SOURCE/radiation_model_mod.f90
r3900 r3943 28 28 ! ----------------- 29 29 ! $Id$ 30 ! Missing blank characteer added. 31 ! 32 ! 3900 2019-04-16 15:17:43Z suehring 30 33 ! Fixed initialization problem 31 34 ! … … 8331 8334 8332 8335 WRITE ( message_string, * ) 'Precalculated', ndsidir, ' solar positions', & 8333 ' from', it, ' timesteps.'8336 ' from', it, ' timesteps.' 8334 8337 CALL message( 'radiation_presimulate_solar_pos', 'UI0013', 0, 0, 0, 6, 0 ) 8335 8338 -
palm/trunk/SOURCE/sum_up_3d_data.f90
r3933 r3943 25 25 ! ----------------- 26 26 ! $Id$ 27 ! Added output of qsws_av for green roofs. 28 ! 29 ! 3933 2019-04-25 12:33:20Z kanani 27 30 ! Formatting 28 31 ! … … 792 795 !-- In case of land- and urban-surfaces, convert fluxes into 793 796 !-- dynamic units. 797 !-- Question (maronga): are the .NOT. statements really required? 794 798 IF ( ALLOCATED( qsws_av ) ) THEN 795 799 DO i = nxl, nxr … … 811 815 qsws_av(j,i) = qsws_av(j,i) + & 812 816 surf_lsm_h%qsws(m) * l_v 817 ELSEIF ( match_usm .AND. .NOT. match_lsm ) THEN 818 m = surf_usm_h%end_index(j,i) 819 qsws_av(j,i) = qsws_av(j,i) + & 820 surf_usm_h%qsws(m) * l_v 813 821 ENDIF 814 822 ENDDO -
palm/trunk/SOURCE/surface_mod.f90
r3933 r3943 26 26 ! ----------------- 27 27 ! $Id$ 28 ! Removed qsws_eb as it is no longer needed. 29 ! 30 ! 3933 2019-04-25 12:33:20Z kanani 28 31 ! Add (de)allocation of pt_2m, 29 32 ! bugfix: initialize pt_2m … … 448 451 REAL(wp), DIMENSION(:), ALLOCATABLE :: lambda_surface_u !< coupling between surface and soil (depends on vegetation type) (W/m2/K) 449 452 REAL(wp), DIMENSION(:), ALLOCATABLE :: lambda_surface_s !< coupling between surface and soil (depends on vegetation type) (W/m2/K) 450 REAL(wp), DIMENSION(:), ALLOCATABLE :: qsws_eb !<451 453 REAL(wp), DIMENSION(:), ALLOCATABLE :: qsws_liq !< surface flux of latent heat (liquid water portion) 452 454 REAL(wp), DIMENSION(:), ALLOCATABLE :: qsws_soil !< surface flux of latent heat (soil portion) … … 580 582 REAL(wp), DIMENSION(:), ALLOCATABLE :: iwghf_eb_window_av !< indoor average of wghf_eb window 581 583 REAL(wp), DIMENSION(:), ALLOCATABLE :: wshf_eb_av !< average of wshf_eb 582 REAL(wp), DIMENSION(:), ALLOCATABLE :: qsws_ eb_av !< average of qsws_eb584 REAL(wp), DIMENSION(:), ALLOCATABLE :: qsws_av !< average of qsws 583 585 REAL(wp), DIMENSION(:), ALLOCATABLE :: qsws_veg_av !< average of qsws_veg_eb 584 586 REAL(wp), DIMENSION(:), ALLOCATABLE :: qsws_liq_av !< average of qsws_liq_eb -
palm/trunk/SOURCE/urban_surface_mod.f90
r3933 r3943 28 28 ! ----------------- 29 29 ! $Id$ 30 ! Removed qsws_eb. Bugfix in calculation of qsws. 31 ! 32 ! 3933 2019-04-25 12:33:20Z kanani 30 33 ! Remove allocation of pt_2m, this is done in surface_mod now (surfaces%pt_2m) 31 34 ! … … 1161 1164 ALLOCATE ( surf_usm_h%r_canopy(1:surf_usm_h%ns) ) 1162 1165 ALLOCATE ( surf_usm_h%r_canopy_min(1:surf_usm_h%ns) ) 1163 ALLOCATE ( surf_usm_h%qsws_eb(1:surf_usm_h%ns) )1164 1166 ALLOCATE ( surf_usm_h%pt_10cm(1:surf_usm_h%ns) ) 1165 1167 … … 1171 1173 ALLOCATE ( surf_usm_v(l)%qsws_liq(1:surf_usm_v(l)%ns) ) 1172 1174 ALLOCATE ( surf_usm_v(l)%qsws_veg(1:surf_usm_v(l)%ns) ) 1173 ALLOCATE ( surf_usm_v(l)%qsws_eb(1:surf_usm_v(l)%ns) )1174 1175 ALLOCATE ( surf_usm_v(l)%r_canopy(1:surf_usm_v(l)%ns) ) 1175 1176 ALLOCATE ( surf_usm_v(l)%r_canopy_min(1:surf_usm_v(l)%ns) ) … … 1532 1533 !-- array of latent heat flux from surfaces 1533 1534 !-- land surfaces 1534 IF ( l == -1 .AND. .NOT. ALLOCATED(surf_usm_h%qsws_ eb_av) ) THEN1535 ALLOCATE ( surf_usm_h%qsws_ eb_av(1:surf_usm_h%ns) )1536 surf_usm_h%qsws_ eb_av = 0.0_wp1535 IF ( l == -1 .AND. .NOT. ALLOCATED(surf_usm_h%qsws_av) ) THEN 1536 ALLOCATE ( surf_usm_h%qsws_av(1:surf_usm_h%ns) ) 1537 surf_usm_h%qsws_av = 0.0_wp 1537 1538 ELSE 1538 IF ( .NOT. ALLOCATED(surf_usm_v(l)%qsws_ eb_av) ) THEN1539 ALLOCATE ( surf_usm_v(l)%qsws_ eb_av(1:surf_usm_v(l)%ns) )1540 surf_usm_v(l)%qsws_ eb_av = 0.0_wp1539 IF ( .NOT. ALLOCATED(surf_usm_v(l)%qsws_av) ) THEN 1540 ALLOCATE ( surf_usm_v(l)%qsws_av(1:surf_usm_v(l)%ns) ) 1541 surf_usm_v(l)%qsws_av = 0.0_wp 1541 1542 ENDIF 1542 1543 ENDIF … … 1797 1798 IF ( l == -1 ) THEN 1798 1799 DO m = 1, surf_usm_h%ns 1799 surf_usm_h%qsws_ eb_av(m) = &1800 surf_usm_h%qsws_ eb_av(m) + &1801 surf_usm_h%qsws _eb(m)1800 surf_usm_h%qsws_av(m) = & 1801 surf_usm_h%qsws_av(m) + & 1802 surf_usm_h%qsws(m) * l_v 1802 1803 ENDDO 1803 1804 ELSE 1804 1805 DO m = 1, surf_usm_v(l)%ns 1805 surf_usm_v(l)%qsws_ eb_av(m) = &1806 surf_usm_v(l)%qsws_ eb_av(m) + &1807 surf_usm_v(l)%qsws _eb(m)1806 surf_usm_v(l)%qsws_av(m) = & 1807 surf_usm_v(l)%qsws_av(m) + & 1808 surf_usm_v(l)%qsws(m) * l_v 1808 1809 ENDDO 1809 1810 ENDIF … … 2095 2096 IF ( l == -1 ) THEN 2096 2097 DO m = 1, surf_usm_h%ns 2097 surf_usm_h%qsws_ eb_av(m) = &2098 surf_usm_h%qsws_ eb_av(m) / &2098 surf_usm_h%qsws_av(m) = & 2099 surf_usm_h%qsws_av(m) / & 2099 2100 REAL( average_count_3d, kind=wp ) 2100 2101 ENDDO 2101 2102 ELSE 2102 2103 DO m = 1, surf_usm_v(l)%ns 2103 surf_usm_v(l)%qsws_ eb_av(m) = &2104 surf_usm_v(l)%qsws_ eb_av(m) / &2104 surf_usm_v(l)%qsws_av(m) = & 2105 surf_usm_v(l)%qsws_av(m) / & 2105 2106 REAL( average_count_3d, kind=wp ) 2106 2107 ENDDO … … 2432 2433 CHARACTER(LEN=2) :: ls 2433 2434 CHARACTER(LEN=varnamelength) :: var !< TRIM(variable) 2434 INTEGER(iwp), PARAMETER :: nl1 = 1 4!< number of directional usm variables2435 INTEGER(iwp), PARAMETER :: nl1 = 15 !< number of directional usm variables 2435 2436 CHARACTER(LEN=varnamelength), DIMENSION(nl1) :: varlist1 = & !< list of directional usm variables 2436 2437 (/'usm_wshf ', & … … 2447 2448 'usm_t_surf_green ', & 2448 2449 'usm_t_green ', & 2450 'usm_qsws ', & 2449 2451 'usm_theta_10cm '/) 2450 2452 … … 2801 2803 j = surf_usm_h%j(m) 2802 2804 k = surf_usm_h%k(m) 2803 temp_pf(k,j,i) = surf_usm_h%qsws _eb(m)2805 temp_pf(k,j,i) = surf_usm_h%qsws(m) * l_v 2804 2806 ENDDO 2805 2807 ELSE … … 2809 2811 j = surf_usm_v(l)%j(m) 2810 2812 k = surf_usm_v(l)%k(m) 2811 temp_pf(k,j,i) = surf_usm_v(l)%qsws _eb(m)2813 temp_pf(k,j,i) = surf_usm_v(l)%qsws(m) * l_v 2812 2814 ENDDO 2813 2815 ENDIF … … 2818 2820 j = surf_usm_h%j(m) 2819 2821 k = surf_usm_h%k(m) 2820 temp_pf(k,j,i) = surf_usm_h%qsws_ eb_av(m)2822 temp_pf(k,j,i) = surf_usm_h%qsws_av(m) 2821 2823 ENDDO 2822 2824 ELSE … … 2826 2828 j = surf_usm_v(l)%j(m) 2827 2829 k = surf_usm_v(l)%k(m) 2828 temp_pf(k,j,i) = surf_usm_v(l)%qsws_ eb_av(m)2830 temp_pf(k,j,i) = surf_usm_v(l)%qsws_av(m) 2829 2831 ENDDO 2830 2832 ENDIF … … 8073 8075 8074 8076 IF (surf_usm_h%frac(ind_pav_green,m) > 0.0_wp) THEN 8075 8077 8078 8076 8079 IF ( humidity ) THEN 8077 surf_usm_h%qsws _eb(m) = - f_qsws * ( qv1 - q_s + dq_s_dt&8080 surf_usm_h%qsws(m) = - f_qsws * ( qv1 - q_s + dq_s_dt & 8078 8081 * t_surf_green_h(m) - dq_s_dt * & 8079 8082 t_surf_green_h_p(m) ) 8080 8081 surf_usm_h%qsws(m) = surf_usm_h%qsws_eb(m) / rho_lv8082 8083 8083 8084 surf_usm_h%qsws_veg(m) = - f_qsws_veg * ( qv1 - q_s & … … 8088 8089 + dq_s_dt * t_surf_green_h(m) - dq_s_dt & 8089 8090 * t_surf_green_h_p(m) ) 8091 8090 8092 ENDIF 8091 8093 … … 8528 8530 8529 8531 IF ( humidity ) THEN 8530 surf_usm_v(l)%qsws _eb(m) = - f_qsws * ( qv1 - q_s + dq_s_dt&8532 surf_usm_v(l)%qsws(m) = - f_qsws * ( qv1 - q_s + dq_s_dt & 8531 8533 * t_surf_green_v(l)%t(m) - dq_s_dt * & 8532 8534 t_surf_green_v_p(l)%t(m) ) 8533 8535 8534 surf_usm_v(l)%qsws(m) = surf_usm_v(l)%qsws _eb(m) / rho_lv8536 surf_usm_v(l)%qsws(m) = surf_usm_v(l)%qsws(m) / l_v 8535 8537 8536 8538 surf_usm_v(l)%qsws_veg(m) = - f_qsws_veg * ( qv1 - q_s &
Note: See TracChangeset
for help on using the changeset viewer.