@@ -229,6 +229,7 @@ subroutine BuildingTemperature (bounds, num_urbanl, filter_urbanl, num_nolakec,
229
229
integer , parameter :: neq = 5 ! number of equation/unknowns
230
230
integer :: fc,fl,c,l ! indices
231
231
real (r8 ) :: dtime ! land model time step (s)
232
+ real (r8 ) :: building_hwr(bounds% begl:bounds% endl) ! building height to building width ratio (-)
232
233
real (r8 ) :: t_roof_inner_bef(bounds% begl:bounds% endl) ! roof inside surface temperature at previous time step (K)
233
234
real (r8 ) :: t_sunw_inner_bef(bounds% begl:bounds% endl) ! sunwall inside surface temperature at previous time step (K)
234
235
real (r8 ) :: t_shdw_inner_bef(bounds% begl:bounds% endl) ! shadewall inside surface temperature at previous time step (K)
@@ -341,6 +342,7 @@ subroutine BuildingTemperature (bounds, num_urbanl, filter_urbanl, num_nolakec,
341
342
! See clm_varcon.F90
342
343
! 3. Set inner surface emissivities (Bueno et al. 2012, GMD).
343
344
! 4. Set concrete floor properties (Salamanca et al. 2010, TAC).
345
+ ! 5. Calculate building height to building width ratio
344
346
do fl = 1 ,num_urbanl
345
347
l = filter_urbanl(fl)
346
348
if (urbpoi(l)) then
@@ -373,13 +375,15 @@ subroutine BuildingTemperature (bounds, num_urbanl, filter_urbanl, num_nolakec,
373
375
cv_floori(l) = (dz_floori(l) * cp_floori(l)) / dtime
374
376
! Density of dry air at standard pressure and t_building (kg m-3)
375
377
rho_dair(l) = pstd / (rair* t_building_bef(l))
378
+ ! Building height to building width ratio
379
+ building_hwr(l) = canyon_hwr(l)* (1._r8 - wtlunit_roof(l))/ wtlunit_roof(l)
376
380
end if
377
381
end do
378
382
379
383
! Get terms from soil temperature equations to compute conduction flux
380
384
! Negative is toward surface - heat added
381
385
! Note that the conduction flux here is in W m-2 wall area but for purposes of solving the set of
382
- ! simultaneous equations this must be converted to W m-2 ground area. This is done below when
386
+ ! simultaneous equations this must be converted to W m-2 floor area. This is done below when
383
387
! setting up the equation coefficients.
384
388
385
389
do fc = 1 ,num_nolakec
@@ -413,14 +417,14 @@ subroutine BuildingTemperature (bounds, num_urbanl, filter_urbanl, num_nolakec,
413
417
l = filter_urbanl(fl)
414
418
if (urbpoi(l)) then
415
419
416
- vf_rf(l) = sqrt (1._r8 + canyon_hwr (l)** 2._r8 ) - canyon_hwr (l)
420
+ vf_rf(l) = sqrt (1._r8 + building_hwr (l)** 2._r8 ) - building_hwr (l)
417
421
vf_fr(l) = vf_rf(l)
418
422
419
423
! This view factor implicitly converts from per unit wall area to per unit floor area
420
424
vf_wf(l) = 0.5_r8 * (1._r8 - vf_rf(l))
421
425
422
426
! This view factor implicitly converts from per unit floor area to per unit wall area
423
- vf_fw(l) = vf_wf(l) / canyon_hwr (l)
427
+ vf_fw(l) = vf_wf(l) / building_hwr (l)
424
428
425
429
! This view factor implicitly converts from per unit roof area to per unit wall area
426
430
vf_rw(l) = vf_fw(l)
@@ -515,8 +519,8 @@ subroutine BuildingTemperature (bounds, num_urbanl, filter_urbanl, num_nolakec,
515
519
- 4._r8 * em_roofi(l)* sb* t_roof_inner_bef(l)** 3._r8 * vf_rw(l)* (1._r8 - em_shdwi(l))* vf_ww(l) &
516
520
- 4._r8 * em_roofi(l)* sb* t_roof_inner_bef(l)** 3._r8 * vf_rf(l)* (1._r8 - em_floori(l))* vf_fw(l)
517
521
518
- a(2 ,2 ) = 0.5_r8 * hcv_sunwi(l)* canyon_hwr (l) &
519
- + 0.5_r8 * tk_sunw_innerl(l)/ (zi_sunw_innerl(l) - z_sunw_innerl(l))* canyon_hwr (l) &
522
+ a(2 ,2 ) = 0.5_r8 * hcv_sunwi(l)* building_hwr (l) &
523
+ + 0.5_r8 * tk_sunw_innerl(l)/ (zi_sunw_innerl(l) - z_sunw_innerl(l))* building_hwr (l) &
520
524
+ 4._r8 * em_sunwi(l)* sb* t_sunw_inner_bef(l)** 3._r8 &
521
525
- 4._r8 * em_sunwi(l)* sb* t_sunw_inner_bef(l)** 3._r8 * vf_wr(l)* (1._r8 - em_roofi(l))* vf_rw(l) &
522
526
- 4._r8 * em_sunwi(l)* sb* t_sunw_inner_bef(l)** 3._r8 * vf_ww(l)* (1._r8 - em_shdwi(l))* vf_ww(l) &
@@ -529,11 +533,11 @@ subroutine BuildingTemperature (bounds, num_urbanl, filter_urbanl, num_nolakec,
529
533
a(2 ,4 ) = - 4._r8 * em_sunwi(l)* em_floori(l)* sb* t_floor_bef(l)** 3._r8 * vf_fw(l) &
530
534
- 4._r8 * em_floori(l)* sb* t_floor_bef(l)** 3._r8 * vf_fr(l)* (1._r8 - em_roofi(l))* vf_rw(l) &
531
535
- 4._r8 * em_floori(l)* sb* t_floor_bef(l)** 3._r8 * vf_fw(l)* (1._r8 - em_shdwi(l))* vf_ww(l)
532
- a(2 ,5 ) = - 0.5_r8 * hcv_sunwi(l)* canyon_hwr (l)
536
+ a(2 ,5 ) = - 0.5_r8 * hcv_sunwi(l)* building_hwr (l)
533
537
534
- result(2 ) = 0.5_r8 * tk_sunw_innerl(l)* t_sunw_innerl(l)/ (zi_sunw_innerl(l) - z_sunw_innerl(l))* canyon_hwr (l) &
538
+ result(2 ) = 0.5_r8 * tk_sunw_innerl(l)* t_sunw_innerl(l)/ (zi_sunw_innerl(l) - z_sunw_innerl(l))* building_hwr (l) &
535
539
- 0.5_r8 * tk_sunw_innerl(l)* (t_sunw_inner_bef(l)- t_sunw_innerl_bef(l))/ (zi_sunw_innerl(l) &
536
- - z_sunw_innerl(l))* canyon_hwr (l) &
540
+ - z_sunw_innerl(l))* building_hwr (l) &
537
541
- 3._r8 * em_sunwi(l)* em_roofi(l)* sb* t_roof_inner_bef(l)** 4._r8 * vf_rw(l) &
538
542
- 3._r8 * em_sunwi(l)* em_shdwi(l)* sb* t_shdw_inner_bef(l)** 4._r8 * vf_ww(l) &
539
543
- 3._r8 * em_sunwi(l)* em_floori(l)* sb* t_floor_bef(l)** 4._r8 * vf_fw(l) &
@@ -547,7 +551,7 @@ subroutine BuildingTemperature (bounds, num_urbanl, filter_urbanl, num_nolakec,
547
551
- 3._r8 * em_roofi(l)* sb* t_roof_inner_bef(l)** 4._r8 * vf_rf(l)* (1._r8 - em_floori(l))* vf_fw(l) &
548
552
- 3._r8 * em_floori(l)* sb* t_floor_bef(l)** 4._r8 * vf_fr(l)* (1._r8 - em_roofi(l))* vf_rw(l) &
549
553
- 3._r8 * em_floori(l)* sb* t_floor_bef(l)** 4._r8 * vf_fw(l)* (1._r8 - em_shdwi(l))* vf_ww(l) &
550
- - 0.5_r8 * hcv_sunwi(l)* (t_sunw_inner_bef(l) - t_building_bef(l))* canyon_hwr (l)
554
+ - 0.5_r8 * hcv_sunwi(l)* (t_sunw_inner_bef(l) - t_building_bef(l))* building_hwr (l)
551
555
552
556
! SHADEWALL
553
557
a(3 ,1 ) = - 4._r8 * em_shdwi(l)* em_roofi(l)* sb* t_roof_inner_bef(l)** 3._r8 * vf_rw(l) &
@@ -558,8 +562,8 @@ subroutine BuildingTemperature (bounds, num_urbanl, filter_urbanl, num_nolakec,
558
562
- 4._r8 * em_sunwi(l)* sb* t_sunw_inner_bef(l)** 3._r8 * vf_wf(l)* (1._r8 - em_floori(l))* vf_fw(l) &
559
563
- 4._r8 * em_sunwi(l)* sb* t_sunw_inner_bef(l)** 3._r8 * vf_wr(l)* (1._r8 - em_roofi(l))* vf_rw(l)
560
564
561
- a(3 ,3 ) = 0.5_r8 * hcv_shdwi(l)* canyon_hwr (l) &
562
- + 0.5_r8 * tk_shdw_innerl(l)/ (zi_shdw_innerl(l) - z_shdw_innerl(l))* canyon_hwr (l) &
565
+ a(3 ,3 ) = 0.5_r8 * hcv_shdwi(l)* building_hwr (l) &
566
+ + 0.5_r8 * tk_shdw_innerl(l)/ (zi_shdw_innerl(l) - z_shdw_innerl(l))* building_hwr (l) &
563
567
+ 4._r8 * em_shdwi(l)* sb* t_shdw_inner_bef(l)** 3._r8 &
564
568
- 4._r8 * em_shdwi(l)* sb* t_shdw_inner_bef(l)** 3._r8 * vf_wr(l)* (1._r8 - em_roofi(l))* vf_rw(l) &
565
569
- 4._r8 * em_shdwi(l)* sb* t_shdw_inner_bef(l)** 3._r8 * vf_ww(l)* (1._r8 - em_sunwi(l))* vf_ww(l) &
@@ -569,11 +573,11 @@ subroutine BuildingTemperature (bounds, num_urbanl, filter_urbanl, num_nolakec,
569
573
- 4._r8 * em_floori(l)* sb* t_floor_bef(l)** 3._r8 * vf_fr(l)* (1._r8 - em_roofi(l))* vf_rw(l) &
570
574
- 4._r8 * em_floori(l)* sb* t_floor_bef(l)** 3._r8 * vf_fw(l)* (1._r8 - em_sunwi(l))* vf_ww(l)
571
575
572
- a(3 ,5 ) = - 0.5_r8 * hcv_shdwi(l)* canyon_hwr (l)
576
+ a(3 ,5 ) = - 0.5_r8 * hcv_shdwi(l)* building_hwr (l)
573
577
574
- result(3 ) = 0.5_r8 * tk_shdw_innerl(l)* t_shdw_innerl(l)/ (zi_shdw_innerl(l) - z_shdw_innerl(l))* canyon_hwr (l) &
578
+ result(3 ) = 0.5_r8 * tk_shdw_innerl(l)* t_shdw_innerl(l)/ (zi_shdw_innerl(l) - z_shdw_innerl(l))* building_hwr (l) &
575
579
- 0.5_r8 * tk_shdw_innerl(l)* (t_shdw_inner_bef(l)- t_shdw_innerl_bef(l))/ (zi_shdw_innerl(l) &
576
- - z_shdw_innerl(l))* canyon_hwr (l) &
580
+ - z_shdw_innerl(l))* building_hwr (l) &
577
581
- 3._r8 * em_shdwi(l)* em_roofi(l)* sb* t_roof_inner_bef(l)** 4._r8 * vf_rw(l) &
578
582
- 3._r8 * em_shdwi(l)* em_sunwi(l)* sb* t_sunw_inner_bef(l)** 4._r8 * vf_ww(l) &
579
583
- 3._r8 * em_shdwi(l)* em_floori(l)* sb* t_floor_bef(l)** 4._r8 * vf_fw(l) &
@@ -587,7 +591,7 @@ subroutine BuildingTemperature (bounds, num_urbanl, filter_urbanl, num_nolakec,
587
591
- 3._r8 * em_roofi(l)* sb* t_roof_inner_bef(l)** 4._r8 * vf_rf(l)* (1._r8 - em_floori(l))* vf_fw(l) &
588
592
- 3._r8 * em_floori(l)* sb* t_floor_bef(l)** 4._r8 * vf_fr(l)* (1._r8 - em_roofi(l))* vf_rw(l) &
589
593
- 3._r8 * em_floori(l)* sb* t_floor_bef(l)** 4._r8 * vf_fw(l)* (1._r8 - em_sunwi(l))* vf_ww(l) &
590
- - 0.5_r8 * hcv_shdwi(l)* (t_shdw_inner_bef(l) - t_building_bef(l))* canyon_hwr (l)
594
+ - 0.5_r8 * hcv_shdwi(l)* (t_shdw_inner_bef(l) - t_building_bef(l))* building_hwr (l)
591
595
592
596
! FLOOR
593
597
a(4 ,1 ) = - 4._r8 * em_floori(l)* em_roofi(l)* sb* t_roof_inner_bef(l)** 3._r8 * vf_rf(l) &
@@ -628,24 +632,24 @@ subroutine BuildingTemperature (bounds, num_urbanl, filter_urbanl, num_nolakec,
628
632
629
633
! Building air temperature
630
634
a(5 ,1 ) = - 0.5_r8 * hcv_roofi(l)
631
- a(5 ,2 ) = - 0.5_r8 * hcv_sunwi(l)* canyon_hwr (l)
635
+ a(5 ,2 ) = - 0.5_r8 * hcv_sunwi(l)* building_hwr (l)
632
636
633
- a(5 ,3 ) = - 0.5_r8 * hcv_shdwi(l)* canyon_hwr (l)
637
+ a(5 ,3 ) = - 0.5_r8 * hcv_shdwi(l)* building_hwr (l)
634
638
635
639
a(5 ,4 ) = - 0.5_r8 * hcv_floori(l)
636
640
637
641
a(5 ,5 ) = ((ht_roof(l)* rho_dair(l)* cpair)/ dtime) + &
638
642
((ht_roof(l)* vent_ach)/ 3600._r8 )* rho_dair(l)* cpair + &
639
643
0.5_r8 * hcv_roofi(l) + &
640
- 0.5_r8 * hcv_sunwi(l)* canyon_hwr (l) + &
641
- 0.5_r8 * hcv_shdwi(l)* canyon_hwr (l) + &
644
+ 0.5_r8 * hcv_sunwi(l)* building_hwr (l) + &
645
+ 0.5_r8 * hcv_shdwi(l)* building_hwr (l) + &
642
646
0.5_r8 * hcv_floori(l)
643
647
644
648
result(5 ) = (ht_roof(l)* rho_dair(l)* cpair/ dtime)* t_building_bef(l) &
645
649
+ ((ht_roof(l)* vent_ach)/ 3600._r8 )* rho_dair(l)* cpair* taf(l) &
646
650
+ 0.5_r8 * hcv_roofi(l)* (t_roof_inner_bef(l) - t_building_bef(l)) &
647
- + 0.5_r8 * hcv_sunwi(l)* (t_sunw_inner_bef(l) - t_building_bef(l))* canyon_hwr (l) &
648
- + 0.5_r8 * hcv_shdwi(l)* (t_shdw_inner_bef(l) - t_building_bef(l))* canyon_hwr (l) &
651
+ + 0.5_r8 * hcv_sunwi(l)* (t_sunw_inner_bef(l) - t_building_bef(l))* building_hwr (l) &
652
+ + 0.5_r8 * hcv_shdwi(l)* (t_shdw_inner_bef(l) - t_building_bef(l))* building_hwr (l) &
649
653
+ 0.5_r8 * hcv_floori(l)* (t_floor_bef(l) - t_building_bef(l))
650
654
651
655
! Solve equations
@@ -826,7 +830,7 @@ subroutine BuildingTemperature (bounds, num_urbanl, filter_urbanl, num_nolakec,
826
830
+ em_floori(l)* sb* t_floor_bef(l)** 4._r8 &
827
831
+ 4._r8 * em_floori(l)* sb* t_floor_bef(l)** 3 .* (t_floor(l) - t_floor_bef(l))
828
832
829
- qrd_building(l) = qrd_roof(l) + canyon_hwr (l)* (qrd_sunw(l) + qrd_shdw(l)) + qrd_floor(l)
833
+ qrd_building(l) = qrd_roof(l) + building_hwr (l)* (qrd_sunw(l) + qrd_shdw(l)) + qrd_floor(l)
830
834
831
835
if (abs (qrd_building(l)) > .10_r8 ) then
832
836
write (iulog,* ) ' urban inside building net longwave radiation balance error ' ,qrd_building(l)
@@ -851,7 +855,7 @@ subroutine BuildingTemperature (bounds, num_urbanl, filter_urbanl, num_nolakec,
851
855
qcd_sunw(l) = 0.5_r8 * tk_sunw_innerl(l)* (t_sunw_inner(l) - t_sunw_innerl(l))/ (zi_sunw_innerl(l) - z_sunw_innerl(l)) &
852
856
+ 0.5_r8 * tk_sunw_innerl(l)* (t_sunw_inner_bef(l) - t_sunw_innerl_bef(l))/ (zi_sunw_innerl(l) &
853
857
- z_sunw_innerl(l))
854
- enrgy_bal_sunw(l) = qrd_sunw(l) + qcv_sunw(l)* canyon_hwr (l) + qcd_sunw(l)* canyon_hwr (l)
858
+ enrgy_bal_sunw(l) = qrd_sunw(l) + qcv_sunw(l)* building_hwr (l) + qcd_sunw(l)* building_hwr (l)
855
859
if (abs (enrgy_bal_sunw(l)) > .10_r8 ) then
856
860
write (iulog,* ) ' urban inside sunwall energy balance error ' ,enrgy_bal_sunw(l)
857
861
write (iulog,* ) ' clm model is stopping'
@@ -863,7 +867,7 @@ subroutine BuildingTemperature (bounds, num_urbanl, filter_urbanl, num_nolakec,
863
867
qcd_shdw(l) = 0.5_r8 * tk_shdw_innerl(l)* (t_shdw_inner(l) - t_shdw_innerl(l))/ (zi_shdw_innerl(l) - z_shdw_innerl(l)) &
864
868
+ 0.5_r8 * tk_shdw_innerl(l)* (t_shdw_inner_bef(l) - t_shdw_innerl_bef(l))/ (zi_shdw_innerl(l) &
865
869
- z_shdw_innerl(l))
866
- enrgy_bal_shdw(l) = qrd_shdw(l) + qcv_shdw(l)* canyon_hwr (l) + qcd_shdw(l)* canyon_hwr (l)
870
+ enrgy_bal_shdw(l) = qrd_shdw(l) + qcv_shdw(l)* building_hwr (l) + qcd_shdw(l)* building_hwr (l)
867
871
if (abs (enrgy_bal_shdw(l)) > .10_r8 ) then
868
872
write (iulog,* ) ' urban inside shadewall energy balance error ' ,enrgy_bal_shdw(l)
869
873
write (iulog,* ) ' clm model is stopping'
@@ -884,10 +888,10 @@ subroutine BuildingTemperature (bounds, num_urbanl, filter_urbanl, num_nolakec,
884
888
- ht_roof(l)* (vent_ach/ 3600._r8 )* rho_dair(l)* cpair* (taf(l) - t_building(l)) &
885
889
- 0.5_r8 * hcv_roofi(l)* (t_roof_inner(l) - t_building(l)) &
886
890
- 0.5_r8 * hcv_roofi(l)* (t_roof_inner_bef(l) - t_building_bef(l)) &
887
- - 0.5_r8 * hcv_sunwi(l)* (t_sunw_inner(l) - t_building(l))* canyon_hwr (l) &
888
- - 0.5_r8 * hcv_sunwi(l)* (t_sunw_inner_bef(l) - t_building_bef(l))* canyon_hwr (l) &
889
- - 0.5_r8 * hcv_shdwi(l)* (t_shdw_inner(l) - t_building(l))* canyon_hwr (l) &
890
- - 0.5_r8 * hcv_shdwi(l)* (t_shdw_inner_bef(l) - t_building_bef(l))* canyon_hwr (l) &
891
+ - 0.5_r8 * hcv_sunwi(l)* (t_sunw_inner(l) - t_building(l))* building_hwr (l) &
892
+ - 0.5_r8 * hcv_sunwi(l)* (t_sunw_inner_bef(l) - t_building_bef(l))* building_hwr (l) &
893
+ - 0.5_r8 * hcv_shdwi(l)* (t_shdw_inner(l) - t_building(l))* building_hwr (l) &
894
+ - 0.5_r8 * hcv_shdwi(l)* (t_shdw_inner_bef(l) - t_building_bef(l))* building_hwr (l) &
891
895
- 0.5_r8 * hcv_floori(l)* (t_floor(l) - t_building(l)) &
892
896
- 0.5_r8 * hcv_floori(l)* (t_floor_bef(l) - t_building_bef(l))
893
897
if (abs (enrgy_bal_buildair(l)) > .10_r8 ) then
0 commit comments