/// <summary>袖壁(無限長)を作成する</summary> /// <param name="windowWidth">窓幅[m]</param> /// <param name="windowHeight">窓高[m]</param> /// <param name="overhang">張り出し幅[m]</param> /// <param name="sideMargin">横側マージン[m]</param> /// <param name="incline">傾斜面</param> /// <returns>袖壁(無限長)</returns> public static SunShade MakeVerticalSunShade(double windowWidth, double windowHeight, double overhang, double sideMargin, ImmutableIncline incline) { SunShade ss = new SunShade(); ss.windowWidth = windowWidth; ss.windowHeight = windowHeight; ss.overhang = overhang; ss.ssShape = Shape.LongVerticalBoth; ss.leftMargin = sideMargin; ss.rightMargin = sideMargin; ss.incline.Copy(incline); return ss; }
/// <summary>水平庇(無限大長)を作成する</summary> /// <param name="windowWidth">窓幅[m]</param> /// <param name="windowHeight">窓高[m]</param> /// <param name="overhang">張り出し幅[m]</param> /// <param name="topMargin">上部マージン[m]</param> /// <param name="incline">傾斜面</param> /// <returns>水平庇(無限大長)</returns> public static SunShade MakeHorizontalSunShade(double windowWidth, double windowHeight, double overhang, double topMargin, ImmutableIncline incline) { SunShade ss = new SunShade(); ss.ssShape = Shape.LongHorizontal; ss.windowWidth = windowWidth; ss.windowHeight = windowHeight; ss.overhang = overhang; ss.topMargin = topMargin; ss.incline.Copy(incline); return ss; }
/// <summary>袖壁を作成する</summary> /// <param name="windowWidth">窓幅[m]</param> /// <param name="windowHeight">窓高[m]</param> /// <param name="overhang">張り出し幅[m]</param> /// <param name="sideMargin">横側マージン[m]</param> /// <param name="isLeftSide">左側か否か(右の場合はfalse)</param> /// <param name="topMargin">上部マージン[m]</param> /// <param name="bottomMargin">下部マージン[m]</param> /// <param name="incline">傾斜面</param> /// <returns>袖壁</returns> public static SunShade MakeVerticalSunShade(double windowWidth, double windowHeight, double overhang, double sideMargin, bool isLeftSide, double topMargin, double bottomMargin, ImmutableIncline incline) { SunShade ss = new SunShade(); ss.windowWidth = windowWidth; ss.windowHeight = windowHeight; ss.overhang = overhang; if (isLeftSide) { ss.ssShape = Shape.VerticalLeft; ss.leftMargin = sideMargin; } else { ss.ssShape = Shape.VerticalRight; ss.rightMargin = sideMargin; } ss.topMargin = topMargin; ss.bottomMargin = bottomMargin; ss.incline.Copy(incline); return ss; }
/// <summary>斜面に入射する放射量[W/m2]を計算する</summary> /// <param name="incline">斜面</param> /// <param name="albedo">アルベド[-]</param> /// <param name="shadingRate">日影率[-]</param> /// <returns>斜面に入射する放射量[W/m2]</returns> public double GetRadiationToIncline(ImmutableIncline incline, double albedo, double shadingRate) { //直達成分 double dsRate = incline.GetDirectSolarRadiationRate(sun); //日影部分に関しては直達日射は0 dsRate *= sun.DirectNormalRadiation * (1d - shadingRate); //拡散成分 double dfRad = incline.ConfigurationFactorToSky * sun.DiffuseHorizontalRadiation; //地表面反射成分 double alRad = (1 - incline.ConfigurationFactorToSky) * albedo * sun.GlobalHorizontalRadiation; return dsRate + dfRad + alRad; }
/// <summary>ルーバーを作成する</summary> /// <param name="windowWidth">窓幅[m]</param> /// <param name="windowHeight">窓高[m]</param> /// <param name="overhang">張り出し幅[m]</param> /// <param name="leftMargin">左側マージン[m]</param> /// <param name="rightMargin">右側マージン[m]</param> /// <param name="topMargin">上部マージン[m]</param> /// <param name="bottomMargin">下部マージン[m]</param> /// <param name="incline">傾斜面</param> /// <returns>ルーバー</returns> public static SunShade MakeGridSunShade(double windowWidth, double windowHeight, double overhang, double leftMargin, double rightMargin, double topMargin, double bottomMargin, ImmutableIncline incline) { SunShade ss = new SunShade(); ss.ssShape = Shape.Grid; ss.windowWidth = windowWidth; ss.windowHeight = windowHeight; ss.overhang = overhang; ss.leftMargin = leftMargin; ss.rightMargin = rightMargin; ss.topMargin = topMargin; ss.bottomMargin = bottomMargin; ss.incline.Copy(incline); return ss; }
/// <summary>傾斜面情報をコピーする</summary> /// <param name="incline">傾斜面オブジェクト</param> public void Copy(ImmutableIncline incline) { Initialize(incline.HorizontalAngle, incline.VerticalAngle); }
/// <summary>傾斜を設定する</summary> /// <param name="incline">傾斜面</param> /// <param name="isSide1">1側か否か</param> /// <remarks>裏面は自動で設定される</remarks> public void SetIncline(ImmutableIncline incline, bool isSide1) { if (isSide1) { incline1 = incline; Incline ic = new Incline(incline1); ic.Reverse(); incline2 = ic; } else { incline2 = incline; Incline ic = new Incline(incline2); ic.Reverse(); incline1 = ic; } }
/// <summary>傾斜面の法線に対する太陽光線入射角の余弦cosθ[-]を計算する</summary> /// <param name="sun">太陽</param> /// <param name="incline">傾斜面</param> /// <returns>傾斜面に対する太陽光線入射角の余弦cosθ[-]</returns> public static double GetDirectSolarRadiationRateToIncline(ImmutableSun sun, ImmutableIncline incline) { return GetDirectSolarRadiationRateToIncline(incline.DirectionCosineZ, incline.DirectionCosineSN, incline.DirectionCosineWE, sun.Altitude, sun.Orientation); }
/// <summary>初期化する</summary> /// <param name="glassPanes">ガラス層</param> /// <param name="incline">屋外側の傾斜面情報</param> /// <param name="sunShade">日除け</param> /// <param name="name">窓名称</param> private void initialize(ImmutableGlassPanes glassPanes, ImmutableIncline incline, ImmutableSunShade sunShade, string name) { this.glassPanes.Copy(glassPanes); FO = glassPanes.ThermalTransmittance / glassPanes.InsideFilmCoefficient; if(incline != null) this.incline.Copy(incline); if (sunShade != null) { SunShade ss = SunShade.EmptySunShade; ss.Copy(sunShade); this.sunShade = ss; } if(name != null) Name = name; hasChanged = true; makeSurface(); }
/// <summary>Constructor</summary> /// <param name="glassPanes">ガラス層</param> /// <param name="incline">屋外側の傾斜面情報</param> /// <param name="sunShade">日除け</param> /// <param name="name">窓名称</param> public Window(ImmutableGlassPanes glassPanes, ImmutableIncline incline, ImmutableSunShade sunShade, string name) { initialize(glassPanes, incline, sunShade, name); }
/// <summary>Constructor</summary> /// <param name="glassPanes">ガラス層</param> /// <param name="incline">屋外側の傾斜面</param> public Window(ImmutableGlassPanes glassPanes, ImmutableIncline incline) { initialize(glassPanes, incline, null, null); }
/// <summary>Constructor</summary> /// <param name="interiorGlassPane">glass pane of interior side</param> /// <param name="interiorAirGap">interior side air gap thickness[m]</param> /// <param name="exteriorGlassPane">glass pnae of exterior side</param> /// <param name="exteriorAirGap">exterior side air gap thickness[m]</param> /// <param name="windowWidth">width [m] of the air flow window</param> /// <param name="windowHeight">height [m] of the air flow window</param> /// <param name="outsideIncline"></param> public AirFlowWindow(GlassPanes.Pane interiorGlassPane, double interiorAirGap, GlassPanes.Pane exteriorGlassPane, double exteriorAirGap,double windowWidth, double windowHeight, ImmutableIncline outsideIncline) { //initialize temperatures. tVector.SetValue(25); this.interiorGlassPane = interiorGlassPane; this.exteriorGlassPane = exteriorGlassPane; this.ExteriorAirGap = exteriorAirGap; this.InteriorAirGap = interiorAirGap; this.WindowWidth = windowWidth; this.WindowHeight = windowHeight; SetBlind(0.75, 0.07); this.OutSideIncline = outsideIncline; }