{ "cells": [ { "cell_type": "markdown", "id": "7075e166-0d24-4c69-9440-6008a4c640ca", "metadata": {}, "source": [ "# Design of a Multi-Zone VAV System (the Long Way) \n", "---" ] }, { "cell_type": "markdown", "id": "6e7172e9-4619-4fb9-bac0-e92d39d809cc", "metadata": {}, "source": [ "In this notebook a multi-zone VAV system is designed with the package `hvac.air_conditioning`. The example is taken from the book **Heating and Cooling of Buildings** by *T. Agami Reddy, Jan F. Kreider, Peter S. Curtiss and Ari Rabl* (3th Edition, 2017), Chapter 19." ] }, { "cell_type": "code", "execution_count": 1, "id": "dc1778ad-62d5-4bb3-a10a-5cea37e6f664", "metadata": { "jupyter": { "source_hidden": true }, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "from deps import load_packages\n", "load_packages()" ] }, { "cell_type": "code", "execution_count": 2, "id": "7e6affec-a049-4cfb-9bb0-222720906112", "metadata": { "tags": [ "remove-cell" ] }, "outputs": [ { "data": { "text/html": [ "

Loaded my_styles.css

" ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import jupyter_addons as ja\n", "ja.set_css()" ] }, { "cell_type": "code", "execution_count": 3, "id": "f71a955b-99bc-4a69-91b4-0d390a7a1ecd", "metadata": {}, "outputs": [], "source": [ "from hvac import Quantity\n", "from hvac.fluids import HumidAir\n", "from hvac.air_conditioning import AirConditioningProcess, AdiabaticMixing, AirStream, Fan" ] }, { "cell_type": "code", "execution_count": 4, "id": "6df9b253-8a1c-4798-b811-c0427ba644ba", "metadata": {}, "outputs": [], "source": [ "Q_ = Quantity" ] }, { "cell_type": "markdown", "id": "6efa07a6-1d39-48d1-872b-ac47f2e01c29", "metadata": {}, "source": [ "## 0. Design Data" ] }, { "cell_type": "markdown", "id": "d5288c59-1b7d-4177-9062-3291c659ad78", "metadata": {}, "source": [ "*A two-zone building is to be equipped with a VAV system with preheat and reheat under the load conditions noted as follows. Size the supply fan, cooling coil, preheat coil, and reheat coil (or baseboard heating) for this building. Note that these will also apply to a CAV system under peak design conditions.*" ] }, { "cell_type": "markdown", "id": "8494636f-4c77-40e9-98f8-feec424165f7", "metadata": {}, "source": [ "**Space loads**" ] }, { "cell_type": "markdown", "id": "58eeedb3-925d-4a20-bc3c-6c2edb224867", "metadata": {}, "source": [ "| | Zone A | Zone B |\n", "|-|--------|--------|\n", "| Sensible peak summer design cooling load | 224,844 Btu/hr | 103,308 Btu/hr |\n", "| Latent peak summer design cooling load | 56,000 Btu/hr | 20,000 Btu/hr |\n", "| Sensible peak winter design load | -143,000 Btu/hr | 49,092 Btu/hr |\n", "| Zone temperature | 75°F | 75°F |" ] }, { "cell_type": "markdown", "id": "93cf105c-a771-40ec-a88a-3c48405e833e", "metadata": {}, "source": [ ">Notice that interior zone B still requires cooling in winter." ] }, { "cell_type": "markdown", "id": "30f766a8-9fe4-4e4b-bc04-98f24d76e76d", "metadata": {}, "source": [ "**Design parameters**\n", "\n", "1. summer design dry-and wet-bulb temperatures: 97°F and 76°F.\n", "2. winter design temperature: 7°F and air assumed to be totally dry.\n", "3. pressure drop in supply system at full air-flow: 3.0 inWG.\n", "4. fan efficiency: 60%.\n", "5. return air fan air temperature rise: none.\n", "6. ventilation airflow rate: 2400 ft3/min.\n", "7. relative air humidity at cooling coil outlet: 85%.\n", "8. temperature difference between supply air and zone air: 20°F (to ensure proper mixing).\n", "9. maximum supply air temperature: 105°F (to avoid stratification)." ] }, { "cell_type": "markdown", "id": "04b21781-3441-4fd0-8e67-de864d570d35", "metadata": {}, "source": [ "**Sketch**" ] }, { "cell_type": "markdown", "id": "1ea88b10-9fc5-4045-b882-3bec7423b56a", "metadata": {}, "source": [ "![scheme](./images/airco_vav.png)" ] }, { "cell_type": "markdown", "id": "d6a0b94e-3af5-45cc-bbad-bea5ea788e4d", "metadata": {}, "source": [ "**Assumptions**\n", "\n", "- Ignore factors not included in the list given earlier, such as duct heat losses and gains. \n", "- The location is assumed to be at sea level.\n", "- Rather than use enthalpy balances on the zones, the flows will be designed based on sensible heat loads (this is meant to simplify the problem). \n", "- Peak loads are coincident; no diversity adjustment is used.\n", "- During peak heating, latent loads on the space are negligible. \n", "- During winter, room humidifiers are used to maintain the necessary humidity levels. \n", "- The supply airflow to the zones cannot be reduced to less than 60 % of the full-load design value by mass to ensure proper mixing of the cold supply air once it enters the space." ] }, { "cell_type": "markdown", "id": "13d1ae57-5613-4dc0-8670-2092baa31f0f", "metadata": {}, "source": [ "## COOLING DESIGN DAY" ] }, { "cell_type": "markdown", "id": "187c7ba4-4539-4550-838d-1c56e9c54378", "metadata": {}, "source": [ "## 1. Mass Flow Rate of Ventilation Air" ] }, { "cell_type": "code", "execution_count": 5, "id": "0eea17dc-cae9-4e8f-bfce-cd9338ed7254", "metadata": {}, "outputs": [], "source": [ "outdoor_air = HumidAir(Tdb=Q_(97, 'degF'), Twb=Q_(76, 'degF'))" ] }, { "cell_type": "code", "execution_count": 6, "id": "66133989-0288-47f9-a530-ae008eacae7f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "V_vent = Q_(2400, 'ft ** 3 / min')\n", "m_vent = outdoor_air.rho * V_vent\n", "\n", "ja.display_list([\n", " f\"ventilation mass flow rate: {m_vent.to('lb / hr'):~P.0f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "54e96a02-a149-4c59-be24-619b109bd1db", "metadata": {}, "source": [ "## 2. Zone Supply Air Flow Rates" ] }, { "cell_type": "markdown", "id": "501805a4-3a0b-49db-a748-fe8b1cfc6dae", "metadata": {}, "source": [ "The zone air temperature is 75 °F. To ensure proper mixing with space air the supply air temperature is limited to 20 °F below the zone air temperature. The RH of the air leaving the cooling coil is specified at 85 %. As there is no addition nor extraction of water from the air between the cooling coil and the zones, this is also the RH of the supply air to the zones. " ] }, { "cell_type": "code", "execution_count": 7, "id": "b3a038f1-8087-4dbd-b5d3-df4d687a0af6", "metadata": {}, "outputs": [], "source": [ "supply_air = HumidAir(Tdb=Q_(75 - 20, 'degF'), RH=Q_(85, 'pct'))" ] }, { "cell_type": "markdown", "id": "aa8a7fec-6421-41ba-9902-01c6d60d6b66", "metadata": {}, "source": [ "**Mass flow rate of supply air to zone A**\n", "\n", "The required mass flow rate of supply air to zone A is determined to compensate for the sensible heat load of the zone." ] }, { "cell_type": "code", "execution_count": 8, "id": "1d887dc5-a523-44a1-99ad-20865605bbfd", "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "zone_A = AirConditioningProcess(\n", " air_in=supply_air,\n", " T_ao=Q_(75, 'degF'),\n", " Q_sen=Q_(224_844, 'Btu / hr')\n", ")\n", "m_supply_zA = zone_A.m_da\n", "\n", "ja.display_list([\n", " f\"supply air mass flow rate to zone A: {m_supply_zA.to('lb / min'):~P.3f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "4c5407b2-2c78-4036-8f89-170b14d50aca", "metadata": {}, "source": [ "**Mass flow rate of supply air to zone B**" ] }, { "cell_type": "code", "execution_count": 9, "id": "26b10594-887c-46b2-9260-5bc78b41c4a9", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • supply air mass flow rate to zone B: 353.374 lb/min
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "zone_B = AirConditioningProcess(\n", " air_in=supply_air,\n", " T_ao=Q_(75, 'degF'),\n", " Q_sen=Q_(103_308, 'Btu / hr')\n", ")\n", "m_supply_zB = zone_B.m_da\n", "\n", "ja.display_list([\n", " f\"supply air mass flow rate to zone B: {m_supply_zB.to('lb / min'):~P.3f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "1b5daa97-c85c-41e3-8ae3-d3f7dd3e4c51", "metadata": {}, "source": [ "**Total mass flow rate of supply air**" ] }, { "cell_type": "code", "execution_count": 10, "id": "afc4d46e-985e-4bf7-ac60-16732422c50f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • total supply air mass flow rate: 1122.473 lb/min
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m_supply = m_supply_zA + m_supply_zB\n", "\n", "ja.display_list([\n", " f\"total supply air mass flow rate: {m_supply.to('lb / min'):~P.3f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "2bc5df60-dde6-4bca-a33e-73f8e0c866d9", "metadata": {}, "source": [ "## 3. Supply Fan Power, Fan Heating and Air Condition at Cooling Coil Exit" ] }, { "cell_type": "markdown", "id": "426f9760-e7ae-4915-902b-a7ec2663ff0b", "metadata": {}, "source": [ "**Mechanical supply fan power**" ] }, { "cell_type": "markdown", "id": "3f9eabdd-9d3b-4377-9127-4653514725d8", "metadata": {}, "source": [ "The fan pressure is already given (in reality this needs to be calculated after the supply air flow rates to the zones have been determined). The fan efficiency is also given. " ] }, { "cell_type": "code", "execution_count": 11, "id": "9fd7a6b3-7c6c-4562-ac74-13c365ea5e46", "metadata": {}, "outputs": [], "source": [ "dP_fan = Q_(3.0, 'inch_H2O_60F')\n", "eta_fan = Q_(60, 'pct')" ] }, { "cell_type": "markdown", "id": "68785d53-e8ff-40dc-a04b-aca8507e8240", "metadata": {}, "source": [ "To determine the fan power the total volume flow rate of supply air to the zones must first be calculated:" ] }, { "cell_type": "code", "execution_count": 12, "id": "a5f4e6f2-0c00-4242-80b7-2eed9411408e", "metadata": {}, "outputs": [], "source": [ "V_supply = supply_air.v * m_supply" ] }, { "cell_type": "markdown", "id": "f8a6a4b9-ef2f-4b4b-afd6-311fa262b203", "metadata": {}, "source": [ "Fan power then follows from:" ] }, { "cell_type": "code", "execution_count": 13, "id": "9cb33636-035b-4918-9329-9e0e022a7df2", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • supply fan power: 12 hp
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "W_fan = V_supply * dP_fan / eta_fan\n", "\n", "ja.display_list([\n", " f\"supply fan power: {W_fan.to('hp'):~P.0f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "79ddce66-44bb-4d92-8019-1d97409133bf", "metadata": {}, "source": [ "**Supply air temperature raise due to fan heating**" ] }, { "cell_type": "code", "execution_count": 14, "id": "c2285912-af42-4df6-8e79-cd090290541c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • fan temperature rise: 2 Δ°F
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "supply_fan = Fan(\n", " air_out=supply_air,\n", " fan_efficiency=eta_fan,\n", " fan_pressure=dP_fan\n", ")\n", "dT_fan = supply_fan.air_out.Tdb - supply_fan.air_in.Tdb\n", "\n", "ja.display_list([\n", " f\"fan temperature rise: {dT_fan.to('delta_degF'):~P.0f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "4dfcbf62-8483-49f4-ba5d-a7ff1fe490e3", "metadata": {}, "source": [ "**Air Condition at Cooling Coil Exit**" ] }, { "cell_type": "code", "execution_count": 15, "id": "a7657e7e-36f6-4cd3-8df2-749a8146cd8c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • cooled air: 53 °F TDB, 0.00733 lbw/lbda
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cooled_air = HumidAir(Tdb=supply_air.Tdb - dT_fan, RH=Q_(85, 'pct'))\n", "\n", "ja.display_list([\n", " f\"cooled air: {cooled_air.Tdb.to('degF'):~P.0f} TDB, {cooled_air.W.to('lb / lb'):~P.5f} lbw/lbda\"\n", "])" ] }, { "cell_type": "markdown", "id": "71e21eb0-e1b2-41fd-9f14-145f4c5f6ffb", "metadata": {}, "source": [ "## 4. Return Air Condition" ] }, { "cell_type": "markdown", "id": "6b4b90ba-63de-410e-82f7-0208d9c0e57f", "metadata": {}, "source": [ "**Zone A**" ] }, { "cell_type": "code", "execution_count": 16, "id": "4456adec-8a1c-43f9-821e-9b6fb6dae70d", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • return air zone A: 75 °F TDB, 0.00894 lbw/lbda
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "zone_A = AirConditioningProcess(\n", " air_in=supply_air,\n", " T_ao=Q_(75, 'degF'),\n", " m_da=m_supply_zA,\n", " Q_sen=Q_(224_844, 'Btu / hr'),\n", " Q_lat=Q_(56_000, 'Btu / hr')\n", ")\n", "return_air_zA = zone_A.air_out\n", "\n", "ja.display_list([\n", " f\"return air zone A: {return_air_zA.Tdb.to('degF'):~P.0f} TDB, {return_air_zA.W.to('lb / lb'):~P.5f} lbw/lbda\"\n", "])" ] }, { "cell_type": "markdown", "id": "41a9804b-2b87-4e0c-b134-6df58275eb9f", "metadata": {}, "source": [ "**Zone B**" ] }, { "cell_type": "code", "execution_count": 17, "id": "a88d5b68-7137-4abc-bc07-5006028ad7ae", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • return air zone B: 75 °F TDB, 0.00869 lbw/lbda
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "zone_B = AirConditioningProcess(\n", " air_in=supply_air,\n", " T_ao=Q_(75, 'degF'),\n", " m_da=m_supply_zB,\n", " Q_sen=Q_(103_308, 'Btu / hr'),\n", " Q_lat=Q_(20_000, 'Btu / hr')\n", ")\n", "return_air_zB = zone_B.air_out\n", "\n", "ja.display_list([\n", " f\"return air zone B: {return_air_zB.Tdb.to('degF'):~P.0f} TDB, {return_air_zB.W.to('lb / lb'):~P.5f} lbw/lbda\"\n", "])" ] }, { "cell_type": "markdown", "id": "74263f80-b82e-4369-b98b-12a13cbbc8f5", "metadata": {}, "source": [ "**Adiabatic mixing of return air from zones**" ] }, { "cell_type": "code", "execution_count": 18, "id": "84c5d767-f882-45c4-8a85-123b64461154", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • return air from zones: 75 °F TDB, 0.00886 lbw/lbda
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "return_air_mixing = AdiabaticMixing(\n", " in1=AirStream(state=return_air_zA, m_da=m_supply_zA),\n", " in2=AirStream(state=return_air_zB, m_da=m_supply_zB),\n", " out=AirStream(m_da=m_supply)\n", ")\n", "return_air = return_air_mixing.stream_out.state\n", "\n", "ja.display_list([\n", " f\"return air from zones: {return_air.Tdb.to('degF'):~P.0f} TDB, {return_air.W.to('lb / lb'):~P.5f} lbw/lbda\"\n", "])" ] }, { "cell_type": "markdown", "id": "aa96635a-019b-433e-be6c-80b75827b534", "metadata": {}, "source": [ "## 5. Air Condition at Cooling Coil Entrance" ] }, { "cell_type": "code", "execution_count": 19, "id": "e7f501de-44ea-4e22-ae08-b7fc3d038da2", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • mixed air: 78.3 °F TDB, 0.00971 lbw/lbda
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mixing_chamber = AdiabaticMixing(\n", " in1=AirStream(state=outdoor_air, m_da=m_vent),\n", " in2=AirStream(state=return_air, m_da=m_supply - m_vent),\n", " out=AirStream(m_da=m_supply_zA + m_supply_zB)\n", ")\n", "mixed_air = mixing_chamber.stream_out.state\n", "\n", "ja.display_list([\n", " f\"mixed air: {mixed_air.Tdb.to('degF'):~P.1f} TDB, {mixed_air.W.to('lb / lb'):~P.5f} lbw/lbda\"\n", "])" ] }, { "cell_type": "markdown", "id": "5b4a7bb0-6d08-4eb9-8851-f5f1fcf66417", "metadata": {}, "source": [ "## 6. Cooling Coil Load" ] }, { "cell_type": "code", "execution_count": 20, "id": "6371e424-db68-4ded-aaf6-22864a82c8c9", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • cooling coil load: -586874 Btu/h
  • cooling coil ADP: 46 °F TDB, 0.00669 lbw/lbda
  • cooling coil contact factor: 79 %
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cooling_coil = AirConditioningProcess(\n", " air_in=mixed_air,\n", " air_out=cooled_air,\n", " m_da=m_supply\n", ")\n", "\n", "ja.display_list([\n", " f\"cooling coil load: {cooling_coil.Q.to('Btu / hr'):~P.0f}\",\n", " f\"cooling coil ADP: {cooling_coil.ADP.Tdb.to('degF'):~P.0f} TDB, {cooling_coil.ADP.W.to('lb / lb'):~P.5f} lbw/lbda\",\n", " f\"cooling coil contact factor: {cooling_coil.beta.to('pct'):~P.0f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "c4254286-d557-4fa4-9ae0-0939cdc225e1", "metadata": {}, "source": [ "## HEATING DESIGN DAY" ] }, { "cell_type": "markdown", "id": "7546b280-7076-4ecf-9446-d17f003ebfff", "metadata": {}, "source": [ "## 1. Mass Flow Rate of Ventilation Air" ] }, { "cell_type": "code", "execution_count": 21, "id": "4ba0c074-326f-419a-a761-bb485dd7197d", "metadata": {}, "outputs": [], "source": [ "outdoor_air = HumidAir(Tdb=Q_(7, 'degF'), RH=Q_(0, 'pct')) # dry air" ] }, { "cell_type": "code", "execution_count": 22, "id": "1729ba38-5901-4a91-bde4-8a4bcbf0e30e", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • ventilation mass flow rate: 12250 lb/h
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "V_vent = Q_(2400, 'ft ** 3 / min')\n", "m_vent = outdoor_air.rho * V_vent\n", "\n", "ja.display_list([\n", " f\"ventilation mass flow rate: {m_vent.to('lb / hr'):~P.0f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "d881b6ca-3f43-43a0-83fb-abc4bc60efa8", "metadata": {}, "source": [ "## 2. Preheat Coil Peak Load" ] }, { "cell_type": "markdown", "id": "de962e90-46d2-4902-b133-01876830ddb7", "metadata": {}, "source": [ "The peak load on the preheat coil is determined based on the load needed to heat the cold outdoor ventilation air to the nominal coil outlet temperature." ] }, { "cell_type": "code", "execution_count": 23, "id": "3fb831c1-7933-4efe-a8b0-73f013a896bc", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • preheat coil peak load: 137878 Btu/h
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "preheat_coil = AirConditioningProcess(\n", " air_in=outdoor_air,\n", " T_ao=cooled_air.Tdb,\n", " m_da=m_vent\n", ")\n", "Q_preheat_peak = preheat_coil.Q_sen\n", "\n", "ja.display_list([\n", " f\"preheat coil peak load: {Q_preheat_peak.to('Btu/hr'):~P.0f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "118ece3f-509e-4554-8ac5-5970fd109a2c", "metadata": {}, "source": [ "## 3. Zone Supply Air Flow Rates and Supply Air Temperatures" ] }, { "cell_type": "markdown", "id": "68d1f7ea-fb4f-4618-93db-3797ccd812c1", "metadata": {}, "source": [ "**Zone A** (requires heating)" ] }, { "cell_type": "markdown", "id": "680f9e7d-c90f-4c2d-b9d5-43c821bacf9a", "metadata": {}, "source": [ "At first take the maximum allowable supply air temperature of 105 °F to determine mass flow rate." ] }, { "cell_type": "code", "execution_count": 24, "id": "9bd9275e-cb54-43ef-99f5-82697db5cbb1", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • supply air mass flow rate to zone A: 326.096 lb/min
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "zone_A = AirConditioningProcess(\n", " T_ai=Q_(105, 'degF'),\n", " T_ao=Q_(75, 'degF'),\n", " Q_sen=Q_(-143_000, 'Btu / hr')\n", ")\n", "m_supply_zA_winter = zone_A.m_da\n", "\n", "ja.display_list([\n", " f\"supply air mass flow rate to zone A: {m_supply_zA_winter.to('lb / min'):~P.3f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "0882130f-e90c-4214-9cfc-2cf227f7d6ab", "metadata": {}, "source": [ "Recall the stipulation that the supply air mass flow rate cannot be less than 60 % of the peak air flow to ensure proper mixing with zone air." ] }, { "cell_type": "code", "execution_count": 25, "id": "a07b6701-0aef-47a5-b9c6-44b328b77b8e", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • supply air mass flow rate to zone A: 461.459 lb/min
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m_supply_zA_winter = max(m_supply_zA_winter, 0.6 * m_supply_zA)\n", "\n", "ja.display_list([\n", " f\"supply air mass flow rate to zone A: {m_supply_zA_winter.to('lb / min'):~P.3f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "fff38bb6-374a-4fd2-a84a-fc4b2df6494c", "metadata": {}, "source": [ "Supply air temperature:" ] }, { "cell_type": "code", "execution_count": 26, "id": "25658e4c-e692-42e7-ab9f-69db6dc4f369", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • supply air temperature for zone A: 96.200 °F
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "zone_A = AirConditioningProcess(\n", " T_ao=Q_(75, 'degF'),\n", " m_da=m_supply_zA_winter,\n", " Q_sen=Q_(-143_000, 'Btu / hr')\n", ")\n", "T_supply_zA = zone_A.T_ai\n", "\n", "ja.display_list([\n", " f\"supply air temperature for zone A: {T_supply_zA.to('degF'):~P.3f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "15f444d0-598c-4be3-bab6-c16418253055", "metadata": {}, "source": [ "**Zone B** (requires cooling)" ] }, { "cell_type": "markdown", "id": "73c708b6-3695-4e6d-ba7b-736fc48042e1", "metadata": {}, "source": [ "At first take the minimum supply air temperature (cooling) to determine mass flow rate." ] }, { "cell_type": "code", "execution_count": 27, "id": "1b04a9e9-07d9-4f7b-8fbd-583ade280b0c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • supply air mass flow rate to zone B: 167.924 lb/min
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "zone_B = AirConditioningProcess(\n", " T_ai=supply_air.Tdb,\n", " T_ao=Q_(75, 'degF'),\n", " Q_sen=Q_(49_092, 'Btu / hr')\n", ")\n", "m_supply_zB_winter = zone_B.m_da\n", "\n", "ja.display_list([\n", " f\"supply air mass flow rate to zone B: {m_supply_zB_winter.to('lb / min'):~P.3f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "0ad08c41-c067-44cf-b393-efcff85b5af6", "metadata": {}, "source": [ "Next, check again for the condition that mass flow rate cannot be less than 60 % of peak air flow." ] }, { "cell_type": "code", "execution_count": 28, "id": "38955ceb-eb98-465c-bf3b-1d4096dd82d1", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • supply air mass flow rate to zone B: 212.025 lb/min
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m_supply_zB_winter = max(m_supply_zB_winter, 0.6 * m_supply_zB)\n", "\n", "ja.display_list([\n", " f\"supply air mass flow rate to zone B: {m_supply_zB_winter.to('lb / min'):~P.3f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "406f50a9-d2f4-42c6-a40a-f852765eb53b", "metadata": {}, "source": [ "Supply air temperature:" ] }, { "cell_type": "code", "execution_count": 29, "id": "3bce79b6-04aa-43c3-8069-97727b71b2b1", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • supply air temperature for zone B: 59.160 °F
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "zone_B = AirConditioningProcess(\n", " T_ao=Q_(75, 'degF'),\n", " m_da=m_supply_zB_winter,\n", " Q_sen=Q_(49_092, 'Btu / hr')\n", ")\n", "T_supply_zB = zone_B.T_ai\n", "\n", "ja.display_list([\n", " f\"supply air temperature for zone B: {T_supply_zB.to('degF'):~P.3f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "2468bfa2-9a53-48ae-8185-0b4e06ee4b18", "metadata": {}, "source": [ "**Total supply air mass flow rate**" ] }, { "cell_type": "code", "execution_count": 30, "id": "32354ff0-7c9c-4973-b606-b9034e35ceb9", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • total supply air mass flow rate: 673.484 lb/min
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m_supply = m_supply_zA_winter + m_supply_zB_winter\n", "\n", "ja.display_list([\n", " f\"total supply air mass flow rate: {m_supply.to('lb / min'):~P.3f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "9e7653d1-8657-4939-b59c-63dafac5702b", "metadata": {}, "source": [ "**Global Supply Air Temperature**" ] }, { "cell_type": "markdown", "id": "e814e0da-1284-47cb-a68d-262d719276a0", "metadata": {}, "source": [ "The global supply air temperature must be the smallest required supply air temperature of all zones." ] }, { "cell_type": "code", "execution_count": 31, "id": "213e7deb-d6cd-40fe-bc5e-ebe5d7072d7c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • global supply air temperature: 59.160 °F
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "supply_air = HumidAir(Tdb=min(T_supply_zA, T_supply_zB), RH=Q_(0, 'pct'))\n", "\n", "ja.display_list([\n", " f\"global supply air temperature: {supply_air.Tdb.to('degF'):~P.3f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "c439dd45-594d-4955-b616-504bc78f8282", "metadata": {}, "source": [ "## 4. Return Air Condition" ] }, { "cell_type": "code", "execution_count": 32, "id": "dfcec307-ccd1-497e-aa13-9e0cc6381d78", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • return air temperature: 75.000 °F
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "return_air_mixing = AdiabaticMixing(\n", " in1=AirStream(state=HumidAir(Tdb=Q_(75, 'degF'), RH=Q_(0, 'pct')), m_da=m_supply_zA_winter),\n", " in2=AirStream(state=HumidAir(Tdb=Q_(75, 'degF'), RH=Q_(0, 'pct')), m_da=m_supply_zB_winter),\n", " out=AirStream(m_da=m_supply)\n", ")\n", "return_air = return_air_mixing.stream_out.state\n", "\n", "ja.display_list([\n", " f\"return air temperature: {return_air.Tdb.to('degF'):~P.3f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "4a887465-da31-4718-b750-c7bcd5df0898", "metadata": {}, "source": [ "## 5. Adiabatic Mixing of Return Air and Outdoor Ventilation Air" ] }, { "cell_type": "code", "execution_count": 33, "id": "fb89c13a-a2dc-43dd-9d5b-19ea230ac634", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • mixed air temperature: 54.392 °F
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mixing_chamber = AdiabaticMixing(\n", " in1=AirStream(state=outdoor_air, m_da=m_vent),\n", " in2=AirStream(state=return_air, m_da=m_supply - m_vent),\n", " out=AirStream(m_da=m_supply)\n", ")\n", "mixed_air = mixing_chamber.stream_out.state\n", "\n", "ja.display_list([\n", " f\"mixed air temperature: {mixed_air.Tdb.to('degF'):~P.3f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "2d6e791b-07e3-4ff6-8694-77372d65a154", "metadata": {}, "source": [ "## 6. Fan Heating and Air Condition at Cooling Coil Exit" ] }, { "cell_type": "markdown", "id": "87ef9171-c221-4ec1-b4a6-87f43de6f5d2", "metadata": {}, "source": [ "**Supply air temperature raise due to fan heating**" ] }, { "cell_type": "code", "execution_count": 34, "id": "b8274d35-5e68-4b1e-bf0a-7c244590b15f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • fan temperature rise: 2 Δ°F
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "supply_fan = Fan(\n", " air_out=supply_air,\n", " fan_efficiency=eta_fan,\n", " fan_pressure=dP_fan\n", ")\n", "dT_fan = supply_air.Tdb - supply_fan.air_in.Tdb\n", "\n", "ja.display_list([\n", " f\"fan temperature rise: {dT_fan.to('delta_degF'):~P.0f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "0c180fb5-6253-4415-be0c-551a9ccc9a96", "metadata": {}, "source": [ "**Air Condition at Cooling Coil Exit**" ] }, { "cell_type": "code", "execution_count": 35, "id": "f64202de-889c-4eda-99d7-09f764d0831c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • temperature cooled air: 57.3 °F
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cooled_air = HumidAir(Tdb=supply_air.Tdb - dT_fan, RH=Q_(0, 'pct'))\n", "\n", "ja.display_list([\n", " f\"temperature cooled air: {cooled_air.Tdb.to('degF'):~P.1f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "48214082-cc2f-4b1e-9170-1146f9858193", "metadata": {}, "source": [ "**Check if Preheating the Mixed Air is necessary on Heating Design Day**" ] }, { "cell_type": "markdown", "id": "99981b24-b546-4c0f-b87c-bc2504d741c7", "metadata": {}, "source": [ "Notice that the cooled air temperature is higher than the mixed air temperature. The mixed air is therefore preheated to the cooled air temperature." ] }, { "cell_type": "code", "execution_count": 36, "id": "8f710ecd-9788-4b45-90aa-14abfea463b1", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • preheat coil load at design conditions: 29050 Btu/h
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "preheat_coil = AirConditioningProcess(\n", " air_in=mixed_air,\n", " air_out=cooled_air,\n", " m_da=m_supply\n", ")\n", "preheated_air = cooled_air\n", "\n", "ja.display_list([\n", " f\"preheat coil load at design conditions: {preheat_coil.Q.to('Btu / hr'):~P.0f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "b42f72c5-6fa3-4e3a-9381-505239ec79f7", "metadata": {}, "source": [ "## 7. Cooling Coil Load" ] }, { "cell_type": "code", "execution_count": 37, "id": "223d4fc5-eb43-4858-891f-b902385cc953", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • cooling coil load: 0 Btu/h
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cooling_coil = AirConditioningProcess(\n", " T_ai=preheated_air.Tdb,\n", " T_ao=cooled_air.Tdb,\n", " m_da=m_supply\n", ")\n", "\n", "ja.display_list([\n", " f\"cooling coil load: {cooling_coil.Q_sen.to('Btu / hr'):~P.0f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "4ec2addb-0f3c-4da3-99bf-eeb3b188586f", "metadata": {}, "source": [ "## 8. Reheat Coil Loads" ] }, { "cell_type": "markdown", "id": "84839e32-3691-4563-afe7-e63684d4a0fa", "metadata": {}, "source": [ "**Zone A**" ] }, { "cell_type": "code", "execution_count": 38, "id": "8b2f1f0b-6d4c-4190-a3a5-e1849625232d", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • reheat coil load: 249846 Btu/h
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "reheat_coil_zA = AirConditioningProcess(\n", " T_ai=supply_air.Tdb,\n", " T_ao=T_supply_zA,\n", " m_da=m_supply_zA_winter\n", ")\n", "\n", "ja.display_list([\n", " f\"reheat coil load: {reheat_coil_zA.Q_sen.to('Btu / hr'):~P.0f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "1e250d80-a618-4c6b-b2f9-b75b95b4bf78", "metadata": {}, "source": [ "**Zone B**" ] }, { "cell_type": "code", "execution_count": 39, "id": "27b5172b-97d8-4627-b523-f8d5aff6d79d", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • reheat coil load: 0 Btu/h
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "reheat_coil_zB = AirConditioningProcess(\n", " T_ai=supply_air.Tdb,\n", " T_ao=T_supply_zB,\n", " m_da=m_supply_zB_winter\n", ")\n", "\n", "ja.display_list([\n", " f\"reheat coil load: {reheat_coil_zB.Q_sen.to('Btu / hr'):~P.0f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "83be2926-2ed7-4bcd-91f7-d821e91e5d00", "metadata": {}, "source": [ "**Total peak heat requirement**" ] }, { "cell_type": "code", "execution_count": 41, "id": "75555cd2-7518-4a91-a0f8-af51acc26629", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
  • peak heat requirement: 387724 Btu/h
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Q_heat_tot = reheat_coil_zA.Q_sen + reheat_coil_zB.Q_sen + Q_preheat_peak\n", "\n", "ja.display_list([\n", " f\"peak heat requirement: {Q_heat_tot.to('Btu / hr'):~P.0f}\"\n", "])" ] }, { "cell_type": "markdown", "id": "be258d60-b8a2-4130-8691-2d2d31047234", "metadata": {}, "source": [ "This heat rate must be increased by pickup loads from night setback, safety factors, and piping losses to size the coils and the boiler." ] }, { "cell_type": "code", "execution_count": null, "id": "5cf76c1f-e876-4857-ada7-cf9c709f36a6", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.4" } }, "nbformat": 4, "nbformat_minor": 5 }