This package contains base classes that are used to construct the models in Buildings.BoundaryConditions.SolarIrradiation.
Extends from Modelica.Icons.BasesPackage (Icon for packages containing base classes).Name | Description |
---|---|
BrighteningCoefficient | Circumsolar and horizon brightening coefficients |
DiffuseIsotropic | Diffuse solar irradiation on a tilted surface with an isotropic model |
DiffusePerez | Hemispherical diffuse irradiation on a tilted surface with Perez's anisotropic model |
DirectTiltedSurface | Direct solar irradiation on a tilted surface |
RelativeAirMass | Relative air mass |
SkyBrightness | Sky brightness |
SkyClearness | Sky clearness |
PartialSolarIrradiation | Partial model that is used to compute the direct and diffuse solar irradiation |
Examples | Collection of models that illustrate model use and test models |
This component computes the circumsolar and horizon brightening coefficients.
Extends from Modelica.Blocks.Interfaces.BlockIcon (Basic graphical layout of input/output block).
Type | Name | Description |
---|---|---|
input RealInput | zen | Zenith angle of the sun beam [rad] |
input RealInput | skyCle | Sky clearness. skyCle=1: overcast sky; skyCle=8 clear sky |
input RealInput | skyBri | Sky brightness [0,1] |
output RealOutput | F1 | Circumsolar brightening coefficient |
output RealOutput | F2 | Horizon brightening coefficient |
block BrighteningCoefficient "Circumsolar and horizon brightening coefficients" extends Modelica.Blocks.Interfaces.BlockIcon; import H = Buildings.Utilities.Math.Functions.spliceFunction;public Modelica.Blocks.Interfaces.RealInput zen( quantity="Angle", unit="rad", displayUnit="degree") "Zenith angle of the sun beam"; Modelica.Blocks.Interfaces.RealInput skyCle "Sky clearness. skyCle=1: overcast sky; skyCle=8 clear sky"; Modelica.Blocks.Interfaces.RealInput skyBri "Sky brightness [0,1]"; Modelica.Blocks.Interfaces.RealOutput F1 "Circumsolar brightening coefficient"; Modelica.Blocks.Interfaces.RealOutput F2 "Horizon brightening coefficient"; protected Real F11; Real F12; Real F13; Real F21; Real F22; Real F23; Real d=0.01; Real a1; Real a2; Real a3; Real a4; Real a5; Real a6; Real a7; Real a8; Real b1; Real b2; Real b3; Real b4; Real b5; Real b6; Real b7; Real b8; equation b1 = H( 1, 0, 1.065 - skyCle, d); b2 = H( 1, 0, 1.23 - skyCle, d); b3 = H( 1, 0, 1.50 - skyCle, d); b4 = H( 1, 0, 1.95 - skyCle, d); b5 = H( 1, 0, 2.80 - skyCle, d); b6 = H( 1, 0, 4.50 - skyCle, d); b7 = H( 1, 0, 6.20 - skyCle, d); b8 = H( 1, 0, skyCle - 6.20, d); a1 = b1; a2 = b2 - b1; a3 = b3 - b2; a4 = b4 - b3; a5 = b5 - b4; a6 = b6 - b5; a7 = b7 - b6; a8 = b8; F11 = -0.0083117*a1 + 0.1299457*a2 + 0.3296958*a3 + 0.5682053*a4 + 0.8730280* a5 + 1.1326077*a6 + 1.0601591*a7 + 0.6777470*a8; F12 = 0.5877285*a1 + 0.6825954*a2 + 0.4868735*a3 + 0.1874525*a4 - 0.3920403* a5 - 1.2367284*a6 - 1.5999137*a7 - 0.3272588*a8; F13 = -0.0620636*a1 - 0.1513725*a2 - 0.2210958*a3 - 0.2951290*a4 - 0.3616149* a5 - 0.4118494*a6 - 0.3589221*a7 - 0.2504286*a8; F21 = -0.0596012*a1 - 0.0189325*a2 + 0.0554140*a3 + 0.1088631*a4 + 0.2255647* a5 + 0.2877813*a6 + 0.2642124*a7 + 0.1561313*a8; F22 = 0.0721249*a1 + 0.0659650*a2 - 0.0639588*a3 - 0.1519229*a4 - 0.4620442* a5 - 0.8230357*a6 - 1.1272340*a7 - 1.3765031*a8; F23 = -0.0220216*a1 - 0.0288748*a2 - 0.0260542*a3 - 0.0139754*a4 + 0.0012448* a5 + 0.0558651*a6 + 0.1310694*a7 + 0.2506212*a8; F1 = Buildings.Utilities.Math.Functions.smoothMax( 0, F11 + F12*skyBri + F13*zen, 0.01); F2 = F21 + F22*skyBri + F23*zen;end BrighteningCoefficient;
This component computes the hemispherical diffuse irradiation on a tilted surface. The irradiation is composed of the diffuse horizontal solar irradiation and the irradiation that has been reflected by the ground. Both components are adjusted to take into account the tilt of the receiving surface.
Extends from Modelica.Blocks.Interfaces.BlockIcon (Basic graphical layout of input/output block).
Type | Name | Default | Description |
---|---|---|---|
Real | rho | 0.2 | Ground reflectance |
Angle | til | Surface tilt angle [rad] |
Type | Name | Description |
---|---|---|
input RealInput | HDifHor | Horizontal diffuse solar radiation [W/m2] |
input RealInput | HGloHor | Horizontal global radiation [W/m2] |
output RealOutput | HGroDifTil | Diffuse solar irradiation on a tilted surfce from the ground [W/m2] |
output RealOutput | HSkyDifTil | Diffuse solar irradiation on a tilted surfce from the sky [W/m2] |
block DiffuseIsotropic "Diffuse solar irradiation on a tilted surface with an isotropic model" extends Modelica.Blocks.Interfaces.BlockIcon; public parameter Real rho=0.2 "Ground reflectance"; parameter Modelica.SIunits.Angle til(displayUnit="deg") "Surface tilt angle";Modelica.Blocks.Interfaces.RealInput HDifHor(quantity= "RadiantEnergyFluenceRate", unit="W/m2") "Horizontal diffuse solar radiation"; Modelica.Blocks.Interfaces.RealInput HGloHor(quantity= "RadiantEnergyFluenceRate", unit="W/m2") "Horizontal global radiation"; Modelica.Blocks.Interfaces.RealOutput HGroDifTil(final quantity="RadiantEnergyFluenceRate", final unit="W/m2") "Diffuse solar irradiation on a tilted surfce from the ground"; protected Real til_c "Cosine of tilt angle";public Modelica.Blocks.Interfaces.RealOutput HSkyDifTil(final quantity="RadiantEnergyFluenceRate", final unit="W/m2") "Diffuse solar irradiation on a tilted surfce from the sky"; equation til_c = Modelica.Math.cos(til); HSkyDifTil = 0.5*HDifHor*(1 + til_c); HGroDifTil = 0.5*HGloHor*rho*(1 - til_c);end DiffuseIsotropic;
This component computes the hemispherical diffuse irradiation on a tilted surface by using an anisotropic model proposed by Perez.
Extends from Modelica.Blocks.Interfaces.BlockIcon (Basic graphical layout of input/output block).
Type | Name | Default | Description |
---|---|---|---|
Real | rho | 0.2 | Ground reflectance |
Angle | til | Surface tilt angle [rad] |
Type | Name | Description |
---|---|---|
input RealInput | briCof1 | Brightening Coeffcient F1 |
input RealInput | briCof2 | Brightening Coeffcient F2 |
input RealInput | HDifHor | Diffuse horizontal solar radiation [W/m2] |
input RealInput | HGloHor | Global horizontal radiation [W/m2] |
input RealInput | zen | Zenith angle of the sun beam [rad] |
input RealInput | incAng | Solar incidence angle on the surface [rad] |
output RealOutput | HGroDifTil | Hemispherical diffuse solar irradiation on a tilted surfce from the ground [W/m2] |
output RealOutput | HSkyDifTil | Hemispherical diffuse solar irradiation on a tilted surfce from the sky [W/m2] |
block DiffusePerez "Hemispherical diffuse irradiation on a tilted surface with Perez's anisotropic model" extends Modelica.Blocks.Interfaces.BlockIcon; public parameter Real rho=0.2 "Ground reflectance"; parameter Modelica.SIunits.Angle til(displayUnit="deg") "Surface tilt angle";Modelica.Blocks.Interfaces.RealInput briCof1 "Brightening Coeffcient F1"; Modelica.Blocks.Interfaces.RealInput briCof2 "Brightening Coeffcient F2"; Modelica.Blocks.Interfaces.RealInput HDifHor(quantity= "RadiantEnergyFluenceRate", unit="W/m2") "Diffuse horizontal solar radiation"; Modelica.Blocks.Interfaces.RealInput HGloHor(quantity= "RadiantEnergyFluenceRate", unit="W/m2") "Global horizontal radiation"; Modelica.Blocks.Interfaces.RealInput zen( quantity="Angle", unit="rad", displayUnit="degree") "Zenith angle of the sun beam"; Modelica.Blocks.Interfaces.RealInput incAng( quantity="Angle", unit="rad", displayUnit="degree") "Solar incidence angle on the surface"; Modelica.Blocks.Interfaces.RealOutput HGroDifTil(final quantity= "RadiantEnergyFluenceRate", final unit="W/m2") "Hemispherical diffuse solar irradiation on a tilted surfce from the ground"; Modelica.Blocks.Interfaces.RealOutput HSkyDifTil(final quantity= "RadiantEnergyFluenceRate", final unit="W/m2") "Hemispherical diffuse solar irradiation on a tilted surfce from the sky"; protected Real a; Real b; constant Real bMin=Modelica.Math.cos(Modelica.Constants.pi*85/180) "Lower bound for b"; equation a = Buildings.Utilities.Math.Functions.smoothMax( 0, Modelica.Math.cos(incAng), 0.01); b = Buildings.Utilities.Math.Functions.smoothMax( bMin, Modelica.Math.cos(zen), 0.01); HSkyDifTil = HDifHor*(0.5*(1 - briCof1)*(1 + Modelica.Math.cos(til)) + briCof1*a/b + briCof2*Modelica.Math.sin(til)); HGroDifTil = HGloHor*0.5*rho*(1 - Modelica.Math.cos(til));end DiffusePerez;
This component computes the direct solar irradiation on a tilted surface.
Extends from Modelica.Blocks.Interfaces.BlockIcon (Basic graphical layout of input/output block).
Type | Name | Description |
---|---|---|
input RealInput | incAng | Incidence angle of the sun beam on a tilted surface [rad] |
input RealInput | HDirNor | Direct normal radiation [W/m2] |
output RealOutput | HDirTil | Direct solar irradiation on a tilted surfce [W/m2] |
block DirectTiltedSurface "Direct solar irradiation on a tilted surface" extends Modelica.Blocks.Interfaces.BlockIcon;Modelica.Blocks.Interfaces.RealInput incAng( quantity="Angle", unit="rad", displayUnit="degree") "Incidence angle of the sun beam on a tilted surface"; Modelica.Blocks.Interfaces.RealInput HDirNor(quantity= "RadiantEnergyFluenceRate", unit="W/m2") "Direct normal radiation"; Modelica.Blocks.Interfaces.RealOutput HDirTil(final quantity= "RadiantEnergyFluenceRate", final unit="W/m2") "Direct solar irradiation on a tilted surfce"; algorithm HDirTil := max(0, Modelica.Math.cos(incAng)*HDirNor);end DirectTiltedSurface;
This component computes the relative air mass for sky brightness.
Extends from Modelica.Blocks.Interfaces.BlockIcon (Basic graphical layout of input/output block).
Type | Name | Description |
---|---|---|
input RealInput | zen | Zenith angle of the sun beam [rad] |
output RealOutput | relAirMas | Relative air mass |
block RelativeAirMass "Relative air mass" extends Modelica.Blocks.Interfaces.BlockIcon;public Modelica.Blocks.Interfaces.RealInput zen( quantity="Angle", unit="rad", displayUnit="degree") "Zenith angle of the sun beam"; Modelica.Blocks.Interfaces.RealOutput relAirMas "Relative air mass"; protected Real zenLim; Real zenDeg; equation zenLim = Buildings.Utilities.Math.Functions.smoothMin( zen, Modelica.Constants.pi/2, 0.01); zenDeg = zenLim*180/Modelica.Constants.pi; relAirMas = 1/(Modelica.Math.cos(zenLim) + 0.15*(93.9 - zenDeg)^(-1.253));end RelativeAirMass;
This component computes the sky brightness.
Extends from Modelica.Blocks.Interfaces.BlockIcon (Basic graphical layout of input/output block).
Type | Name | Description |
---|---|---|
input RealInput | relAirMas | Relative Air Mass |
input RealInput | HDifHor | Horizontal diffuse solar radiation [W/m2] |
output RealOutput | skyBri | Sky Brightness |
block SkyBrightness "Sky brightness" extends Modelica.Blocks.Interfaces.BlockIcon;public Modelica.Blocks.Interfaces.RealInput relAirMas "Relative Air Mass"; Modelica.Blocks.Interfaces.RealInput HDifHor(quantity= "RadiantEnergyFluenceRate", unit="W/m2") "Horizontal diffuse solar radiation"; Modelica.Blocks.Interfaces.RealOutput skyBri "Sky Brightness"; equation skyBri = Buildings.Utilities.Math.Functions.smoothMin( HDifHor*relAirMas/1367, 1, 0.025);end SkyBrightness;
This component computes the sky clearness.
Extends from Modelica.Blocks.Interfaces.BlockIcon (Basic graphical layout of input/output block).
Type | Name | Description |
---|---|---|
input RealInput | zen | Zenith angle of the sun beam [rad] |
input RealInput | HDifHor | Horizontal diffuse solar radiation [W/m2] |
input RealInput | HGloHor | Horizontal global solar radiation [W/m2] |
output RealOutput | skyCle | Sky clearness. skyCle=1: overast sky; skyCle=8: clear sky |
block SkyClearness "Sky clearness" extends Modelica.Blocks.Interfaces.BlockIcon;public Modelica.Blocks.Interfaces.RealInput zen( quantity="Angle", unit="rad", displayUnit="degreeC") "Zenith angle of the sun beam"; Modelica.Blocks.Interfaces.RealInput HDifHor(quantity= "RadiantEnergyFluenceRate", unit="W/m2") "Horizontal diffuse solar radiation"; Modelica.Blocks.Interfaces.RealInput HGloHor(quantity= "RadiantEnergyFluenceRate", unit="W/m2") "Horizontal global solar radiation"; Modelica.Blocks.Interfaces.RealOutput skyCle "Sky clearness. skyCle=1: overast sky; skyCle=8: clear sky"; protected Real tmp1; algorithm tmp1 := 5.534e-6*(zen*180/Modelica.Constants.pi)^3; skyCle := smooth(1, if (HGloHor < Modelica.Constants.small) then 1 else Buildings.Utilities.Math.Functions.smoothLimit( (HGloHor/Buildings.Utilities.Math.Functions.smoothMax( HDifHor, 1e-4, 1e-5) + tmp1)/(1 + tmp1), 1, 8, 0.1));end SkyClearness;
This is a partial model that is used to implement the direct and diffuse irradiation.
Extends from Modelica.Blocks.Interfaces.BlockIcon (Basic graphical layout of input/output block).
Type | Name | Default | Description |
---|---|---|---|
Angle | til | Surface tilt [rad] |
Type | Name | Description |
---|---|---|
output RealOutput | H | Radiation per unit area [W/m2] |
Bus | weaBus | Bus with weather data |
partial block PartialSolarIrradiation "Partial model that is used to compute the direct and diffuse solar irradiation" extends Modelica.Blocks.Interfaces.BlockIcon; parameter Modelica.SIunits.Angle til(displayUnit="deg") "Surface tilt";Modelica.Blocks.Interfaces.RealOutput H( final quantity="RadiantEnergyFluenceRate", final unit="W/m2") "Radiation per unit area"; WeatherData.Bus weaBus "Bus with weather data"; end PartialSolarIrradiation;