//パソコンによる空気調和計算法 pp.180 private static void makeRoom(double timeStep, out Zone room, out Wall exWall, out Wall inWall, out Wall ceiling, out Wall floor, out Sun sun, out Outdoor outdoor) { //太陽を作成//東京 sun = new Sun(35, 139, 134); //外界を作成 outdoor = new Outdoor(); outdoor.Sun = sun; //室を作成 room = new Zone(); room.Volume = 353; room.SensibleHeatCapacity = 3500 * 1000; room.InitializeAirState(26, 0.018); room.VentilationVolume = room.Volume * 0.2; room.TimeStep = timeStep; WallLayers layers; WallLayers.Layer layer; //外壁を作成 layers = new WallLayers(); layer = new WallLayers.Layer(new WallMaterial("アルミ化粧板", 210, 2373), 0.002); layers.AddLayer(layer); layer = new WallLayers.Layer(new WallMaterial("中空層", 1d / 0.086d, 0), 0); layers.AddLayer(layer); layer = new WallLayers.Layer(new WallMaterial("ロックウール", 0.042, 84), 0.050); layers.AddLayer(layer); layer = new WallLayers.Layer(new WallMaterial("コンクリート", 1.4, 1934), 0.150); layers.AddLayer(layer); exWall = new Wall(layers); exWall.SurfaceArea = 22.4; exWall.TimeStep = timeStep; WallSurface ews = exWall.GetSurface(true); ews.SolarAbsorptance = 0.7; ews.LongWaveEmissivity = 0.9; ews.Albedo = 0.2; WallSurface iws = exWall.GetSurface(false); ews.FilmCoefficient = 23; iws.FilmCoefficient = 9.3; exWall.SetIncline(new Incline(Incline.Orientation.SW, 0.5 * Math.PI), true); room.AddSurface(iws); //部屋に追加 outdoor.AddWallSurface(ews); //外界に追加 room.SetShortWaveRadiationRate(iws, iws.Area); //放射成分吸収比率を設定 room.SetLongWaveRadiationRate(iws, iws.Area); //放射成分吸収比率を設定 //内壁を作成 layers = new WallLayers(); layer = new WallLayers.Layer(new WallMaterial("コンクリート", 1.4, 1934), 0.120, 2); layers.AddLayer(layer); inWall = new Wall(layers); inWall.SurfaceArea = 100.8; inWall.TimeStep = timeStep; iws = inWall.GetSurface(true); iws.FilmCoefficient = 9.3; room.AddSurface(iws); room.SetShortWaveRadiationRate(iws, iws.Area); //放射成分吸収比率を設定 room.SetLongWaveRadiationRate(iws, iws.Area); //放射成分吸収比率を設定 //床と天井を作成 layers = new WallLayers(); layer = new WallLayers.Layer(new WallMaterial("カーペット", 0.08, 318), 0.015); layers.AddLayer(layer); layer = new WallLayers.Layer(new WallMaterial("コンクリート", 1.4, 1934), 0.150); layers.AddLayer(layer); layer = new WallLayers.Layer(new WallMaterial("中空層", 1d / 0.086d, 0), 0); layers.AddLayer(layer); layer = new WallLayers.Layer(new WallMaterial("石膏ボード", 0.17, 1030), 0.012); layers.AddLayer(layer); //床 floor = new Wall(layers); floor.SurfaceArea = 98; floor.TimeStep = timeStep; iws = floor.GetSurface(true); iws.FilmCoefficient = 9.3; room.AddSurface(iws); room.SetShortWaveRadiationRate(iws, iws.Area * 2.0); //放射成分吸収比率を設定**多め room.SetLongWaveRadiationRate(iws, iws.Area * 2.0); //放射成分吸収比率を設定**多め //天井 ceiling = new Wall(layers); ceiling.SurfaceArea = 98; ceiling.TimeStep = timeStep; iws = ceiling.GetSurface(false); iws.FilmCoefficient = 9.3; room.AddSurface(iws); room.SetShortWaveRadiationRate(iws, iws.Area); //放射成分吸収比率を設定 room.SetLongWaveRadiationRate(iws, iws.Area); //放射成分吸収比率を設定 //室温・隣室温度を設定 inWall.AirTemperature2 = ceiling.AirTemperature1 = floor.AirTemperature2 = 25; //窓を作成 GlassPanes glassPanes = new GlassPanes(0.79, 0.04, 190); Window window = new Window(glassPanes); WindowSurface ws = window.GetSurface(true); ws.FilmCoefficient = 23; ws.Albedo = 0.2; window.SurfaceArea = 28; window.OutSideIncline = new Incline(Incline.Orientation.SW, 0.5 * Math.PI); ws = window.GetSurface(false); ws.FilmCoefficient = 9.3; room.AddWindow(window); outdoor.AddWindow(window); window.ShadowRate = 0; room.SetShortWaveRadiationRate(window, window.SurfaceArea); //放射成分吸収比率を設定 room.SetLongWaveRadiationRate(window, window.SurfaceArea); //放射成分吸収比率を設定 //壁体初期化 inWall.InitializeTemperature(22); exWall.InitializeTemperature(22); floor.InitializeTemperature(22); ceiling.InitializeTemperature(22); }
/// <summary>壁熱貫流テスト(潜熱蓄熱材)</summary> private static void wallHeatTransferTest3() { //初期温度 const double INIT_TEMP = 35; //壁層を作成 WallLayers wl = new WallLayers(); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.FrexibleBoard), 0.0165)); wl.AddLayer(new WallLayers.Layer(new WallMaterial("ダミー材料", 1, 1), 0.02)); wl.AddLayer(new WallLayers.Layer(new WallMaterial("ダミー材料", 1, 1), 0.02)); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.ExtrudedPolystyreneFoam_3), 0.02)); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.Plywood), 0.009)); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.AirGap), 0.015)); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.Plywood), 0.009)); //壁体を作成 Wall wall = new Wall(wl); wall.TimeStep = 1200; wall.AirTemperature1 = 20; wall.AirTemperature2 = 20; wall.SurfaceArea = 6.48; //潜熱蓄熱材1を作成して設定 LatentHeatStorageMaterial material1; material1 = new LatentHeatStorageMaterial(19, new WallMaterial("パッシブ・スミターマル(凝固)", 0.19, 3.6 * 1400)); material1.AddMaterial(23, new WallMaterial("パッシブ・スミターマル(遷移)", (0.19 + 0.22) / 2d, 15.1 * 1400)); material1.AddMaterial(100, new WallMaterial("パッシブ・スミターマル(融解)", 0.22, 3.6 * 1400)); material1.Initialize(INIT_TEMP); wall.SetLatentHeatStorageMaterial(1, material1); //潜熱蓄熱材2を作成して設定 LatentHeatStorageMaterial material2; material2 = new LatentHeatStorageMaterial(30, new WallMaterial("スミターマル(凝固)", 0.19, 3.6 * 1390)); material2.AddMaterial(32, new WallMaterial("スミターマル(遷移)", (0.19 + 0.22) / 2d, 63.25 * 1400)); material2.AddMaterial(100, new WallMaterial("スミターマル(融解)", 0.22, 3.5 * 1410)); material2.Initialize(INIT_TEMP); wall.SetLatentHeatStorageMaterial(2, material2); //潜熱蓄熱材の間に配管を埋設 Tube tube = new Tube(0.84, 0.346, 4186); wall.AddTube(tube, 1); tube.SetFlowRate(0); tube.FluidTemperature = 40; //壁体温度を初期化 wall.InitializeTemperature(INIT_TEMP); for (int i = 0; i < wall.Layers.LayerNumber; i++) Console.Write("温度" + i + ", "); Console.WriteLine("蓄熱量[kJ]"); for (int i = 0; i < 200; i++) { if (i == 100) { tube.SetFlowRate(0.54); //通水開始 wall.AirTemperature1 = 30; wall.AirTemperature2 = 30; } wall.Update(); double[] tmp = wall.GetTemperatures(); for (int j = 0; j < tmp.Length - 1; j++) Console.Write(((tmp[j] + tmp[j + 1]) / 2d).ToString("F1") + ", "); Console.Write(wall.GetHeatStorage(INIT_TEMP).ToString("F0")); Console.WriteLine(); } Console.Read(); }
/// <summary>壁熱貫流テスト(潜熱蓄熱材)</summary> private static void wallHeatTransferTest4() { WallLayers layers = new WallLayers(); WallLayers.Layer layer; layer = new WallLayers.Layer(new WallMaterial("コンクリート", 1.4, 1934), 0.060); layers.AddLayer(layer); layer = new WallLayers.Layer(new WallMaterial("潜熱蓄熱材A", 1.4, 1934), 0.030); layers.AddLayer(layer); layer = new WallLayers.Layer(new WallMaterial("潜熱蓄熱材B", 1.4, 1934), 0.030); layers.AddLayer(layer); layer = new WallLayers.Layer(new WallMaterial("コンクリート", 1.4, 1934), 0.060); layers.AddLayer(layer); Wall wall = new Wall(layers); LatentHeatStorageMaterial material = new LatentHeatStorageMaterial(11, new WallMaterial("潜熱蓄熱材A1", 1.4, 1934)); material.AddMaterial(12, new WallMaterial("潜熱蓄熱材A2", 1.4, 1934 * 40)); material.AddMaterial(100, new WallMaterial("潜熱蓄熱材A3", 1.4, 1934)); wall.SetLatentHeatStorageMaterial(1, material); material = new LatentHeatStorageMaterial(13, new WallMaterial("潜熱蓄熱材B1", 1.4, 1934)); material.AddMaterial(14, new WallMaterial("潜熱蓄熱材B2", 1.4, 1934 * 40)); material.AddMaterial(100, new WallMaterial("潜熱蓄熱材B3", 1.4, 1934)); wall.SetLatentHeatStorageMaterial(2, material); wall.AirTemperature1 = 20; wall.AirTemperature2 = 10; wall.SurfaceArea = 175; wall.GetSurface(true).ConvectiveRate = 1; wall.GetSurface(false).ConvectiveRate = 1; wall.TimeStep = 3600; StreamWriter sWriter = new StreamWriter("test.csv"); wall.InitializeTemperature(10); Console.WriteLine("壁面温度[C]"); for (int kkk = 0; kkk < 4; kkk++) { if (kkk % 2 == 0) wall.AirTemperature1 = 20; else wall.AirTemperature1 = 10; for (int i = 0; i < 24; i++) { wall.Update(); double[] tmp = wall.GetTemperatures(); for (int j = 0; j < tmp.Length; j++) Console.Write(tmp[j].ToString("F2").PadLeft(5) + " | "); Console.WriteLine(); for (int j = 0; j < tmp.Length; j++) sWriter.Write(tmp[j].ToString("F2").PadLeft(5) + " , "); sWriter.WriteLine(); } } sWriter.Close(); Console.Read(); }
/// <summary>壁熱貫流テスト(冷温水配管埋設)</summary> private static void wallHeatTransferTest2() { WallLayers wl = new WallLayers(); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.FrexibleBoard), 0.0165)); wl.AddLayer(new WallLayers.Layer(new WallMaterial("水", 0.59, 4186), 0.02)); wl.AddLayer(new WallLayers.Layer(new WallMaterial("水", 0.59, 4186), 0.02)); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.ExtrudedPolystyreneFoam_3), 0.02)); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.Plywood), 0.009)); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.AirGap), 0.015)); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.Plywood), 0.009)); Wall wall = new Wall(wl); wall.TimeStep = 300; wall.AirTemperature1 = 20; wall.AirTemperature2 = 10; wall.SurfaceArea = 6.48; //配管を埋設 Tube tube = new Tube(0.84, 0.346, 4186); wall.AddTube(tube, 1); tube.SetFlowRate(0); //最初は流量0 tube.FluidTemperature = 30; wall.InitializeTemperature(20); //壁体温度を初期化 for (int i = 0; i < wall.Layers.LayerNumber; i++) Console.Write("温度" + i + ", "); Console.WriteLine("配管への熱移動量[W], 配管出口温度[C]"); for (int i = 0; i < 100; i++) { if (i == 50) tube.SetFlowRate(0.54); //通水開始 wall.Update(); double[] tmp = wall.GetTemperatures(); for (int j = 0; j < tmp.Length - 1; j++) Console.Write(((tmp[j] + tmp[j + 1]) / 2d).ToString("F1") + ", "); Console.Write(wall.GetHeatTransferToTube(1).ToString("F0") + ", " + tube.GetOutletFluidTemperature().ToString("F1")); Console.WriteLine(); } Console.Read(); }
/// <summary>壁熱貫流テスト</summary> private static void wallHeatTransferTest() { WallLayers layers = new WallLayers(); WallLayers.Layer layer; layer = new WallLayers.Layer(new WallMaterial("合板", 0.19, 716), 0.025); layers.AddLayer(layer); layer = new WallLayers.Layer(new WallMaterial("コンクリート", 1.4, 1934), 0.120); layers.AddLayer(layer); layer = new WallLayers.Layer(new WallMaterial("空気層", 1d / 0.086, 0), 0.020); layers.AddLayer(layer); layer = new WallLayers.Layer(new WallMaterial("ロックウール", 0.042, 84), 0.050); layers.AddLayer(layer); Wall wall = new Wall(layers); wall.TimeStep = 3600; wall.AirTemperature1 = 20; wall.AirTemperature2 = 10; wall.InitializeTemperature(10); //壁体内温度は10℃均一とする wall.SurfaceArea = 1; Console.WriteLine("温度分布の推移"); Console.WriteLine("合板, コンクリート, 空気層, ロックウール"); double[] temps; for (int i = 0; i < 24; i++) { wall.Update(); temps = wall.GetTemperatures(); Console.Write((i + 1).ToString("F0").PadLeft(2) + "時間後 | "); for (int j = 0; j < temps.Length - 1; j++) Console.Write(((temps[j] + temps[j + 1]) / 2d).ToString("F1") + " | "); Console.WriteLine(); } //定常状態まで進める for (int i = 0; i < 1000; i++) wall.Update(); Console.WriteLine(); Console.WriteLine("定常状態の温度分布"); temps = wall.GetTemperatures(); for (int j = 0; j < temps.Length - 1; j++) Console.Write(((temps[j] + temps[j + 1]) / 2d).ToString("F1") + " | "); Console.WriteLine(); Console.WriteLine("定常状態の熱流1: " + wall.GetHeatTransfer(true).ToString("F1")); Console.WriteLine("定常状態の熱流2: " + wall.GetHeatTransfer(false).ToString("F1")); Console.WriteLine("定常状態の熱流3: " + wall.GetStaticHeatTransfer().ToString("F1")); Console.Read(); }
/// <summary>Sample program calculating the unsteady heat conduction of wall with latent heat storage material</summary> private static void wallTest3() { //Initial temperature const double INIT_TEMP = 35; //Create an instance of WallLayers class WallLayers wl = new WallLayers(); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.FrexibleBoard), 0.0165)); wl.AddLayer(new WallLayers.Layer(new WallMaterial("dummy", 1, 1), 0.02)); wl.AddLayer(new WallLayers.Layer(new WallMaterial("dummy", 1, 1), 0.02)); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.ExtrudedPolystyreneFoam_3), 0.02)); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.Plywood), 0.009)); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.AirGap), 0.015)); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.Plywood), 0.009)); //Create an instance of Wall class Wall wall = new Wall(wl); wall.TimeStep = 1200; wall.AirTemperature1 = 20; wall.AirTemperature2 = 20; wall.SurfaceArea = 6.48; //Create an instance of LatentHeatStorageMaterial class LatentHeatStorageMaterial pmc1; pmc1 = new LatentHeatStorageMaterial(19, new WallMaterial("PCM1 (Solid)", 0.19, 3.6 * 1400)); pmc1.AddMaterial(23, new WallMaterial("PCM1 (Two phase)", (0.19 + 0.22) / 2d, 15.1 * 1400)); pmc1.AddMaterial(100, new WallMaterial("PCM1 (Liquid)", 0.22, 3.6 * 1400)); pmc1.Initialize(INIT_TEMP); //Set PCM to second wall layer wall.SetLatentHeatStorageMaterial(1, pmc1); //Create an instance of LatentHeatStorageMaterial class LatentHeatStorageMaterial pcm2; pcm2 = new LatentHeatStorageMaterial(30, new WallMaterial("PCM2 (Solid)", 0.19, 3.6 * 1390)); pcm2.AddMaterial(32, new WallMaterial("PCM2 (Two phase)", (0.19 + 0.22) / 2d, 63.25 * 1400)); pcm2.AddMaterial(100, new WallMaterial("PCM2 (Liquid)", 0.22, 3.5 * 1410)); pcm2.Initialize(INIT_TEMP); //Set PCM to third wall layer wall.SetLatentHeatStorageMaterial(2, pcm2); //Install heating tube between PMCs Tube tube = new Tube(0.84, 0.346, 4186); wall.AddTube(tube, 1); tube.SetFlowRate(0); tube.FluidTemperature = 40; //Initialize wall temperature wall.InitializeTemperature(INIT_TEMP); for (int i = 0; i < wall.Layers.LayerNumber; i++) Console.Write("Temperature" + i + ", "); Console.WriteLine("Heat storage[kJ]"); for (int i = 0; i < 200; i++) { if (i == 100) { tube.SetFlowRate(0.54); //Start heating wall.AirTemperature1 = 30; wall.AirTemperature2 = 30; } wall.Update(); double[] tmp = wall.GetTemperatures(); for (int j = 0; j < tmp.Length - 1; j++) Console.Write(((tmp[j] + tmp[j + 1]) / 2d).ToString("F1") + ", "); Console.Write(wall.GetHeatStorage(INIT_TEMP).ToString("F0")); Console.WriteLine(); } Console.Read(); }
/// <summary>Sample program calculating the unsteady heat conduction of wall with heating tube</summary> private static void wallTest2() { WallLayers wl = new WallLayers(); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.FrexibleBoard), 0.0165)); wl.AddLayer(new WallLayers.Layer(new WallMaterial("Water", 0.59, 4186), 0.02)); wl.AddLayer(new WallLayers.Layer(new WallMaterial("Water", 0.59, 4186), 0.02)); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.ExtrudedPolystyreneFoam_3), 0.02)); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.Plywood), 0.009)); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.AirGap), 0.015)); wl.AddLayer(new WallLayers.Layer(new WallMaterial(WallMaterial.PredefinedMaterials.Plywood), 0.009)); Wall wall = new Wall(wl); wall.TimeStep = 300; wall.AirTemperature1 = 20; wall.AirTemperature2 = 10; wall.SurfaceArea = 6.48; Tube tube = new Tube(0.84, 0.346, 4186); //installing tube to wall wall.AddTube(tube, 1); tube.SetFlowRate(0); //initial flow rate is 0 kg/s tube.FluidTemperature = 30; wall.InitializeTemperature(20); //initialize temperature of the wall for (int i = 0; i < wall.Layers.LayerNumber; i++) Console.Write("temperature" + i + ", "); Console.WriteLine("heat transfer to the tube[W], outlet temperature of fluid[C]"); for (int i = 0; i < 100; i++) { if (i == 50) tube.SetFlowRate(0.54); //start heating wall.Update(); double[] tmp = wall.GetTemperatures(); for (int j = 0; j < tmp.Length - 1; j++) Console.Write(((tmp[j] + tmp[j + 1]) / 2d).ToString("F1") + ", "); Console.Write(wall.GetHeatTransferToTube(1).ToString("F0") + ", " + tube.GetOutletFluidTemperature().ToString("F1")); Console.WriteLine(); } Console.Read(); }
/// <summary>Sample program calculating the unsteady heat conduction of wall</summary> private static void wallTest1() { WallLayers layers = new WallLayers(); WallLayers.Layer layer; layer = new WallLayers.Layer(new WallMaterial("Plywood", 0.19, 716), 0.025); layers.AddLayer(layer); layer = new WallLayers.Layer(new WallMaterial("Concrete", 1.4, 1934), 0.120); layers.AddLayer(layer); layer = new WallLayers.Layer(new WallMaterial("Air gap", 1d / 0.086, 0), 0.020); layers.AddLayer(layer); layer = new WallLayers.Layer(new WallMaterial("Rock wool", 0.042, 84), 0.050); layers.AddLayer(layer); Wall wall = new Wall(layers); wall.TimeStep = 3600; wall.AirTemperature1 = 20; wall.AirTemperature2 = 10; wall.InitializeTemperature(10); //Initial temperature is 10 C wall.SurfaceArea = 1; Console.WriteLine("Plywood, Concrete, Air gap, Rock wool"); double[] temps; for (int i = 0; i < 24; i++) { wall.Update(); temps = wall.GetTemperatures(); Console.Write((i + 1).ToString("F0").PadLeft(2) + "Hour | "); for (int j = 0; j < temps.Length - 1; j++) Console.Write(((temps[j] + temps[j + 1]) / 2d).ToString("F1") + " | "); Console.WriteLine(); } //Iterate until wall become steady state for (int i = 0; i < 1000; i++) wall.Update(); Console.WriteLine(); Console.WriteLine("Steady state"); temps = wall.GetTemperatures(); for (int j = 0; j < temps.Length - 1; j++) Console.Write(((temps[j] + temps[j + 1]) / 2d).ToString("F1") + " | "); Console.WriteLine(); Console.WriteLine("Heat transfer at steady state 1: " + wall.GetHeatTransfer(true).ToString("F1")); Console.WriteLine("Heat transfer at steady state 2: " + wall.GetHeatTransfer(false).ToString("F1")); Console.WriteLine("Heat transfer at steady state 3: " + wall.GetStaticHeatTransfer().ToString("F1")); Console.Read(); }