/// <summary>ゾーン間換気量[m3/h]を取得する</summary> /// <param name="zone1">ゾーン1</param> /// <param name="zone2">ゾーン2</param> /// <returns>ゾーン間換気量[m3/h]</returns> public double GetAirExchangeVolume(ImmutableZone zone1, ImmutableZone zone2) { if (!zones.ContainsKey(zone1) || !zones.ContainsKey(zone2)) return 0; Dictionary<ImmutableZone, double> val = zones[zone1]; if (val.ContainsKey(zone2)) return val[zone2]; else return 0; }
/// <summary>ゾーンへ流入する空気の状態と体積[m3/h]を取得する</summary> /// <param name="zone">ゾーン</param> /// <param name="airState">空気状態</param> /// <param name="volume">空気体積[m3/h]</param> public void GetExchangeAir(ImmutableZone zone, out ImmutableMoistAir airState, out double volume) { Dictionary<ImmutableZone, double> val = zones[zone]; volume = 0; int cnt = val.Keys.Count; double[] dbt = new double[cnt]; double[] ahd = new double[cnt]; double[] vol = new double[cnt]; int index = 0; foreach (ImmutableZone zn in val.Keys) { dbt[index] = zn.CurrentDrybulbTemperature; ahd[index] = zn.CurrentHumidityRatio; vol[index] = val[zn]; volume += vol[index]; index++; } //混合 airState = MoistAir.BlendAir(dbt, ahd, vol); }
/// <summary>ゾーン間換気量[m3/h]を設定する</summary> /// <param name="zone1">ゾーン1</param> /// <param name="zone2">ゾーン2</param> /// <param name="airExchangeVolume">ゾーン間換気量[m3/h]</param> /// <returns>設定成功の真偽</returns> public bool SetAirExchangeVolume(ImmutableZone zone1, ImmutableZone zone2, double airExchangeVolume) { if (!zones.ContainsKey(zone1) || !zones.ContainsKey(zone2)) return false; Dictionary<ImmutableZone, double> val = zones[zone1]; if (airExchangeVolume <= 0) val.Remove(zone2); else val[zone2] = airExchangeVolume; val = zones[zone2]; if (airExchangeVolume <= 0) val.Remove(zone1); else val[zone1] = airExchangeVolume; return true; }
/// <summary>Constructor</summary> /// <param name="zones">ゾーン間換気を行うゾーンリスト</param> public InterZoneAirExchange(ImmutableZone[] zones) { //初期化 for (int i = 0; i < zones.Length; i++) this.zones.Add(zones[i], new Dictionary<ImmutableZone, double>()); }
/// <summary>熱取得[W]の内、放射成分を取得する</summary> /// <param name="zone">発熱要素が属するゾーン</param> /// <returns>熱取得の放射成分[W]</returns> public double GetRadiativeHeatGain(ImmutableZone zone) { return RadiativeHeatGain; }
/// <summary>潜熱負荷[W]を取得する</summary> /// <param name="zone">発熱要素が属するゾーン</param> /// <returns>潜熱負荷[W]</returns> public double GetLatentHeatGain(ImmutableZone zone) { return LatentHeatGain; }
/// <summary>熱取得[W]の内、対流成分を取得する</summary> /// <param name="zone">発熱要素が属するゾーン</param> /// <returns>熱取得の対流成分[W]</returns> public double GetConvectiveHeatGain(ImmutableZone zone) { return ConvectiveHeatGain; }
/// <summary>室間換気量[m3/h]を設定する</summary> /// <param name="upstreamZone">上流(空気が吹き出す側)の室</param> /// <param name="downstreamZone">下流(空気が吹き込む側)の室</param> /// <param name="airFlow">室間換気量[m3/h]</param> public void SetAirFlow(ImmutableZone upstreamZone, ImmutableZone downstreamZone, double airFlow) { Dictionary<ImmutableZone, double> af = this.airFlowToZone[downstreamZone]; if (af.ContainsKey(upstreamZone)) { if (airFlow == 0) af.Remove(upstreamZone); else af[upstreamZone] = airFlow; } else if (airFlow != 0) af.Add(upstreamZone, airFlow); }
/// <summary>室間換気量[m3/h]を取得する</summary> /// <param name="upstreamZone">上流(空気が吹き出す側)の室</param> /// <param name="downstreamZone">下流(空気が吹き込む側)の室</param> /// <returns>室間換気量[m3/h]</returns> public double GetAirFlow(ImmutableZone upstreamZone, ImmutableZone downstreamZone) { Dictionary<ImmutableZone, double> af = this.airFlowToZone[downstreamZone]; if (af.ContainsKey(upstreamZone)) return af[upstreamZone]; else return 0; }