ALGORITHMIC_MODEL Face ABSTRACT "Process climate data for FACadE. Calc wind, film coeff & solar radiation. Purpose: Facade model. The model receives data from the climate model and delivers the needed variables to the client models. The model has outputs to walls, windows and leaks. Limits: Date: 15th April 1997 Made by: Jari Hyttinen Mika Vuolle Call: None Reference: wind ? 010228 rsc Role of WindVelLoc has been changend to OUT and a link VelLink added 000822 AB Added interface to arbitrary object, i.e. w/o adaptation to slope. 000717 AB Diffuse radiation split into IDiffSky and IDiffGrd. Move part of calculation of diffuse radiation to SHADE.NMF. FACE.NMF calculates unshaded diffuse onto facade. SHADE calculates diff_from_sky * shading + diff_from_ground. This requires two diffuse variables on link from FACE. 000229 AB ?? Ground reflection exaggerated when wall slopes down towards ground 990118 MV Perez model is added 980416 MV Therkeld's model has been removed, because it was poorly implemented by me. I will put it back soon .... 971231 MV Density is changed from constant to RHOMOIS -function in PGround calculation. 971016 MV Defaults for pressure and XAir (CO2) 971013 AB Link type Face2Leak replaced by BiDirAir, with VOID flows 970630 AB WindVelLoc corrected (deg2rad) 970630 AB Order between variables in Out2Wind link made to agree with CEWIND.NMF 970618 PS Reflground from S_P to IN bug fixed in WindVelLoc " EQUATIONS /* Copy variables from IN to OUT links */ TAirWal := TAir; TGroundWal := TGround; TSkyWal := TSky; TAirWdw := TAir; TGroundWdw := TGround; TSkyWdw := TSky; ElevSunWdw := ElevSun; TAirArb := TAir; TGroundArb := TGround; TSkyArb := TSky; ElevSunArb := ElevSun; TAirLeak := TAir; XAirLeak := XAir; HumAirLeak := HumAir; /* Calculate the angle of incidence onto a [sloping] surface. */ AzSun2Face := (AzimutSun+180) - AzimutFace; AngleIncFace := ACOS(COS(ElevSun * deg2rad) * COS(AzSun2Face * deg2rad) * SIN(slopeFace * deg2rad) + SIN(ElevSun * deg2rad) * COS(slopeFace * deg2rad)) * rad2deg; AzSun2Arb := (AzimutSun+180) - AzimutFace; AngleIncArb := 90 - ElevSun; /* Calculate convective heat transfer coefficient */ /* Reference: Clarke, J. A.: Energy Simulations in Building Design */ /* page 198 - 199 */ WindVelLoc := IF COS((WindDir-AzimutFace)*deg2rad) > 0 THEN IF (WindVel < 2) THEN 0.5 ELSE 0.25 * WindVel END_IF ELSE 0.3 + 0.05 * WindVel END_IF; hOutside := IF WindVelLoc < 4.88 THEN 5.67 * (1.09 + 0.23 * (WindVelLoc / 0.3048)) ELSE 5.67 * (0.53 * (WindVelLoc / 0.3048)**0.78) END_IF; /* Calculate incident radiation on surface */ IDirWal := IF AngleIncFace < 90 THEN IDirNorm * COS(AngleIncFace * deg2rad) ELSE 0.0 END_IF; IDirWdw := IDirWal; IDirArb := IDirNorm; IDirHor := IDirNorm * SIN (ElevSun * deg2rad); IDiffSky := IF diffuseModel < 0.5 THEN /* ASHRAE model */ IDiffHor * (1 + COS(slopeFace * deg2rad)) / 2 ELSE_IF diffuseModel < 1.5 THEN /* Model developed by Kondratjev */ IDiffHor * (COS(slopeFace * deg2rad / 2))**2 ELSE /* Perez model */ Perez (HeightAboveSea, SlopeFace, ElevSun, AngleIncFace, IDiffHor, IDirNorm) END_IF; IDiffRefl := reflGround * (IDirHor + IDiffHor); IDiffGrd := IDiffRefl * (1 - COS(slopeFace * deg2rad)) / 2; IDifSkyWal := IDiffSky; IDifGrdWal := IDiffGrd; IDifSkyWdw := IDiffSky; IDifGrdWdw := IDiffGrd; IDifSkyArb := IDiffHor; IDifGrdArb := IDiffRefl; /* Interpolate for current wind direction between PCoeff's for given directions */ IF (WindDir < dirPCoeff[1]) THEN PressCoeff := PCoeff[nWDir] + (PCoeff[1]-PCoeff[nWDir])* (WindDir - (dirPCoeff[nWDir] -360))/ (dirPCoeff[1] - (dirPCoeff[nWDir] -360)) ELSE_IF (WindDir > dirPCoeff[nWDir]) THEN PressCoeff := PCoeff[nWDir] + (PCoeff[1] - PCoeff[nWDir])* (WindDir - dirPCoeff[nWDir])/ (dirPCoeff[1] - (dirPCoeff[nWDir] -360)) ELSE FOR i = 1, (nWDir-1) IF (WindDir >= dirPCoeff[i] AND WindDir < dirPCoeff[i+1]) THEN PressCoeff := PCoeff[i] + (PCoeff[i+1] - PCoeff[i])* (WindDir - dirPCoeff[i])/ (dirPCoeff[i+1] - dirPCoeff[i]) END_IF END_FOR END_IF; /* Calculate pressure at ground level */ PGround := PAir + (PressCoeff * RHOMOIS(TAir,HumAir) * WindVel**2)/2; LINKS /* type name variables .... */ Clim2Face ClimIn PAir, TAir, XAir, HumAir, TGround, TSky, WindDir, WindVel, IDirNorm, IDiffHor, ElevSun, AzimutSun; Z ReflGrdLink ReflGround; Speed VelLink WindVelLoc; /* Output data */ Face2Wall Out2Wall TAirWal, TGroundWal, TSkyWal, hOutside, IDirWal, IDifSkyWal, IDifGrdWal; Face2Wind Out2Wind TAirWdw, TGroundWdw, TSkyWdw, hOutside, IDirWdw, IDifSkyWdw, IDifGrdWdw, AzSun2Face, ElevSunWdw, AngleIncFace; Face2Wind Out2Arb TAirArb, TGroundArb, TSkyArb, hOutside, IDirArb, IDifSkyArb, IDifGrdArb, AzSun2Arb, ElevSunArb, AngleIncArb; BiDirAir Out2Leak PGround, VOID, TAirLeak, VOID, XAirLeak, VOID, HumAirLeak, VOID; VARIABLES /* type name role def min max description*/ Pressure PAir IN 1325 SMALL BIG "Atmospheric pressure" Temp TAir IN 20 ABS_ZERO BIG "Ambient air temp" Temp TGround IN 20 ABS_ZERO BIG "Ground temp" Temp TSky IN 15 ABS_ZERO BIG "Sky temp" Temp TAirWal OUT 20 ABS_ZERO BIG "Ambient air temp" Temp TGroundWal OUT 20 ABS_ZERO BIG "Ground temp" Temp TSkyWal OUT 15 ABS_ZERO BIG "Sky temp" Temp TAirWdw OUT 20 ABS_ZERO BIG "Ambient air temp" Temp TGroundWdw OUT 20 ABS_ZERO BIG "Ground temp" Temp TSkyWdw OUT 15 ABS_ZERO BIG "Sky temp" Temp TAirArb OUT 20 ABS_ZERO BIG "Ambient air temp" Temp TGroundArb OUT 20 ABS_ZERO BIG "Ground temp" Temp TSkyArb OUT 15 ABS_ZERO BIG "Sky temp" HeatCondA hOutside OUT 9 0 BIG "Conv heat transf coef" Fraction_y XAir IN 594 0 BIG "Pollutant fraction" HumRatio HumAir IN 0.073 0 BIG "Humidity ratio" Pressure PGround OUT 1325 SMALL BIG "Atmospheric pressure at ground level" Temp TAirLeak OUT 20 ABS_ZERO BIG "Ambient air temp" Fraction_y XAirLeak OUT 594 0 BIG "Pollutant fraction" HumRatio HumAirLeak OUT 0.073 0 BIG "Humidity ratio" Angle WindDir IN 0 0 360 "Wind direction" Vel WindVel IN 1 0 BIG "Wind speed [m/s]" Vel WindVelLoc OUT 1 0 BIG "Local wind speed" RadA IDirNorm IN 0 0 BIG "Direct normal rad" RadA IDirHor LOC 0 0 BIG "Direct rad on hor surf" RadA IDiffHor IN 0 0 BIG "Diff rad on hor surf" RadA IDiffSky LOC 0 0 BIG "Diff rad on face from sky" RadA IDiffRefl LOC 0 0 BIG "Diff rad reflected from ground" RadA IDiffGrd LOC 0 0 BIG "Diff rad on face from ground" RadA IDirWal OUT 0 0 BIG "Direct rad on wall" RadA IDifSkyWal OUT 0 0 BIG "Diff rad from sky on wall" RadA IDifGrdWal OUT 0 0 BIG "Diff rad from ground on wall" RadA IDirWdw OUT 0 0 BIG "Direct rad on window" RadA IDifSkyWdw OUT 0 0 BIG "Diff rad from sky on window" RadA IDifGrdWdw OUT 0 0 BIG "Diff rad from ground on window" RadA IDirArb OUT 0 0 BIG "Direct rad on arb" RadA IDifSkyArb OUT 0 0 BIG "Diff rad from sky on arb" RadA IDifGrdArb OUT 0 0 BIG "Diff rad from ground on arb" Angle ElevSun IN 27.0 -90 90 "Elevation of sun" Angle AzimutSun IN 26.05 -180 180 "Azimut of sun positive West from South" Angle AzSun2Face OUT 0 -360 360 "Azimut of sun, relative to face, 0 when sun in front" Angle AngleIncFace OUT 0 -90 90 "Angle of incidence onto surface" Angle ElevSunWdw OUT 27.0 -90 90 "Elevation of sun" Angle ElevSunArb OUT 27.0 -90 90 "Elevation of sun" Angle AzSun2Arb OUT 0 -360 360 "Azimut of sun, relative to face, 0 when sun in front" Angle AngleIncArb OUT 0 -90 90 "Angle of incidence onto hor surface" Factor PressCoeff LOC 0 -BIG BIG "Pressure coef with current wind direction" Factor ReflGround IN 0.5 0 1 "Ground reflectance" MODEL_PARAMETERS /* type name role def min max description*/ INT nWDir SMP 1 1 BIGINT "Number of given wind directions" PARAMETERS /* type name role def min max description*/ Factor diffuseModel S_P 0 0 2 "Model alternative for diffuse rad 0 = ASHRAE 1 = Kondratjev 2 = Perez model" Angle azimutFace S_P 0 0 360 "Azimut of face, positive Eastfrom North" Angle slopeFace S_P 0 0 180 "Slope of face 0=hor up, 90=vert, 180=hor down" Length HeightAboveSea S_P 0 0 BIG "Height above sea in meters" Factor pCoeff[nWDir] S_P 0 -BIG BIG "Pressure coeff." Factor dirPCoeff[nWDir] C_P 0 0 BIG "Directions where pressure coeff. given" Factor deg2rad C_P 0.0175 SMALL BIG "Conversion factor from Deg to Rad" Factor rad2deg C_P 57.296 SMALL BIG "Conversion factor from Rad to Deg" PARAMETER_PROCESSING FOR i = 1, nWDir dirPCoeff[i] := (i - 1) * 360/nWDir; END_FOR; /* Conversion factor from Deg to Rad and vice-versa */ deg2rad := PI/180.0; rad2deg := 180.0/PI; END_MODEL