setup structure

This commit is contained in:
pilar 2020-05-01 19:59:09 +02:00
parent a23cb89522
commit d1b8657d36
23 changed files with 66717 additions and 0 deletions

72
data/us_archetypes.xml Normal file
View File

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<archetypes reference_library_name="us_library" >
<archetype id="1" name="archetype 1" year_of_construction_reference="2004" building_type="1" climate_zone="10">
<constructions>
<construction id="1" type="exterior wall" >
<window_ratio units="-">0</window_ratio>
<window/>
</construction>
<construction id="3" type="exterior slab" >
<window_ratio units="-">0</window_ratio>
<window/>
</construction>
<construction id="5" type="roof" >
<window_ratio units="-">0</window_ratio>
<window/>
</construction>
</constructions>
<average_store_height units="m">1</average_store_height>
<number_of_storeys units="-">2</number_of_storeys>
<thermal_capacity units="kJ/K m2">3</thermal_capacity>
<extra_loses_due_to_thermal_bridges units="W/K m2">4</extra_loses_due_to_thermal_bridges>
<indirect_heated_ratio units="-">5</indirect_heated_ratio>
<infiltration_rate_for_ventilation_system_off units="ACH">6</infiltration_rate_for_ventilation_system_off>
<infiltration_rate_for_ventilation_system_on units="ACH">7</infiltration_rate_for_ventilation_system_on>
</archetype>
<archetype id="2" name="archetype 2" year_of_construction_reference="2009" building_type="2" climate_zone="10">
<constructions>
<construction id="2" type="exterior wall" >
<window_ratio units="-">0.3</window_ratio>
<window>3</window>
</construction>
<construction id="3" type="exterior slab">
<window_ratio units="-">0</window_ratio>
<window/>
</construction>
<construction id="4" type="roof" >
<window_ratio units="-">0</window_ratio>
<window/>
</construction>
</constructions>
<average_store_height units="m">3.6</average_store_height>
<number_of_storeys units="-">3</number_of_storeys>
<thermal_capacity units="kJ/K m2">3.6</thermal_capacity>
<extra_loses_due_to_thermal_bridges units="W/K m2">0.3</extra_loses_due_to_thermal_bridges>
<indirect_heated_ratio units="-">0.2</indirect_heated_ratio>
<infiltration_rate_for_ventilation_system_off units="ACH">1</infiltration_rate_for_ventilation_system_off>
<infiltration_rate_for_ventilation_system_on units="ACH">0.2</infiltration_rate_for_ventilation_system_on>
</archetype>
<archetype id="3" name="archetype 3" year_of_construction_reference="2009" building_type="1" climate_zone="10">
<constructions>
<construction id="2" type="exterior wall" >
<window_ratio units="-">0</window_ratio>
<window/>
</construction>
<construction id="3" type="exterior slab" >
<window_ratio units="-">0</window_ratio>
<window/>
</construction>
<construction id="4" type="roof" >
<window_ratio units="-">0</window_ratio>
<window/>
</construction>
</constructions>
<average_store_height units="m">3.6</average_store_height>
<number_of_storeys units="-">3</number_of_storeys>
<thermal_capacity units="kJ/K m2">3.6</thermal_capacity>
<extra_loses_due_to_thermal_bridges units="W/K m2">0.3</extra_loses_due_to_thermal_bridges>
<indirect_heated_ratio units="-">0.2</indirect_heated_ratio>
<infiltration_rate_for_ventilation_system_off units="ACH">1</infiltration_rate_for_ventilation_system_off>
<infiltration_rate_for_ventilation_system_on units="ACH">0.2</infiltration_rate_for_ventilation_system_on>
</archetype>
</archetypes>

551
data/us_library.xml Normal file
View File

@ -0,0 +1,551 @@
<?xml version="1.0" encoding="utf-8"?>
<library name="us_library">
<windows>
<window type="skylight" id="1" name="189.1-2009 Nonres 4B Skylight without Curb">
<shgc>0.32</shgc>
<frame_ratio units="-">0</frame_ratio>
<thickness units="m">0.003</thickness>
<solar_transmittance_at_normal_incidence units="-">0.301483</solar_transmittance_at_normal_incidence>
<front_side_solar_transmittance_at_normal_incidence units="-">0.648517</front_side_solar_transmittance_at_normal_incidence>
<back_side_solar_transmittance_at_normal_incidence units="-">0.648517</back_side_solar_transmittance_at_normal_incidence>
<conductivity units="W/m K">0.0133144</conductivity>
</window>
<window type="skylight" id="2" name="90.1-2004 Nonres 4B Skylight without Curb">
<shgc>0.49</shgc>
<frame_ratio units="-">0</frame_ratio>
<thickness units="m">0.003</thickness>
<solar_transmittance_at_normal_incidence units="-">0.481761</solar_transmittance_at_normal_incidence>
<front_side_solar_transmittance_at_normal_incidence units="-">0.468239</front_side_solar_transmittance_at_normal_incidence>
<back_side_solar_transmittance_at_normal_incidence units="-">0.468239</back_side_solar_transmittance_at_normal_incidence>
<conductivity units="W/m K">0.03026</conductivity>
</window>
<window type="window" id="3" name="189.1-2009 Nonres 4B Window Nonmetal framing">
<shgc>0.35</shgc>
<frame_ratio units="-">0</frame_ratio>
<thickness units="m">0.003</thickness>
<solar_transmittance_at_normal_incidence units="-">0.328881</solar_transmittance_at_normal_incidence>
<front_side_solar_transmittance_at_normal_incidence units="-">0.621119</front_side_solar_transmittance_at_normal_incidence>
<back_side_solar_transmittance_at_normal_incidence units="-">0.621119</back_side_solar_transmittance_at_normal_incidence>
<conductivity units="W/m K">0.0071399</conductivity>
</window>
<window type="window" id="4" name="90.1-2004 Nonres 4B Window Fixed">
<shgc>0.36</shgc>
<frame_ratio units="-">0</frame_ratio>
<thickness units="m">0.003</thickness>
<solar_transmittance_at_normal_incidence units="-">0.354957</solar_transmittance_at_normal_incidence>
<front_side_solar_transmittance_at_normal_incidence units="-">0.595043</front_side_solar_transmittance_at_normal_incidence>
<back_side_solar_transmittance_at_normal_incidence units="-">0.595043</back_side_solar_transmittance_at_normal_incidence>
<conductivity units="W/m K">0.0134755</conductivity>
</window>
</windows>
<materials>
<material id="1" name="MAT-CC05 8 HW CONCRETE">
<conductivity units="W/m K">1.311</conductivity>
<density units="kg/m3">2240</density>
<specific_heat units="J/kg K">836.8</specific_heat>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.7</solar_absorptance>
<visible_absorptance units="-">0.7</visible_absorptance>
</material>
<material id="2" name="CP02 CARPET PAD">
<no_mass>true</no_mass>
<thermal_resistance units="m2 K/W">0.21648</thermal_resistance>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.7</solar_absorptance>
<visible_absorptance units="-">0.8</visible_absorptance>
</material>
<material id="3" name="Floor Insulation [4]">
<conductivity units="W/m K">0.045</conductivity>
<density units="kg/m3">265</density>
<specific_heat units="J/kg K">836.8</specific_heat>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.7</solar_absorptance>
<visible_absorptance units="-">0.7</visible_absorptance>
</material>
<material id="4" name="1IN Stucco">
<conductivity units="W/m K">0.6918</conductivity>
<density units="kg/m3">1858</density>
<specific_heat units="J/kg K">837</specific_heat>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.92</solar_absorptance>
<visible_absorptance units="-">0.92</visible_absorptance>
</material>
<material id="5" name="8IN Concrete HW">
<conductivity units="W/m K">1.7296</conductivity>
<density units="kg/m3">2243</density>
<specific_heat units="J/kg K">837</specific_heat>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.65</solar_absorptance>
<visible_absorptance units="-">0.65</visible_absorptance>
</material>
<material id="6" name="Wall Insulation [37]">
<conductivity units="W/m K">0.0432</conductivity>
<density units="kg/m3">91</density>
<specific_heat units="J/kg K">837</specific_heat>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.5</solar_absorptance>
<visible_absorptance units="-">0.5</visible_absorptance>
</material>
<material id="7" name="1/2IN Gypsum">
<conductivity units="W/m K">0.16</conductivity>
<density units="kg/m3">784.9</density>
<specific_heat units="J/kg K">830</specific_heat>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.92</solar_absorptance>
<visible_absorptance units="-">0.92</visible_absorptance>
</material>
<material id="8" name="Wood Siding">
<conductivity units="W/m K">0.11</conductivity>
<density units="kg/m3">544.62</density>
<specific_heat units="J/kg K">1210</specific_heat>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.78</solar_absorptance>
<visible_absorptance units="-">0.78</visible_absorptance>
</material>
<material id="9" name="Wood Shingles">
<conductivity units="W/m K">0.115</conductivity>
<density units="kg/m3">513</density>
<specific_heat units="J/kg K">1255</specific_heat>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.78</solar_absorptance>
<visible_absorptance units="-">0.78</visible_absorptance>
</material>
<material id="10" name="1IN Wood Decking">
<conductivity units="W/m K">0.1211</conductivity>
<density units="kg/m3">593</density>
<specific_heat units="J/kg K">2510</specific_heat>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.78</solar_absorptance>
<visible_absorptance units="-">0.78</visible_absorptance>
</material>
<material id="11" name="Roof Insulation [23]">
<conductivity units="W/m K">0.049</conductivity>
<density units="kg/m3">265</density>
<specific_heat units="J/kg K">836.8</specific_heat>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.7</solar_absorptance>
<visible_absorptance units="-">0.7</visible_absorptance>
</material>
<material id="12" name="MAT-SHEATH">
<no_mass>true</no_mass>
<thermal_resistance units="m2 K/W">0.36256</thermal_resistance>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.7</solar_absorptance>
<visible_absorptance units="-">0.7</visible_absorptance>
</material>
<material id="13" name="MAT-SHEATH">
<no_mass>true</no_mass>
<thermal_resistance units="m2 K/W">0.36256</thermal_resistance>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.7</solar_absorptance>
<visible_absorptance units="-">0.7</visible_absorptance>
</material>
<material id="14" name="Metal Decking">
<conductivity units="W/m K">45.006</conductivity>
<density units="kg/m3">7680</density>
<specific_heat units="J/kg K">418.4</specific_heat>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.7</solar_absorptance>
<visible_absorptance units="-">0.3</visible_absorptance>
</material>
<material id="15" name="Roof Membrane">
<conductivity units="W/m K">0.16</conductivity>
<density units="kg/m3">1121.29</density>
<specific_heat units="J/kg K">1460</specific_heat>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.7</solar_absorptance>
<visible_absorptance units="-">0.7</visible_absorptance>
</material>
<material id="16" name="CP02 CARPET PAD">
<no_mass>true</no_mass>
<thermal_resistance units="m2 K/W">0.21648</thermal_resistance>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.7</solar_absorptance>
<visible_absorptance units="-">0.8</visible_absorptance>
</material>
<material id="17" name="MAT-SHEATH">
<no_mass>true</no_mass>
<thermal_resistance units="m2 K/W">0.36256</thermal_resistance>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.7</solar_absorptance>
<visible_absorptance units="-">0.7</visible_absorptance>
</material>
<material id="18" name="CP02 CARPET PAD">
<no_mass>true</no_mass>
<thermal_resistance units="m2 K/W">0.21648</thermal_resistance>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.7</solar_absorptance>
<visible_absorptance units="-">0.8</visible_absorptance>
</material>
<material id="19" name="MAT-SHEATH">
<no_mass>true</no_mass>
<thermal_resistance units="m2 K/W">0.36256</thermal_resistance>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.7</solar_absorptance>
<visible_absorptance units="-">0.7</visible_absorptance>
</material>
<material id="20" name="CP02 CARPET PAD">
<no_mass>true</no_mass>
<thermal_resistance units="m2 K/W">0.21648</thermal_resistance>
<thermal_absorptance units="-">0.9</thermal_absorptance>
<solar_absorptance units="-">0.7</solar_absorptance>
<visible_absorptance units="-">0.8</visible_absorptance>
</material>
</materials>
<constructions>
<construction type="interior slab" id="1" name="189.1-2009 Nonres 4B Exposed Floor Mass">
<layers>
<layer id="1" name="Layer 1">
<material>3</material>
<thickness units="m">0.0795397</thickness>
</layer>
<layer id="2" name="Layer 2">
<material>1</material>
<thickness units="m">0.20321</thickness>
</layer>
<layer id="3" name="Layer 3">
<material>2</material>
</layer>
</layers>
</construction>
<construction type="exterior wall" id="2" name="189.1-2009 Nonres 4B Ext Wall Mass">
<outside_solar_absorptance units="-">0.92</outside_solar_absorptance>
<outside_thermal_absorptance units="-">0.9</outside_thermal_absorptance>
<outside_visible_absorptance units="-">0.92</outside_visible_absorptance>
<layers>
<layer id="1" name="Layer 1">
<material>4</material>
<thickness units="m">0.0253</thickness>
</layer>
<layer id="2" name="Layer 2">
<material>5</material>
<thickness units="m">0.2033</thickness>
</layer>
<layer id="3" name="Layer 3">
<material>6</material>
<thickness units="m">0.0680962</thickness>
</layer>
<layer id="4" name="Layer 4">
<material>7</material>
<thickness units="m">0.01271</thickness>
</layer>
</layers>
</construction>
<construction type="exterior wall" id="3" name="90.1-2004 Nonres 4B Ext Wall Wood-Framed and Other">
<outside_solar_absorptance units="-">0.92</outside_solar_absorptance>
<outside_thermal_absorptance units="-">0.9</outside_thermal_absorptance>
<outside_visible_absorptance units="-">0.92</outside_visible_absorptance>
<layers>
<layer id="1" name="Layer 1">
<material>8</material>
<thickness units="m">0.01</thickness>
</layer>
<layer id="2" name="Layer 2">
<material>3</material>
<thickness units="m">0.0746874</thickness>
</layer>
<layer id="3" name="Layer 3">
<material>7</material>
<thickness units="m">0.01271</thickness>
</layer>
</layers>
</construction>
<construction type="roof" id="4" name="189.1-2009 Nonres 4B Roof Attic and Other">
<outside_solar_absorptance units="-">0.78</outside_solar_absorptance>
<outside_thermal_absorptance units="-">0.9</outside_thermal_absorptance>
<outside_visible_absorptance units="-">0.78</outside_visible_absorptance>
<layers>
<layer id="1" name="Layer 1">
<material>9</material>
<thickness units="m">0.0178</thickness>
</layer>
<layer id="2" name="Layer 2">
<material>10</material>
<thickness units="m">0.0254</thickness>
</layer>
<layer id="3" name="Layer 3">
<material>11</material>
<thickness units="m">0.375211</thickness>
</layer>
<layer id="4" name="Layer 4">
<material>7</material>
<thickness units="m">0.01271</thickness>
</layer>
</layers>
</construction>
<construction type="roof" id="5" name="90.1-2004 Nonres 4B Roof Attic and Other">
<outside_solar_absorptance units="-">0.78</outside_solar_absorptance>
<outside_thermal_absorptance units="-">0.9</outside_thermal_absorptance>
<outside_visible_absorptance units="-">0.78</outside_visible_absorptance>
<layers>
<layer id="1" name="Layer 1">
<material>9</material>
<thickness units="m">0.0178</thickness>
</layer>
<layer id="2" name="Layer 2">
<material>10</material>
<thickness units="m">0.0254</thickness>
</layer>
<layer id="3" name="Layer 3">
<material>11</material>
<thickness units="m">0.221604</thickness>
</layer>
<layer id="4" name="Layer 4">
<material>7</material>
<thickness units="m">0.01271</thickness>
</layer>
</layers>
</construction>
<construction type="exterior wall" id="6" name="189.1-2009 Nonres 4B Ext Wall Steel-Framed">
<outside_solar_absorptance units="-">0.92</outside_solar_absorptance>
<outside_thermal_absorptance units="-">0.9</outside_thermal_absorptance>
<outside_visible_absorptance units="-">0.92</outside_visible_absorptance>
<layers>
<layer id="1" name="Layer 1">
<material>12</material>
</layer>
<layer id="2" name="Layer 2">
<material>3</material>
<thickness units="m">0.118387</thickness>
</layer>
<layer id="3" name="Layer 3">
<material>7</material>
<thickness units="m">0.01271</thickness>
</layer>
</layers>
</construction>
<construction type="exterior slab" id="7" name="189.1-2009 Nonres 4B Ext Slab Unheated - 8in Slab without Carpet">
<layers>
<layer id="1" name="Layer 1">
<material>1</material>
<thickness units="m">0.20321</thickness>
</layer>
</layers>
</construction>
<construction type="exterior wall" id="8" name="90.1-2004 Nonres 4B Ext Wall Steel-Framed">
<outside_solar_absorptance units="-">0.92</outside_solar_absorptance>
<outside_thermal_absorptance units="-">0.9</outside_thermal_absorptance>
<outside_visible_absorptance units="-">0.92</outside_visible_absorptance>
<layers>
<layer id="1" name="Layer 1">
<material>13</material>
</layer>
<layer id="2" name="Layer 2">
<material>3</material>
<thickness units="m">0.0373223</thickness>
</layer>
<layer id="3" name="Layer 3">
<material>7</material>
<thickness units="m">0.01271</thickness>
</layer>
</layers>
</construction>
<construction type="roof" id="9" name="189.1-2009 Nonres 4B Roof IEAD">
<outside_solar_absorptance units="-">0.7</outside_solar_absorptance>
<outside_thermal_absorptance units="-">0.9</outside_thermal_absorptance>
<outside_visible_absorptance units="-">0.7</outside_visible_absorptance>
<layers>
<layer id="1" name="Layer 1">
<material>15</material>
<thickness units="m">0.0095</thickness>
</layer>
<layer id="2" name="Layer 2">
<material>11</material>
<thickness units="m">0.210538</thickness>
</layer>
<layer id="3" name="Layer 3">
<material>14</material>
<thickness units="m">0.001524</thickness>
</layer>
</layers>
</construction>
<construction type="exterior slab" id="10" name="189.1-2009 Nonres 4B Ext Slab Unheated - 4in Slab without Carpet">
<layers>
<layer id="1" name="Layer 1">
<material>1</material>
<thickness units="m">0.1016</thickness>
</layer>
</layers>
</construction>
<construction type="roof" id="11" name="189.1-2009 Nonres 4B Roof Metal Building">
<outside_solar_absorptance units="-">0.7</outside_solar_absorptance>
<outside_thermal_absorptance units="-">0.9</outside_thermal_absorptance>
<outside_visible_absorptance units="-">0.3</outside_visible_absorptance>
<layers>
<layer id="1" name="Layer 1">
<material>14</material>
<thickness units="m">0.001524</thickness>
</layer>
<layer id="2" name="Layer 2">
<material>11</material>
<thickness units="m">0.23578</thickness>
</layer>
</layers>
</construction>
<construction type="exterior slab" id="12" name="189.1-2009 Nonres 4B Ext Slab Unheated - 4in Slab with Carpet">
<layers>
<layer id="1" name="Layer 1">
<material>1</material>
<thickness units="m">0.1016</thickness>
</layer>
<layer id="2" name="Layer 2">
<material>16</material>
</layer>
</layers>
</construction>
<construction type="exterior wall" id="13" name="90.1-2004 Nonres 4B Ext Wall Mass">
<outside_solar_absorptance units="-">0.92</outside_solar_absorptance>
<outside_thermal_absorptance units="-">0.9</outside_thermal_absorptance>
<outside_visible_absorptance units="-">0.92</outside_visible_absorptance>
<layers>
<layer id="1" name="Layer 1">
<material>4</material>
<thickness units="m">0.0253</thickness>
</layer>
<layer id="2" name="Layer 2">
<material>5</material>
<thickness units="m">0.2033</thickness>
</layer>
<layer id="3" name="Layer 3">
<material>6</material>
<thickness units="m">0.0338606</thickness>
</layer>
<layer id="4" name="Layer 4">
<material>7</material>
<thickness units="m">0.01271</thickness>
</layer>
</layers>
</construction>
<construction type="roof" id="14" name="90.1-2004 Nonres 4B Roof Metal Building">
<outside_solar_absorptance units="-">0.7</outside_solar_absorptance>
<outside_thermal_absorptance units="-">0.9</outside_thermal_absorptance>
<outside_visible_absorptance units="-">0.3</outside_visible_absorptance>
<layers>
<layer id="1" name="Layer 1">
<material>14</material>
<thickness units="m">0.001524</thickness>
</layer>
<layer id="2" name="Layer 2">
<material>11</material>
<thickness units="m">0.123533</thickness>
</layer>
</layers>
</construction>
<construction type="exterior wall" id="15" name="189.1-2009 Res 4B Ext Wall Steel-Framed">
<outside_solar_absorptance units="-">0.92</outside_solar_absorptance>
<outside_thermal_absorptance units="-">0.9</outside_thermal_absorptance>
<outside_visible_absorptance units="-">0.92</outside_visible_absorptance>
<layers>
<layer id="1" name="Layer 1">
<material>17</material>
</layer>
<layer id="2" name="Layer 2">
<material>3</material>
<thickness units="m">0.118387</thickness>
</layer>
<layer id="3" name="Layer 3">
<material>7</material>
<thickness units="m">0.01271</thickness>
</layer>
</layers>
</construction>
<construction type="exterior wall" id="16" name="189.1-2009 Nonres 4B Ext Wall Wood-Framed and Other">
<outside_solar_absorptance units="-">0.92</outside_solar_absorptance>
<outside_thermal_absorptance units="-">0.9</outside_thermal_absorptance>
<outside_visible_absorptance units="-">0.92</outside_visible_absorptance>
<layers>
<layer id="1" name="Layer 1">
<material>8</material>
<thickness units="m">0.01</thickness>
</layer>
<layer id="2" name="Layer 2">
<material>3</material>
<thickness units="m">0.110422</thickness>
</layer>
<layer id="3" name="Layer 3">
<material>7</material>
<thickness units="m">0.01271</thickness>
</layer>
</layers>
</construction>
<construction type="roof" id="17" name="90.1-2004 Nonres 4B Roof IEAD">
<outside_solar_absorptance units="-">0.7</outside_solar_absorptance>
<outside_thermal_absorptance units="-">0.9</outside_thermal_absorptance>
<outside_visible_absorptance units="-">0.7</outside_visible_absorptance>
<layers>
<layer id="1" name="Layer 1">
<material>15</material>
<thickness units="m">0.0095</thickness>
</layer>
<layer id="2" name="Layer 2">
<material>11</material>
<thickness units="m">0.124958</thickness>
</layer>
<layer id="3" name="Layer 3">
<material>14</material>
<thickness units="m">0.001524</thickness>
</layer>
</layers>
</construction>
<construction type="interior slab" id="18" name="90.1-2004 Nonres 4B Exposed Floor Mass">
<layers>
<layer id="1" name="Layer 1">
<material>3</material>
<thickness units="m">0.0463846</thickness>
</layer>
<layer id="2" name="Layer 2">
<material>1</material>
<thickness units="m">0.20321</thickness>
</layer>
<layer id="3" name="Layer 3">
<material>18</material>
</layer>
</layers>
</construction>
<construction type="exterior wall" id="19" name="90.1-2004 Res 4B Ext Wall Steel-Framed">
<outside_solar_absorptance units="-">0.92</outside_solar_absorptance>
<outside_thermal_absorptance units="-">0.9</outside_thermal_absorptance>
<outside_visible_absorptance units="-">0.92</outside_visible_absorptance>
<layers>
<layer id="1" name="Layer 1">
<material>19</material>
</layer>
<layer id="2" name="Layer 2">
<material>3</material>
<thickness units="m">0.0971136</thickness>
</layer>
<layer id="3" name="Layer 3">
<material>7</material>
<thickness units="m">0.01271</thickness>
</layer>
</layers>
</construction>
<construction type="exterior slab" id="20" name="90.1-2004 Nonres 4B Ext Slab Unheated - 8in Slab without Carpet">
<layers>
<layer id="1" name="Layer 1">
<material>1</material>
<thickness units="m">0.20321</thickness>
</layer>
</layers>
</construction>
<construction type="exterior slab" id="21" name="90.1-2004 Nonres 4B Ext Slab Unheated - 4in Slab without Carpet">
<layers>
<layer id="1" name="Layer 1">
<material>1</material>
<thickness units="m">0.1016</thickness>
</layer>
</layers>
</construction>
<construction type="exterior slab" id="22" name="90.1-2004 Nonres 4B Ext Slab Unheated - 4in Slab with Carpet">
<layers>
<layer id="1" name="Layer 1">
<material>1</material>
<thickness units="m">0.1016</thickness>
</layer>
<layer id="2" name="Layer 2">
<material>20</material>
</layer>
</layers>
</construction>
</constructions>
</library>

View File

@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?><!-- Generated by: --><!-- IFC -> cityGML Converter --><!-- (C) - Institute for Applied Computer Science --><!-- Forschungszentrum Karlsruhe --><!-- Not for commercial use --><!-- Generated by: IfcExplorer--><!-- cityGML Schema: 1.0.0 --><!-- Level of Detail 1--><!-- Creation Date: Tuesday, 23 November 2010 - 10:37:59--><!-- Edited Manually in Oxygen 8.2 --><!-- Modified by GMLOffset.xslt at Mon Dec 6 2010 --><!-- Version 2 Building located in the area of KIT Campus North)--><!-- Modified by GMLOffset.xslt at Wed Dec 8 2010 --><!-- Modified by GMLOffset.xslt at Wed Mar 29 2017 --><core:CityModel xsi:schemaLocation="http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd" xmlns:core="http://www.opengis.net/citygml/2.0" xmlns="http://www.opengis.net/citygml/profiles/base/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:gen="http://www.opengis.net/citygml/generics/2.0" xmlns:grp="http://www.opengis.net/citygml/cityobjectgroup/2.0" xmlns:app="http://www.opengis.net/citygml/appearance/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xAL="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- Manually edited by KHH 23.01.2017, CityGML 2.0, Address added, roof edge added -->
<gml:name>AC14-FZK-Haus</gml:name>
<gml:boundedBy>
<gml:Envelope srsDimension="3" srsName="urn:adv:crs:ETRS89_UTM32*DE_DHHN92_NH">
<gml:lowerCorner srsDimension="3">457842 5439083 111.8 </gml:lowerCorner>
<gml:upperCorner srsDimension="3">457854 5439093 118.317669 </gml:upperCorner>
</gml:Envelope>
</gml:boundedBy>
<core:cityObjectMember>
<bldg:Building gml:id="UUID_d281adfc-4901-0f52-540b-4cc1a9325f82">
<gml:description>FZK-Haus (Forschungszentrum Karlsruhe, now KIT), created by Karl-Heinz
Haefele </gml:description>
<gml:name>AC14-FZK-Haus</gml:name>
<core:creationDate>2017-01-23</core:creationDate>
<core:relativeToTerrain>entirelyAboveTerrain</core:relativeToTerrain>
<gen:measureAttribute name="GrossPlannedArea">
<gen:value uom="m2">120.00</gen:value>
</gen:measureAttribute>
<gen:stringAttribute name="ConstructionMethod">
<gen:value>New Building</gen:value>
</gen:stringAttribute>
<gen:stringAttribute name="IsLandmarked">
<gen:value>NO</gen:value>
</gen:stringAttribute>
<bldg:class codeSpace="http://www.sig3d.org/codelists/citygml/2.0/building/2.0/_AbstractBuilding_class.xml">1000</bldg:class>
<bldg:function codeSpace="http://www.sig3d.org/codelists/citygml/2.0/building/2.0/_AbstractBuilding_function.xml">1000</bldg:function>
<bldg:usage codeSpace="http://www.sig3d.org/codelists/citygml/2.0/building/2.0/_AbstractBuilding_usage.xml">1000</bldg:usage>
<bldg:yearOfConstruction>2020</bldg:yearOfConstruction>
<bldg:roofType codeSpace="http://www.sig3d.org/codelists/citygml/2.0/building/2.0/_AbstractBuilding_roofType.xml">1030</bldg:roofType>
<bldg:measuredHeight uom="m">6.52</bldg:measuredHeight>
<bldg:storeysAboveGround>2</bldg:storeysAboveGround>
<bldg:storeysBelowGround>0</bldg:storeysBelowGround>
<bldg:lod1Solid>
<gml:Solid>
<gml:exterior>
<gml:CompositeSurface>
<gml:surfaceMember>
<gml:Polygon>
<gml:exterior>
<gml:LinearRing>
<gml:posList srsDimension="3">457842 5439083 111.8 457842 5439093 111.8 457854 5439093 111.8 457854 5439083 111.8 457842 5439083 111.8 </gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon>
<gml:exterior>
<gml:LinearRing>
<gml:posList srsDimension="3">457842 5439083 118.31769 457854 5439083 118.31769 457854 5439093 118.31769 457842 5439093 118.31769 457842 5439083 118.31769 </gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon>
<gml:exterior>
<gml:LinearRing>
<gml:posList srsDimension="3">457842 5439083 111.8 457842 5439083 118.31769 457842 5439093 118.31769 457842 5439093 111.8 457842 5439083 111.8 </gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon>
<gml:exterior>
<gml:LinearRing>
<gml:posList srsDimension="3">457842 5439093 111.8 457842 5439093 118.31769 457854 5439093 118.31769 457854 5439093 111.8 457842 5439093 111.8 </gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon>
<gml:exterior>
<gml:LinearRing>
<gml:posList srsDimension="3">457854 5439093 111.8 457854 5439093 118.31769 457854 5439083 118.31769 457854 5439083 111.8 457854 5439093 111.8 </gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon>
<gml:exterior>
<gml:LinearRing>
<gml:posList srsDimension="3">457854 5439083 111.8 457854 5439083 118.31769 457842 5439083 118.31769 457842 5439083 111.8 457854 5439083 111.8 </gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:CompositeSurface>
</gml:exterior>
</gml:Solid>
</bldg:lod1Solid>
<bldg:address>
<core:Address>
<core:xalAddress>
<xAL:AddressDetails>
<xAL:Locality Type="Town">
<xAL:LocalityName>Eggenstein-Leopoldshafen</xAL:LocalityName>
<xAL:Thoroughfare Type="Street">
<xAL:ThoroughfareNumber>4711</xAL:ThoroughfareNumber>
<xAL:ThoroughfareName>Spöcker Straße</xAL:ThoroughfareName>
</xAL:Thoroughfare>
<xAL:PostalCode>
<xAL:PostalCodeNumber>76344</xAL:PostalCodeNumber>
</xAL:PostalCode>
</xAL:Locality>
</xAL:AddressDetails>
</core:xalAddress>
</core:Address>
</bldg:address>
</bldg:Building>
</core:cityObjectMember>
</core:CityModel>

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,23 @@
from geometry.geometry_feeders.city_gml import CityGml
class GeometryFactory:
def __init__(self, file_type, path):
self._file_type = file_type.lower()
self._path = path
@property
def citygml(self):
return CityGml(self._path).city
@property
def geojson(self):
raise Exception('Not implemented')
@property
def bim(self):
raise Exception('Not implemented')
@property
def city(self):
return getattr(self, self._file_type, lambda: None)

View File

@ -0,0 +1,106 @@
import xmltodict
import numpy as np
from city_model_structure.city import City
from city_model_structure.city_object import CityObject
from city_model_structure.surface import Surface
from helpers.geometry import Geometry
class CityGml:
def __init__(self, path):
self._city = None
with open(path) as gml:
# Clean the namespaces is an important task to prevent wrong ns:field due poor citygml implementations
self._gml = xmltodict.parse(gml.read(), process_namespaces=True, xml_attribs=True, namespaces={
'http://www.opengis.net/gml': None,
'http://www.w3.org/2001/XMLSchema-instance': None,
'urn:oasis:names:tc:ciq:xsdschema:xAL:2.0': None,
'http://www.w3.org/1999/xlink': None,
'http://www.opengis.net/citygml/relief/2.0': None,
'http://www.opengis.net/citygml/building/2.0': None,
'http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd '
'http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd" '
'xmlns="http://www.opengis.net/citygml/2.0': None,
'http://www.opengis.net/citygml/2.0': None
}, force_list=('cityObjectMember', 'curveMember'))
self._cityObjects = None
self._geometry = Geometry()
envelope = self._gml['CityModel']['boundedBy']['Envelope']
if '#text' in envelope['lowerCorner']:
self._lower_corner = np.fromstring(envelope['lowerCorner']['#text'], dtype=float, sep=' ')
self._upper_corner = np.fromstring(envelope['upperCorner']['#text'], dtype=float, sep=' ')
else:
self._lower_corner = np.fromstring(envelope['lowerCorner'], dtype=float, sep=' ')
self._upper_corner = np.fromstring(envelope['upperCorner'], dtype=float, sep=' ')
self._srs_name = envelope['@srsName']
@property
def content(self):
return self._gml
@property
def city(self):
if self._city is None:
city_objects = []
for o in self._gml['CityModel']['cityObjectMember']:
lod = 0
if 'lod1Solid' in o['Building']:
lod += 1
if 'lod2Solid' in o['Building']:
lod += 2
if 'lod3Solid' in o['Building']:
lod += 4
if 'lod4Solid' in o['Building']:
lod += 8
# ToDo: this is specific for Lod1 need to be modeled for higher lod's and lod combinations
name = o['Building']['@id']
lod_str = 'lod' + str(lod) + 'Solid'
lod_terrain_str = 'lod' + str(lod) + 'TerrainIntersection'
try:
surfaces = [Surface(s['Polygon']['exterior']['LinearRing']['posList']['#text'])
for s in o['Building'][lod_str]['Solid']['exterior']['CompositeSurface']['surfaceMember']]
except TypeError:
surfaces = [Surface(s['Polygon']['exterior']['LinearRing']['posList'])
for s in o['Building'][lod_str]['Solid']['exterior']['CompositeSurface']['surfaceMember']]
if lod_terrain_str in o['Building']:
try:
curves = [c['LineString']['posList']['#text']
for c in o['Building'][lod_terrain_str]['MultiCurve']['curveMember']]
except TypeError:
curves = [c['LineString']['posList']
for c in o['Building'][lod_terrain_str]['MultiCurve']['curveMember']]
terrains = []
for curve in curves:
curve_points = np.fromstring(curve, dtype=float, sep=' ')
curve_points = self._geometry.to_points_matrix(curve_points, True)
terrains.append(curve_points)
else:
terrains = []
for s in surfaces:
ground = True
ground_points = []
for row in s.points:
# all surface vertex are in the lower z
ground_point = [row[0], row[1], self._lower_corner[2]]
ground_points = np.concatenate((ground_points, ground_point), axis=None)
ground = ground and self._geometry.almost_equal(row, ground_point)
if ground:
ground_points = self._geometry.to_points_matrix(ground_points)
# Do i need to remove the duplicated?
terrains.append(ground_points)
year_of_construction = None
function = None
if 'yearOfConstruction' in o['Building']:
year_of_construction = o['Building']['yearOfConstruction']
if 'function' in o['Building']:
function = o['Building']['function']
city_objects.append(CityObject(name, lod, surfaces, terrains, year_of_construction, function))
self._city = City(self._lower_corner, self._upper_corner, city_objects, self._srs_name)
return self._city

5
helpers/assumptions.py Normal file
View File

@ -0,0 +1,5 @@
# These values are intended as configurable assumptions
# ToDo: these values need to be changed into configurable parameters
h_i = 10 # W/m2K
h_e = 25 # W/m2K

2
helpers/constants.py Normal file
View File

@ -0,0 +1,2 @@
celsius2kelvin = 273.15
days_of_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

32
helpers/geometry.py Normal file
View File

@ -0,0 +1,32 @@
import math
import numpy as np
class Geometry:
def __init__(self, delta=0.5):
self._delta = delta
def almost_equal(self, v1, v2):
delta = math.sqrt(pow((v1[0]-v2[0]), 2) + pow((v1[1]-v2[1]), 2) + pow((v1[2]-v2[2]), 2))
return delta <= self._delta
@staticmethod
def to_points_matrix(points, remove_last=False):
rows = points.size//3
points = points.reshape(rows, 3)
if remove_last:
points = np.delete(points, rows-1, 0)
return points
@staticmethod
def _director_vector(p1, p2):
return p1 - p2
@staticmethod
def _linearly_dependent(d1, d2):
coe_x = d1[0] / d2[0]
coe_y = d1[1] / d2[1]
coe_z = d1[2] / d2[2]
if coe_x == coe_y == coe_z:
return True
return False

32
helpers/monthlyvalues.py Normal file
View File

@ -0,0 +1,32 @@
import pandas as pd
import numpy as np
import helpers.constants as cte
class MonthlyValues:
def __init__(self):
self._month_hour = None
@staticmethod
def get_mean_values(values):
out = None
if values is not None:
out = pd.DataFrame(values).groupby('month', as_index=False).mean()
return out
@staticmethod
def get_total_month(values):
out = None
if values is not None:
out = pd.DataFrame(values).groupby('month', as_index=False).sum()
return out
@property
def month_hour(self):
if self._month_hour is None:
array = []
for i in range(0, 12):
total_hours = cte.days_of_month[i] * 24
array = np.concatenate((array, np.full(total_hours, i + 1)))
self._month_hour = pd.DataFrame(array, columns=['month'])
return self._month_hour

40
main.py
View File

@ -0,0 +1,40 @@
import os
from pathlib import Path
name_gml = '2050 bp_20buildings.gml'
name_sra = '2050 bp_20buildings_New_York_City_SRA'
name_cli = 'inseldb_New_York_City.cli'
name_insel = 'inselFile.insel'
name_weather = 'inseldb_New_York_City.dat'
path = (Path(__file__).parent / 'examples/NYC_20buildings').resolve()
full_path_cli = os.path.join(path, name_cli)
full_path_weather = os.path.join(path, name_weather)
full_path_gml = os.path.join(path, name_gml)
# Initialize the city model
# todo: add several steps:
# - simplification of the data model (for all work-flows)
# - internal zoning of buildings (for dynamic simulation only)
# city = Init(full_path_gml).city
# Write and run SRA, and get results (one model for the complete city)
name = name_sra + '.xml'
# todo: define full_path_cli and any other weather related parameter according to the city_name in city
# sra = sra.SRA(name_sra + '.xml', full_path_cli, city.city_objects, lower_corner=city.lower_corner)
# sra.save(path)
# SRA = SRAProcesses(path, name_sra, full_path_weather)
# SRA.call_sra()
# SRA.results()
# temperatures = mv.MonthlyValues.get_mean_values(SRA.get_weather_temperatures)
# SRA.set_irradiance_surfaces(city)
# Write insel model (one model per building)
#for city_object in city.city_objects:
# content = templates.generate_dem(city_object, usageParameters, temperatures)
# inselFile = InsF(path, name_insel, content)
# inselFile.save()
# Run INSEL
# runInsel(inselFile.full_path)

View File

@ -0,0 +1,24 @@
from physics.physics_feeders.us_physics_parameters import UsPhysicsParameters
class PhysicsFactory:
def __init__(self, country_code, city_name, city_objects):
self._country_code = country_code.lower()
self._city_name = city_name.lower()
self._city_objects = city_objects
self.factory()
def us(self):
UsPhysicsParameters(self._city_name, self._city_objects)
def ca(self):
raise Exception('Not implemented')
def de(self):
raise Exception('Not implemented')
def es(self):
raise Exception('Not implemented')
def factory(self):
getattr(self, self._country_code, lambda: None)()

View File

@ -0,0 +1,106 @@
class PlutoConverter:
@staticmethod
def building_type_to_nrel(pluto_type):
# todo: add all types to the dictionary nrel_type
# 'A0 ONE FAMILY DWELLINGS: Cape Cod'
# 'B1 TWO FAMILY DWELLINGS: Brick'
# 'C0 WALK UP APARTMENTS: Three Families'
# 'D0 ELEVATOR APARTMENTS: Co-op Conversion From Loft/Warehouse'
# 'E1 WAREHOUSES: Fireproof'
# 'F1 FACTORY AND INDUSTRIAL BUILDINGS: Heavy Manufacturing (Fireproof)'
# 'G0 GARAGES & GASOLINE STATIONS: Residential Tax Class 1 Garage'
# 'H1 HOTELS: Luxury Type: Built Prior to 1960'
# 'I1 HOSPITALS AND HEALTH: Hospitals, Sanitariums, Mental Institutions'
# 'J1 THEATRES: Art Type (Seating Capacity Under 400 Seats)'
# 'K1 STORE BUILDINGS: One Story Store Building'
# 'L1 LOFT BUILDINGS: Over Eight Stores (Mid-Manhattan Type With or Without Stores)'
# 'M1 CHURCHES, SYNAGOGUES, ETC.: Church, Synagogue, Chapel'
# 'N1 ASYLUMS AND HOMES: Asylums'
# 'O1 OFFICE BUILDINGS: Fireproof: Up to Nine Stories'
# 'P1 PLACES OF PUBLIC ASSEMBLY: Concert Halls'
# 'P2 PLACES OF PUBLIC ASSEMBLY: Lodge Rooms'
# 'P3 PLACES OF PUBLIC ASSEMBLY: YWCA,YMCA,YWHA,YMHA,PAL'
# 'P4 PLACES OF PUBLIC ASSEMBLY: Beach Club'
# 'P5 PLACES OF PUBLIC ASSEMBLY: Community Center'
# 'P6 PLACES OF PUBLIC ASSEMBLY: Amusement Places, Bathhouses, Boat'
# 'P7 PLACES OF PUBLIC ASSEMBLY: Museum'
# 'P8 PLACES OF PUBLIC ASSEMBLY: Library'
# 'P9 PLACES OF PUBLIC ASSEMBLY: Miscellaneous Including Riding Academies and Stables'
# 'Q0 OUTDOOR RECREATION: Open Space'
# 'R0 CONDOMINIUMS: Condo Billing Lot'
# 'S0 RESIDENCE MULTIPLE USE: Primarily One Family with Two Stores or Offices'
# 'S1 RESIDENCE MULTIPLE USE: Primarily One Family With Store or Office'
# 'S2 RESIDENCE MULTIPLE USE: Primarily Two Family With Store or Office'
# 'S3 RESIDENCE MULTIPLE USE: Primarily Three Family With Store or Office'
# 'S4 RESIDENCE MULTIPLE USE: Primarily Four Family With Store or Office'
# 'S5 RESIDENCE MULTIPLE USE: Primarily Five to Six Family With Store or Office'
# 'S9 RESIDENCE MULTIPLE USE: Primarily One to Six Families with Stores or Offices'
# 'T1 TRANSPORTATION FACILITIES: Airports, Air Fields, Terminals'
# 'U0 UTILITY: Utility Company Land and Buildings'
# 'V0 VACANT LAND: Zoned Residential, Except Not Manhattan Below 110 St'
# 'W1 EDUCATIONAL STRUCTURES: Public Elementary Junior and Senior High Schools'
# 'Y1 GOVERNMENT: Fire Department'
# 'Y8 GOVERNMENT: Department of Public Works'
# 'Z0 MISCELLANEOUS: Tennis Court, Pool, Shed, etc. Used in Conjunction with Tax Class 1'
# 'Z1 MISCELLANEOUS: Court House'
# 'Z3 MISCELLANEOUS: Post Office'
# 'Z4 MISCELLANEOUS: Foreign Governments'
# 'Z5 MISCELLANEOUS: United Nations'
# 'Z8 MISCELLANEOUS: Cemeteries'
# 'Z9 MISCELLANEOUS: Other'
nrel_type = {'A0': 'residential',
'C0': 'midrise apartment',
'D3': 'full service restaurant', # ToDo: remove this, is fake!!!!!
'RI': 'residential',
'B1': 'residential',
'D0': 'residential',
'E1': 'residential',
'F1': 'residential',
'G0': 'residential',
'H1': 'residential',
'I1': 'residential',
'J1': 'residential',
'K1': 'residential',
'L1': 'residential',
'M1': 'residential',
'N1': 'residential',
'O1': 'residential',
'P1': 'residential',
'P2': 'residential',
'P3': 'residential',
'P4': 'residential',
'P5': 'residential',
'P6': 'residential',
'P7': 'residential',
'P8': 'residential',
'P9': 'residential',
'Q0': 'residential',
'R0': 'residential',
'S0': 'residential',
'S1': 'residential',
'S2': 'residential',
'S3': 'residential',
'S4': 'residential',
'S5': 'residential',
'S9': 'residential',
'T1': 'residential',
'U0': 'residential',
'V0': 'residential',
'W1': 'residential',
'Y1': 'residential',
'Y8': 'residential',
'Z0': 'residential',
'Z1': 'residential',
'Z3': 'residential',
'Z4': 'residential',
'Z5': 'residential',
'Z8': 'residential',
'Z9': 'residential',
'RM': 'residential',
'D6': 'residential',
'W4': 'residential',
}
return nrel_type[pluto_type]

View File

@ -0,0 +1,98 @@
class UsToLibraryTypes(object):
standards = {
'ASHRAE Std189': 1,
'ASHRAE 90.1-2004': 2
}
reference_city_climate_zone = {
'Miami': '1A',
'Houston': '2A',
'Phoenix': '2B',
'Atlanta': '3A',
'Los Angeles': '3B',
'Las Vegas': '3B',
'San Francisco': '3C',
'Baltimore': '4A',
'Albuquerque': '4B',
'Seattle': '4C',
'Chicago': '5A',
'Boulder': '5B',
'Minneapolis': '6A',
'Helena': '6B',
'Duluth': '7A',
'Fairbanks': '8A'
}
climate_zones = {
'8A': 1,
'8B': 2,
'1A': 3,
'1B': 4,
'2A': 5,
'2B': 6,
'3A': 7,
'3B': 8,
'4A': 9,
'4B': 10,
'4C': 11,
'5A': 12,
'5B': 13,
'5C': 14,
'6A': 15,
'6B': 16,
'7A': 17,
'7B': 18
}
building_types = {
'full service restaurant': 1,
'residential': 2,
'highrise apartment': 3,
'hospital': 4,
'large hotel': 5,
'large office': 6,
'medium office': 7,
'midrise apartment': 8,
'outpatient health care': 9,
'primary school': 10,
'quick service restaurant': 11,
'secondary school': 12,
'small hotel': 13,
'small office': 14,
'stand-alone retail': 15,
'strip mall': 16,
'supermarket': 17,
'warehouse': 18
}
window_types = ['window', 'door', 'skylight']
construction_types = {
'Wall': 'exterior wall',
'interior wall': 'interior wall',
'ground wall': 'ground wall',
'Ground': 'exterior slab',
'attic floor': 'attic floor',
'interior slab': 'interior slab',
'Roof': 'roof'
}
@staticmethod
def yoc_to_year_of_standard(year_of_construction):
if int(year_of_construction) < 2009:
year_of_standard = 2004
else:
year_of_standard = 2009
return year_of_standard
@staticmethod
def city_to_reference_city(city):
# ToDo: Dummy function that need to be implemented
reference_city = 'Albuquerque'
if city is not None:
reference_city = 'Albuquerque'
return reference_city
def city_to_climate_zone(self, city):
reference_city = UsToLibraryTypes.city_to_reference_city(city)
return self.reference_city_climate_zone[reference_city]

View File

@ -0,0 +1,112 @@
import xmltodict
from city_model_structure.layer import Layer
from city_model_structure.material import Material
from pathlib import Path
from physics.physics_feeders.helpers.us_to_library_types import UsToLibraryTypes
from physics.physics_feeders.helpers.pluto_converter import PlutoConverter as Pc
class UsPhysicsParameters:
def __init__(self, city_name, city_objects):
us_to_library_types = UsToLibraryTypes()
climate_zone = us_to_library_types.city_to_climate_zone(city_name)
self._climate_zone = UsToLibraryTypes.climate_zones[climate_zone]
self._city_objects = city_objects
# load US Library
path = str(Path.cwd() / 'data/us_library.xml')
with open(path) as xml:
self._library = xmltodict.parse(xml.read())
# load US Archetypes
path = str(Path.cwd() / 'data/us_archetypes.xml')
with open(path) as xml:
self._archetypes = xmltodict.parse(xml.read())
for city_object in self._city_objects:
nrel_type = Pc.building_type_to_nrel(city_object.function)
if nrel_type is None:
return
building_type = UsToLibraryTypes.building_types[nrel_type]
archetype = self.search_archetype(building_type,
UsToLibraryTypes.yoc_to_year_of_standard(city_object.year_of_construction))
# ToDo:remove this in the future
# ToDo: Raise WrongArchetype if not all the surface types are defined for the given city_object
if archetype is None:
print(building_type, UsToLibraryTypes.yoc_to_year_of_standard(city_object.year_of_construction),
self._climate_zone)
raise Exception('Archetype not found for building')
city_object.average_storey_height = archetype['average_store_height']['#text']
city_object.storeys_above_ground = archetype['number_of_storeys']['#text']
for thermal_zone in city_object.thermal_zones:
thermal_zone.effective_thermal_capacity = archetype['thermal_capacity']['#text']
thermal_zone.additional_thermal_bridge_u_value = archetype['extra_loses_due_to_thermal_bridges']['#text']
thermal_zone.indirectly_heated_area_ratio = archetype['indirect_heated_ratio']['#text']
thermal_zone.infiltration_rate_system_off = archetype['infiltration_rate_for_ventilation_system_off']['#text']
thermal_zone.infiltration_rate_system_on = archetype['infiltration_rate_for_ventilation_system_on']['#text']
for thermal_boundary in thermal_zone.bounded:
construction_type = UsToLibraryTypes.construction_types[thermal_boundary.type]
construction = UsPhysicsParameters.search_construction_in_archetype(archetype, construction_type)
construction_id = construction['@id']
c_lib = self.search_construction_type('construction', construction_id)
if 'outside_solar_absorptance' in c_lib:
thermal_boundary.outside_solar_absorptance = c_lib['outside_solar_absorptance']['#text']
thermal_boundary.outside_thermal_absorptance = c_lib['outside_thermal_absorptance']['#text']
thermal_boundary.outside_visible_absorptance = c_lib['outside_visible_absorptance']['#text']
thermal_boundary.window_ratio = construction['window_ratio']['#text']
thermal_boundary.layers = []
for current_layer in c_lib['layers']['layer']:
layer = Layer()
if 'thickness' in current_layer:
layer.thickness_m = current_layer['thickness']['#text']
material_lib = self.search_construction_type('material', current_layer['material'])
material = Material()
if 'conductivity' in material_lib:
material.conductivity_wm_k = material_lib['conductivity']['#text']
material.specific_heat_jkg_k = material_lib['specific_heat']['#text']
material.density_kg_m3 = material_lib['density']['#text']
material.solar_absorptance = material_lib['solar_absorptance']['#text']
material.thermal_absorptance = material_lib['thermal_absorptance']['#text']
material.visible_absorptance = material_lib['visible_absorptance']['#text']
material.no_mass = 'no_mass' in material_lib
if 'thermal_resistance' in material_lib:
material.thermal_resistance_m2k_w = material_lib['thermal_resistance']['#text']
else:
material.thermal_resistance_m2k_w = None
layer.material = material
thermal_boundary.layers.append(layer)
for opening in thermal_boundary.thermal_openings:
if construction['window'] is None:
continue
w_lib = self.search_construction_type('window', construction['window'])
opening.area = '0.0'
opening.conductivity_w_mk = w_lib['conductivity']['#text']
opening.frame_ratio = w_lib['frame_ratio']['#text']
opening.g_value = w_lib['solar_transmittance_at_normal_incidence']['#text']
opening.thickness_m = w_lib['thickness']['#text']
opening.inside_reflectance = 1.0-float(w_lib['back_side_solar_transmittance_at_normal_incidence']['#text'])
opening.outside_reflectance = \
1.0-float(w_lib['front_side_solar_transmittance_at_normal_incidence']['#text'])
def search_archetype(self, building_type, year_of_construction):
for archetype in self._archetypes['archetypes']['archetype']:
a_yc = str(archetype['@year_of_construction_reference'])
a_bt = str(archetype['@building_type'])
a_cz = str(archetype['@climate_zone'])
if (a_yc == str(year_of_construction)) and (a_bt == str(building_type)) and (a_cz == str(self._climate_zone)):
return archetype
return None
def search_construction_type(self, construction_type, construction_id):
for c_lib in self._library['library'][construction_type + 's'][construction_type]:
if construction_id == c_lib['@id']:
return c_lib
raise Exception('Archetype definition contains elements that doesn\'t exist in the library')
@staticmethod
def search_construction_in_archetype(archetype, construction_type):
for construction in archetype['constructions']['construction']:
if construction['@type'] == construction_type:
return construction
raise Exception('Construction type not found')

View File

@ -0,0 +1,149 @@
import pandas as pd
from helpers import monthlyvalues as mv
import subprocess
import xmltodict
from collections import OrderedDict
class SimplifiedRadiosityAlgorithm:
def __init__(self, sra_working_path, sra_file_name, full_path_cli, city_objects=None,
begin_month=1, begin_day=1, end_month=12, end_day=31, lower_corner=None):
self._full_path_cli = full_path_cli
self._begin_month = begin_month
self._begin_day = begin_day
self._end_month = end_month
self._end_day = end_day
if lower_corner is None:
lower_corner = [0, 0, 0]
self._lower_corner = lower_corner
self._full_path_in_sra = (sra_working_path / (sra_file_name + '.xml')).resolve()
self._full_path_out_sra = (sra_working_path / (sra_file_name + '_SW.out')).resolve()
self._out_values = None
self._radiation = None
self._content = OrderedDict()
climate = OrderedDict()
climate['@location'] = self._full_path_cli
climate['@city'] = self.city
simulation = OrderedDict()
simulation['@beginMonth'] = begin_month
simulation['@beginDay'] = begin_day
simulation['@endMonth'] = end_month
simulation['@endDay'] = end_day
city_sim = OrderedDict()
city_sim['@name'] = sra_file_name + '.xml'
city_sim['Simulation'] = simulation
city_sim['Climate'] = climate
self._content['CitySim'] = city_sim
if city_objects is not None:
self.add_city_objects(city_objects)
self.save()
def call_sra(self):
completed = subprocess.run(['shortwave_integer.exe', self._full_path_in_sra])
# TODO: catch error if file does not exist
self._out_values = self.results()
return completed
def results(self):
if self._out_values is None:
self._out_values = pd.read_csv(self._full_path_out_sra, sep='\s+', header=0)
return self._out_values
@property
def radiation(self):
if self._radiation is None:
self._radiation = []
id_building = ''
header_building = []
for column in self._out_values.columns.values:
if id_building != column.split(':')[1]:
id_building = column.split(':')[1]
if len(header_building) > 0:
self._radiation.append(pd.concat([mv.MonthlyValues().month_hour, self._out_values[header_building]], axis=1))
header_building = [column]
else:
header_building.append(column)
self._radiation.append(pd.concat([mv.MonthlyValues().month_hour, self._out_values[header_building]], axis=1))
return self._radiation
# mode = 0, set only monthly values
# mode = 1, set only hourly values
# mode = 2, set both
def set_irradiance_surfaces(self, city, mode=0):
for radiation in self.radiation:
building_name = radiation.columns.values.tolist()[1].split(':')[1]
city_object = city.city_object(building_name)
for column in radiation.columns.values:
if column == 'month':
continue
header_name = column
surface_name = header_name.split(':')[2]
surface = city_object.surface(surface_name)
if mode == 0 or mode == 2:
df = mv.MonthlyValues.get_total_month(radiation[['month', header_name]])
surface.global_irradiance_month = [gim[0] for gim in df[[header_name]].to_numpy()]
if mode == 1 or mode == 2:
df = radiation[[header_name]]
surface.global_irradiance_hour = df[[header_name]].to_numpy()
return
@property
def content(self):
return xmltodict.unparse(self._content, pretty=True, short_empty_elements=True)
def save(self):
with open(self._full_path_in_sra, "w") as sra_file:
sra_file.write(self.content)
return
def _correct_points(self, points):
# correct the x, y, z values into the reference frame set by lower_corner parameter
# [0, 0, 0] by default means no correction.
points[0] = points[0] - self._lower_corner[0]
points[1] = points[1] - self._lower_corner[1]
points[2] = points[2] - self._lower_corner[2]
return points
def add_city_objects(self, city_objects):
buildings = []
for i in range(len(city_objects)):
city_object = city_objects[i]
building = OrderedDict()
building['@Name'] = city_object.name
building['@id'] = i
building['@key'] = city_object.name
building['@Simulate'] = 'True'
walls, roofs, floors = [], [], []
for s in city_object.surfaces:
surface = OrderedDict()
surface['@id'] = s.name
surface['@ShortWaveReflectance'] = s.swr
for j in range(len(s.points - 1)):
points = self._correct_points(s.points[j])
vertex = OrderedDict()
vertex['@x'] = points[0]
vertex['@y'] = points[1]
vertex['@z'] = points[2]
surface['V' + str(j)] = vertex
if s.type == 'Wall':
walls.append(surface)
elif s.type == 'Roof':
roofs.append(surface)
else:
floors.append(surface)
building['Wall'] = walls
building['Roof'] = roofs
building['Floor'] = floors
buildings.append(building)
district = OrderedDict()
district['FarFieldObstructions'] = None
district['Building'] = buildings
self._content['CitySim']['District'] = district
return
@property
def city(self):
with open(self._full_path_cli, 'r') as file:
return file.readline().replace('\n', '')

34
weather/weather.py Normal file
View File

@ -0,0 +1,34 @@
import math
import pandas as pd
import helpers.constants as cte
from helpers import monthlyvalues as mv
class Weather(object):
def __init__(self, full_path_weather):
self._full_path_weather = full_path_weather
if self._full_path_weather is not None:
# TODO: catch error if file does not exist
self._weather_values = pd.read_csv(self._full_path_weather, sep='\s+', header=None,
names=['hour', 'global_horiz', 'temperature', 'diffuse', 'beam', 'empty'])
self._weather_values = pd.concat([mv.MonthlyValues().month_hour, self._weather_values], axis=1)
@property
def get_weather_temperatures(self):
temperatures_hourly = self._weather_values[['month', 'temperature']]
sky_temperature = self.calculate_sky_temperature(temperatures_hourly)
_temperatures_hourly = pd.concat([temperatures_hourly, sky_temperature], axis=1)
return temperatures_hourly
@staticmethod
def calculate_sky_temperature(ambient_temperature):
# Swinbank - Fuentes sky model approximation(1963) based on cloudiness statistics(32 %) in United States
# ambient temperatures( in °C)
# sky temperatures( in °C)
_ambient_temperature = ambient_temperature[['temperature']].to_numpy()
_values = []
for i in range(0, len(_ambient_temperature)):
_value = 0.037536 * math.pow((_ambient_temperature[i] + cte.celsius2kelvin), 1.5) \
+ 0.32 * (_ambient_temperature[i] + cte.celsius2kelvin) - cte.celsius2kelvin
_values.append(_value)
return pd.DataFrame(_values, columns=['sky temperature'])