Ejemplo n.º 1
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);
        }
Ejemplo n.º 2
0
 /// <summary>湿り空気の顕熱[kJ/kg]を計算する</summary>
 /// <param name="mAir">湿り空気</param>
 /// <returns>顕熱[kJ/kg]</returns>
 public static double CalculateSensibleHeat(ImmutableMoistAir mAir)
 {
     return mAir.DryBulbTemperature * CP_AIR;
 }
Ejemplo n.º 3
0
 /// <summary>湿り空気の顕熱差[kJ/kg]を計算する</summary>
 /// <param name="mAir1">比較湿り空気状態</param>
 /// <param name="mAir2">基準湿り空気状態</param>
 /// <returns>顕熱差[kJ/kg]</returns>
 public static double CalculateSensibleHeatDifference(ImmutableMoistAir mAir1, ImmutableMoistAir mAir2)
 {
     return (CP_AIR + CP_VAPOR * mAir1.HumidityRatio) * mAir1.DryBulbTemperature - (CP_AIR + CP_VAPOR * mAir2.HumidityRatio) * mAir2.DryBulbTemperature;
 }
Ejemplo n.º 4
0
 /// <summary>湿り空気の潜熱差[kJ/kg]を計算する</summary>
 /// <param name="mAir1">比較湿り空気状態</param>
 /// <param name="mAir2">基準湿り空気状態</param>
 /// <returns>潜熱差[kJ/kg]</returns>
 public static double CalculateLatentHeatDifference(ImmutableMoistAir mAir1, ImmutableMoistAir mAir2)
 {
     return (mAir1.HumidityRatio - mAir2.HumidityRatio) * HFG;
 }
Ejemplo n.º 5
0
 /// <summary>湿り空気の顕熱[kJ/kg]および潜熱[kJ/kg]を計算する</summary>
 /// <param name="mAir">湿り空気状態</param>
 /// <param name="sensibleHeat">顕熱[kJ/kg]</param>
 /// <param name="latentHeat">潜熱[kJ/kg]</param>
 public static void CalculateSensibleAndLatentHeat(ImmutableMoistAir mAir, out double sensibleHeat, out double latentHeat)
 {
     sensibleHeat = CalculateSensibleHeat(mAir);
     latentHeat = CalculateLatentHeat(mAir);
 }
Ejemplo n.º 6
0
 /// <summary>湿り空気の潜熱[kJ/kg]を計算する</summary>
 /// <param name="mAir">湿り空気</param>
 /// <returns>潜熱[kJ/kg]</returns>
 public static double CalculateLatentHeat(ImmutableMoistAir mAir)
 {
     return (CP_VAPOR * mAir.DryBulbTemperature + HFG) * mAir.HumidityRatio;
 }
Ejemplo n.º 7
0
 /// <summary>湿り空気の顕熱差[kJ/kg]および潜熱差[kJ/kg]を計算する</summary>
 /// <param name="mAir1">比較湿り空気状態</param>
 /// <param name="mAir2">基準湿り空気状態</param>
 /// <param name="sensibleHeat">顕熱差[kJ/kg]</param>
 /// <param name="latentHeat">潜熱差[kJ/kg]</param>
 public static void CalculateHeatDifference(ImmutableMoistAir mAir1, ImmutableMoistAir mAir2, out double sensibleHeat, out double latentHeat)
 {
     sensibleHeat = CalculateSensibleHeatDifference(mAir1, mAir2);
     latentHeat = CalculateLatentHeatDifference(mAir1, mAir2);
 }
Ejemplo n.º 8
0
 /// <summary>空気を混合する</summary>
 /// <param name="air1">混合空気1</param>
 /// <param name="air2">混合空気2</param>
 /// <param name="air1Rate">空気1混合割合</param>
 /// <param name="air2Rate">空気2混合割合</param>
 /// <returns>混合空気</returns>
 public static MoistAir BlendAir(ImmutableMoistAir air1, ImmutableMoistAir air2, double air1Rate, double air2Rate)
 {
     if (air1Rate < 0 || air2Rate < 0) throw new Exception("湿空気の混合比率が0以下に設定されています");
     double rate = air1Rate + air2Rate;
     double dbt = (air1.DryBulbTemperature * air1Rate + air2.DryBulbTemperature * air2Rate) / rate;
     double ahd = (air1.HumidityRatio * air1Rate + air2.HumidityRatio * air2Rate) / rate;
     return MoistAir.GetAirStateFromDBHR(dbt, ahd);
 }
Ejemplo n.º 9
0
 /// <summary>空気を混合する</summary>
 /// <param name="air">混合する空気の配列</param>
 /// <param name="rate">混合空気の割合</param>
 /// <returns>混合済み空気</returns>
 public static MoistAir BlendAir(ImmutableMoistAir[] air, double[] rate)
 {
     int airNum = air.Length;
     if (airNum != rate.Length) throw new Exception("MoistAir Class: BlendAir: 混合する空気の数と割合の数が一致しません");
     double rSum = 0.0d;
     double tSum = 0.0d;
     double trSum = 0.0d;
     double hSum = 0.0d;
     double hrSum = 0.0d;
     for (int i = 0; i < airNum; i++)
     {
         //if (air[i].DryBulbTemperature < -30.0d) air[i].DryBulbTemperature = -30.0d;
         //if (air[i].DryBulbTemperature > 65.0d) air[i].DryBulbTemperature = 65.0d;   //←もう少し上限はあるかも。要確認
         //if (air[i].HumidityRatio < 0.0d) air[i].HumidityRatio = 0.0d;
         //割合を積算
         if (rate[i] < 0) throw new Exception("湿空気の混合比率が0以下に設定されています");
         rSum += rate[i];
         //温度[K]を積算
         tSum += air[i].DryBulbTemperature;
         //温度[K]×割合を積算
         trSum += air[i].DryBulbTemperature * rate[i];
         //絶対湿度[kg/kg]を積算
         hSum += air[i].HumidityRatio;
         //絶対湿度[kg/kg]×割合を積算
         hrSum += air[i].HumidityRatio * rate[i];
     }
     //混合後の乾球温度および絶対湿度を計算
     double drybulbTempOut;
     double absHumidOut;
     if (rSum >= 1.0e-5d)
     {
         drybulbTempOut = trSum / rSum;
         absHumidOut = hrSum / rSum;
     }
     //割合の積算が小さい場合は発散を防ぐために混合空気の数で割る
     else
     {
         drybulbTempOut = tSum / airNum;
         absHumidOut = hSum / airNum;
     }
     //出口空気状態を計算**飽和した場合の処理が必要**
     return new MoistAir(drybulbTempOut, absHumidOut);
 }
Ejemplo n.º 10
0
 /// <summary>コピーConstructor</summary>
 /// <param name="moistAir">コピーする湿り空気状態</param>
 public MoistAir(ImmutableMoistAir moistAir)
 {
     this.AtmosphericPressure = moistAir.AtmosphericPressure;
     this.dryBulbTemp = moistAir.DryBulbTemperature;
     this.humidityRatio = moistAir.HumidityRatio;
     this.relativeHumid = moistAir.RelativeHumidity;
     this.enthalpy = moistAir.Enthalpy;
     this.wetBulbTemp = moistAir.WetBulbTemperature;
     this.specificVolume = moistAir.SpecificVolume;
 }