CONTINUOUS_MODEL CeSimZon ABSTRACT " SIMplified ZONe, single mass for parts of envelope, MRT w area factors. Simplified zone model. The active parts of some enclosing elements (walls/floor/ceiling) have been combined into one thermal node, which is included in the zone model. Purpose: This is a simplified zone model. The active parts of some enclosing elements (walls/floor/ceiling) have been combined into one thermal node, which is included in the zone model. Thus, the model has (at lest) two nodes: Furniture and combined (internal) walls. The combined walls are adiabatic, i.e. they have no net transmission over long periods. External walls (at least one) are handled separately, because the conditions on the opposite side are different from those in the zone. In general, all non-adiabatic walls, e.g. partitions towards other simulated zones, are kept separate. In the model below, 'IntWall' and 'ExtWall' are used to name the two categories of enclosing elements. The geometry of the zone is not known in detail; surface areas are known and are used for distribution of radiation. Surface slopes are also known and are used to calculate non-linear convective transfer. The subrotine 'Activcap' was developed by Jan Akander, based on earlier work by Gudni Johannesson. References: Johannesson, Gudni: ?? Limits: Date: September 1996 ver 1.0 February 1997 ver 1.1 May 1997 ver 2.1 March 2001 ver 2.2 Authors: Mika Vuolle Axel Bring Jan Akander (Activcap-subroutine) Subroutines called: Activcap (external Fortran subroutine) U_film - - " /* PG 020508 MiscMeasure implemented using a matrix of coefficients (to avoid problems with Jacobians) PS 020506 New options for MiscMeasure, positive electricity consumption for local cooling units LE 020425 New OUT variable MiscMeasure on link MiscMeasureLink determined by PG new S_P MiscMeasureSelector LE 011120 Missing factor 17 inserted in diff eq for XCO2. LE 011109 QCdInt2Zone should not be summed twice in result report, changed to once LE 011030 Test using **0.25 changed to avoid fortran error MV 010618 Occupancy loads are revised. Error when PMV < 0 PG 010615 range of M (Activity level) changed to [0.6, 10] (was [0.8, 4]) MV 010411 The latent load from occupancies is changed to QLatent=M-Qcv-Qlw MV 010411 Tiny error in PMV calc and work eff garbage is removed MV 010409 Total # of working hours and lost # of working hours are introduced and cost of lost working hours is removed MV 010409 'QLocUnit' added into QHC2Zone MV 010409 Tiny error in QCvOcc2Zone MV 010322 Furniture removed. Inside walls are introduced instead. Outcommented codes are removed. Previous version is in Axel's wax museum. MV 010227 Number of internall walls could be 0. MV 010221 Evaporative humidity loads are added AB 010131 Light is just a source of Sw+Lw+Cv emanating from a transparent surface Modified defaults for liteFract... MV 010110 Workloss due to temperature is added. AB 001023 Bug in air heat balance, still; put SW radiation on floor (as well as on internal walls) AB 001019 Bug in air heat balance AB 001010 Convective devices w TQ interface LE 000523 Modify test on SchedOcc to avoid loss of Jacobian elements MV 990408 ALite was missing from TLite equation MV 980923 CO2 ppm / vol is added PS 980525 RelativeHum LOC -> OUT ReadHumdity link type W -> Generic Variable on ReadHumdity link XHum -> RelativeHum 980520 MV Air exchange is changed to const rho_air instead of function rhomois. 980323 MV Air energy balance is corrected 980226 MV Heat cap. is added into air node. 980123 AB Added window transmission for energy balance output 971210 MV Latent heat is added to QEquip2Zone and QOcc2Zone variables. 971210 MV Default values are improved. 971125 MV Air change rate per hour is added. 971124 MV Linearize for TCl and when there is no occupancy, TCl is average from 35.7 and TAir. hcl calculation fixed in the cases when TCl and TAir are equal. 971111 PG nOp: default = 0 liteRatedInput: min = 0 TAir renamed to TAirMean. Added desctiption to abstract 971027 AB TQExtWall link renamed TQWall nMain removed Added variables for heat balance of zone TLite as OUT variable */ EQUATIONS /********************* Lighting ***********************/ /* Loads from lite */ QLite := LiteOn * liteRatedInput; QSwLite := liteFractVisible * QLite; QLwLite := liteFractLw * QLite; QCvLite := QLite - QSwLite - QLwLite; /********************* Internal loads ***********************/ /* Radiation from equipment */ QLwEquip2Zone := SUM i = 1, nUnit schedEquip[i] * QSrcRadEquip[i] END_SUM; /* Convection from equipment */ QCvEquip2Zone := SUM i = 1, nUnit schedEquip[i] * QSrcCvEquip[i] END_SUM; /********************* PPD and PMV ***********************/ /* Nomenclature according to SS 02 40 01 (ISO 7730) */ TOp := 0.5 * (TAirMean + TMrt); PVap := IF XHum <=0 THEN 0 ELSE (P+10**5) * XHum / (0.62198 + XHum) END_IF; FOR i=1, nOp /* hCl[i] := IF ((2.38 * ABS(TCl[i]-TAirMean)**0.25) < (12.1 * SQRT(AirVel[i]))) THEN */ hCl[i] := IF ABS(TCl[i]-TAirMean) < (12.1/2.38 * SQRT(AirVel[i]))**4 THEN 12.1 * SQRT(AirVel[i]) ELSE_IF ABS(TCL[i]-TAirMean) < 0.001 THEN 2.38 * ABS(0.001)**0.25 ELSE 2.38 * ABS(TCl[i]-TAirMean)**0.25 END_IF; TCl[i] = IF LINEARIZE(1) THEN (35.7+TAirMean)/2 ELSE_IF schedOcc[i] > 0 THEN 35.7 - 0.028 * (M[i]*58-W[i]) - 0.155*iCl[i]* (3.96E-8 * fCl[i] * ((TCl[i]-ABS_ZERO)**4 - (TMrt-ABS_ZERO)**4) + fCl[i] * hCl[i] * (TCl[i]-TAirMean)) ELSE (35.7+TAirMean)/2 END_IF; PMV[i] := IF schedOcc[i] > 0 AND PVap > 0 THEN (0.303*EXP(-0.036*M[i]*58)+0.028) * ( ( M[i]*58-W[i]) - 3.05E-3 * (5733 - 6.99*(M[i]*58-W[i]) - PVap) - 0.42 * ((M[i]*58-W[i]) - 58.15) - 1.7E-5 * M[i]*58 * (5867-PVap) - 0.0014 * M[i]*58 * (34-TAirMean) - 3.96E-8 * fCl[i] * ( (TCl[i]-ABS_ZERO)**4 - (TMrt-ABS_ZERO)**4 ) - fCl[i] * hCl[i] * (TCl[i]-TAirMean)) ELSE 0 END_IF; PPD[i]:= IF schedOcc[i] > 0 THEN 100 - 95*EXP(-(0.03353*PMV[i]**4+0.2719*PMV[i]**2)) ELSE 0 END_IF; QCvOcc[i] := schedOcc[i] * nOcc[i] * 1.8 * (fCl[i] * hCl[i] * (TCl[i] - TOp) + 0.0014 * M[i] * 58 * (34 - TOp)); QLwOcc[i] := schedOcc[i] * nOcc[i] * 1.8 * (3.96E-8 * fCl[i] *((TCl[i]-ABS_ZERO)**4 - (TMrt-ABS_ZERO)**4)); QOccVap[i]:= schedOcc[i] * nOcc[i] * 1.8 * ( 3.05E-3 * ( 5733 - 6.99 * (M[i]*58 - W[i]) - PVap) + /* Diff through skin */ 1.7E-5 * M[i]*58 * (5867 - PVap) /*Latent respiration */ ); QOccMet[i] := schedOcc[i] * nOcc[i] * 1.8 * M[i] * 58 ; QSweat[i]:= IF (QOccMet[i] - (QCvOcc[i] + QLwOcc[i] + QOccVap[i])) < 0 THEN 0 ELSE (QOccMet[i] - (QCvOcc[i] + QLwOcc[i] + QOccVap[i])) END_IF; END_FOR; /* Convective heat from occupants */ QCvOcc2Zone := SUM i = 1, nOp QCvOcc[i] END_SUM; /* LW radiation from occupants */ QLwOcc2Zone := SUM i = 1, nOp QLWOcc[i] END_SUM; /******************** Radiation from sources **********************/ /* - - - - - - - - - - - - - - - - - - - - - - - - - */ /* Incoming solar, to be received by internal ?? walls */ QSwWind2Zone := SUM i=1,nWind QDrWind2Zone[i] + QDfWind2Zone[i] END_SUM; /* - - - - - - - - - - - - - - - - - - - - - - - - - */ /* Other sources, to be distributed by area factors */ QRad2Zone := QSwLite + QLwLite + QLwOcc2Zone + QLwEquip2Zone; /******************** Hot/Cold surfaces **********************/ /* Load from Heated / Cooled surfaces frontside*/ FOR i=1, nHCSurf hHC[i] := U_film (TAirMean, THCSurf[i], slopeSurf[nWall+i]); QCvHCFront[i] := hHC[i] * AHCSurf[i] * (THCSurf[i]-TAirMean); QHCSurfFront[i] = QCvHCFront[i] + hLw * AHCSurf[i] * (THCSurf[i]-TMrt); END_FOR; /* Sum convective loads from Heated / Cooled surfaces */ QCvHC2Zone := SUM i=1,nHCSurf QCvHCFront[i] + QHCSurfBack[i] END_SUM; QCvDev2Zone := SUM i = 1, nCvDev QCvDev[i] END_SUM; /********************* Air flows ***********************/ /* Air mass balance */ 0 = MF_0 + SUM i = 1, nTerminal MF[i] END_SUM; MExhTot := IF MF_0 < 0 THEN MF_0 ELSE 0 END_IF + SUM i = 1 , nTerminal IF MF[i] < 0 THEN MF[i] ELSE 0 END_IF END_SUM; ACH := ABS(MExhTot) * 3600 / (Rho_air*AFloor*Height); /* ABg MassAir := RhoMois(TAirMean,XHumLoc)*volAir; */ /******************** Heat balances **********************/ /* - - - - - - - - - - - - - - - - - - - - - - - - - */ /* Heat balance for Mean Radiant Temperature */ 0 = QRad2Zone + hLwAInt * (TIntWall-TMrt) + hLw * ( SUM i = 1, nExtWall AExtWall[i] * (TExtWall[i] - TMrt) END_SUM + SUM i = 1, nWind AWind[i] * (TWind[i] - TMrt) END_SUM + SUM i = 1, nHCSurf AHCSurf[i] * (THCSurf[i] - TMrt) END_SUM ); /* - - - - - - - - - - - - - - - - - - - - - - - - - */ /* Heat balances for surfaces */ /* Internal and inside walls heat balance */ QCdInt2Zone := IF nIntWall < 0.5 THEN 0 ELSE - hAInt * (TAirMean-TIntWall) - hLwAInt * (TMrt-TIntWall) - AintWalls * QSwWind2Zone / (AIntWalls + AExtWall[nFloor]) END_IF; 0 = CIntWall*TIntWall' + QCdInt2Zone; /* External walls heat balance */ FOR i = 1, nExtWall hExtWall[i] := U_film (TAirMean, TExtWall[i], slopeSurf[i]); 0 = QCdExt2Surf[i] + AExtWall[i] * ( hExtWall[i] * (TAirMean-TExtWall[i]) + hLw * (TMrt-TExtWall[i]) + IF i == nFloor THEN QSwWind2Zone / (AIntWalls + AExtWall[nFloor]) ELSE 0 END_IF ); END_FOR; /* Windows heat balance */ FOR i=1,nWind hWind[i] := U_film (TAirMean, TWind[i], slopeSurf[nWall+nHCSurf+i]); 0 = QLcWind2Zone[i] + AWind[i] * ( hWind[i] * (TAirMean-TWind[i]) + hLw * (TMrt-TWind[i]) ); QSwWind2Amb[i] = 0; END_FOR; VapFOcc2Zone := SUM i=1, nOp QOccVap[i] + QSweat[i] END_SUM / 2430000; /*heat of vaporization of water 30 C*/ /* Begin of local units */ /* ABg = HAir = Enthal(TAirMean, XHumLoc); */ HAir := Enthal(TAirMean, XHumLoc); FOR i=1, nLocUnit QLocalUnit[i] := CtrLocUnit[i] * QMaxLoc[i]; IF QMaxLoc[i] < 0 THEN WChillCoil[i] := HumRat((P+10**5), SatPres(TCoil[i])); HChillCoil[i] := Enthal(TCoil[i], MIN(XHum,WChillCoil[i])); MAir[i] := -QLocalUnit[i] / (HAir-HChillCoil[i]); Wf[i] := MAir[i] * (XHum - MIN(XHum,WChillCoil[i])); ELSE Wf[i] := 0.0; END_IF; QEl[i] := ABS(QLocalUnit[i]/COP[i]); END_FOR; QLocUnit:= SUM i = 1, nLocUnit QLocalUnit[i] END_SUM; /* - - - - - - - - - - - - - - - - - - - - - - - - - */ /* Heat balance for air */ /* ABg MassAir * HAir' */ /* MassAir * ((CP_Air + XHumLoc*CP_Vap) * TAirMean' + HF_Vap * XHumLoc') */ ((massAir+numAirmass)*CP_Air + massAir*XHumLoc*CP_Vap) * TAirMean' + massAir*HF_Vap * XHumLoc' = QCvOcc2Zone + QCvEquip2Zone + QCvLite + QCvHC2Zone + QCvDev2Zone + QLocUnit + Q_0 + SUM i=1,nTerminal Q[i] END_SUM + SUM i=1,nExtWall hExtWall[i] * AExtWall[i] * (TExtWall[i]-TAirMean) END_SUM + hAInt * (TIntWall-TAirMean) + SUM i = 1, nWind hWind[i] * AWind[i] * (TWind[i]-TAirMean) END_SUM + 2430000 * VapFOcc2Zone /* 2430000 is heat of vaporization of water 30 C*/ + HF_VAP * (SUM i = 1, nUnit schedEquip[i] * VapFSrcEquip[i] END_SUM); /********************* CO2 balance ***********************/ MassAir * XCO2' = SUM i=1,nOp 17 * schedOcc[i]*nOcc[i]*M[i]/3.6*1.8 END_SUM + SUM i = 1, nUnit schedEquip[i]*CO2FSrcEquip[i] END_SUM + XF_0 + SUM i=1,nTerminal XF[i] END_SUM; /********************* Humidity balance ***********************/ PVapSat := SATPRES (TAirMean); RelativeHum = RELHUM ((P+10**5), PVapSat, XHum); MassAir * XHumLoc' = VapFOcc2Zone - SUM i=1, nLocUnit Wf[i] END_SUM + SUM i = 1, nUnit schedEquip[i] * (VapFSrcEquip[i] + EvapVapFSrcEquip[i]) END_SUM + VapF_0 + SUM i=1, nTerminal VapF[i] END_SUM; HumSat:=HumRat((P+10**5), PVapSat); XHum = Saturated * (HumSat-0.0001) + (1-Saturated)* XHumLoc; /********************* Misc measure signal ***********************/ FOR i=1, nMisc MiscMeasure[i] = IF MiscSelector[i] <= 1.9999 THEN TOp ELSE_IF MiscSelector[i] <= 2.9999 THEN SUM j=1,nOp MiscCoef[i,j]*(PPD[j]-5) * sign(1.0, PMV[j]) END_SUM ELSE_IF MiscSelector[i] <= 3.9999 THEN 0.0 ELSE_IF MiscSelector[i] <= 5.9999 THEN SUM j=1,nSurf MiscCoef[i,j]*TExtWall[j] END_SUM ELSE_IF MiscSelector[i] <= 6.9999 THEN TAirMean ELSE_IF MiscSelector[i] <= 7.9999 THEN DewPnt(XHumLoc) ELSE 0.0 END_IF; END_FOR; /* Extra variables for heat balance */ /* Note: These groupings are not altogether the same as above, where physics is the guide. */ QDayLite := QSwWind2Zone; /* no back radiation */ QEquip2Zone := QCvEquip2Zone + QLwEquip2Zone + HF_VAP * SUM i = 1, nUnit schedEquip[i] * VapFSrcEquip[i] END_SUM; QOcc2Zone := QCvOcc2Zone + QLwOcc2Zone + VapFOcc2Zone * 2430000; QHC2Zone := SUM i = 1, nHCSurf QHCSurfFront[i] + QHCSurfBack[i] END_SUM + QCvDev2Zone + QLocUnit; QCdExt2Zone := SUM i = 1, nExtWall QCdExt2Surf[i] END_SUM; /* IntWall = QCdWalls2Zone := QCdExt2Zone + QCdInt2Zone; */ /* QCdWalls2Zone := QCdInt2Zone + QCdExt2Zone + QCdInt2Zone; */ QCdWalls2Zone := QCdExt2Zone + QCdInt2Zone; QTerm2Zone := Q_0 + SUM i = 1, nTerminal Q[i] END_SUM; QLcWinds2Zone := SUM i = 1, nWind QLcWind2Zone[i] END_SUM; XCO2Vol := XCO2 / 1.8; /***** Workloss due to temperature *****/ TotWorkHour := SUM i=1, nOp SchedOcc[i] * nOcc[i] END_SUM; LostWorkHour := SUM i=1, nOp SchedOcc[i] * nOcc[i] * lostWorkPerC * IF Top < 20 THEN (20 - Top) ELSE_IF Top > 25 THEN (Top - 25) ELSE 0 END_IF END_SUM; /***** Workloss due to temperature *****/ Saturated := IF Event(HumAS,XHumLoc - HumSat) > 0 THEN 1 ELSE 0 END_IF; /********************* Declarations ***********************/ LINKS /* type name variables */ /* Flows from walls */ FOR i=1, nExtWall TQ TqWall[i] Textwall[i], POS_IN QCdExt2Surf[i] END_FOR; /* Flows from windows */ FOR i=1, nWind TQ TqWind[i] TWind[i], POS_IN QLcWind2Zone[i]; RRRWW RadWind[i] POS_IN QDfWind2Zone[i], POS_IN QDrWind2Zone[i], POS_IN QSwWind2Amb[i], AzimutIn[i], ElevIn[i] END_FOR; /* Flows from Heated / Cooled surfaces */ FOR i= 1, nHCSurf TQ TqHCFront[i] THCSurf[i], POS_IN QHCSurfFront[i]; TQ TqHCBack[i] TAirMean, POS_IN QHCSurfBack[i]; END_FOR; /* Flows from convective heating/cooling devices */ FOR i= 1, nCvDev TQ TqCvDev[i] TAirMean, POS_IN QCvDev[i]; END_FOR; /* Air flows, ventilation & leaks */ BiDirAir Term_0 P, POS_IN MF_0, TAirMean, POS_IN Q_0, XCO2, POS_IN XF_0, XHum, POS_IN VapF_0; FOR i = 1, nTerminal BiDirAir Term[i] P, POS_IN MF[i], TAirMean, POS_IN Q[i], XCO2, POS_IN XF[i], XHum, POS_IN VapF[i] END_FOR; /* Schedules */ /* - - occupants */ FOR i = 1, nOp ControlLink SetOcc[i] schedOcc[i]; END_FOR; /* - - equipment */ FOR i = 1, nUnit ControlLink SetEquip[i] schedEquip[i]; END_FOR; /* - - local units */ FOR i = 1, nLocUnit ControlLink CtrLocalUnit[i] CtrLocUnit[i]; END_FOR; /* Control of lighting */ ControlLink CtrlLight LiteOn; /* Readings of sensors */ /* - - temperatures */ FOR i=1, nSensor T ReadTemp[i] TAirMean; END_FOR; /* - - humidity */ Generic ReadHumidity RelativeHum; /* - - CO2 */ X_y ReadCO2 XCO2; /* - - Misc measure signal */ FOR i=1, nMisc GENERIC MiscMeasLink[i] MiscMeasure[i]; END_FOR; VARIABLES /* type name role def min max description */ /* WINDOWS */ /* Solar angles, not used */ Angle AzimutIn[nWind] IN 97.2 0 360 "Az of incident direct" Angle ElevIn[nWind] IN 19.9 0 90 "Elev of incident direct" Radiation QDfWind2Zone[nWind] IN 0 0 BIG "SW diff rad entering" Radiation QDrWind2Zone[nWind] IN 0 0 BIG "SW dir rad entering" Radiation QSwWind2Amb[nWind] OUT 0 -BIG 0 "SW rad leaving, (all diffuse), POS_IN " Radiation QSwWind2Zone LOC 108.9 0 BIG "total SW in thru wdws" Radiation QDayLite LOC 0 0 BIG "total daylight to zone" /* LIGHT */ ElPowerCons QLite LOC 0. 0 BIG "Supplied lite power" HeatFlux QSwLite LOC 0. 0 BIG "SW radiation from light" HeatFlux QLwLite LOC 0. 0 BIG "LW from lite" HeatFlux QCvLite LOC 0. 0 BIG "Convective from lite" /* CONVECTION AND RADIATION */ HeatFlux QCdExt2Surf[nExtWall] OUT 7 0 BIG "Flow from wall" HeatFlux QCdExt2Zone LOC -5 -BIG BIG "Total from external walls" HeatFlux QCdInt2Zone LOC 216 -BIG BIG "Total from internal walls" HeatFlux QCdWalls2Zone LOC 212 -BIG BIG "Total from walls" HeatFlux QLcWind2Zone[nWind] OUT -64 -BIG BIG "Flow from window" HeatFlux QLcWinds2Zone LOC 0 -BIG BIG "Flow from windows" HeatFlux QHCSurfFront[nHCSurf] OUT 0.3 -BIG BIG "Flow from HCSurf front" HeatFlux QHCSurfBack[nHCSurf] IN 7 -BIG BIG "Flow from HCSurf back" HeatFlux QHC2Zone LOC 1.5 -BIG BIG "Total from HCSurf" HeatFlux QRad2Zone LOC 0 -BIG BIG "Source radiation, from lite,occ,equip" HeatFlux QCvHC2Zone LOC 7 -BIG BIG "Total conv from HCSurf" HeatFlux QCvHCFront[nHCSurf] LOC 0.4 -BIG BIG "Conv fr HC front" HeatFlux QCvDev[nCvDev] IN 0 -BIG BIG "Flow from conv device" HeatFlux QCvDev2Zone LOC 0 -BIG BIG "Total flow from cv dev" ElPowerCons QCvEquip2Zone LOC 0 -BIG BIG "Conv load from equipm" ElPowerCons QLwEquip2Zone LOC 0 -BIG BIG "LW load from equipm" HeatFlux QEquip2Zone LOC 0 -BIG BIG "Total from equipm" HeatFlux QSweat[nOp] LOC 0 -BIG BIG "Sweat from occ" HeatFlux QCvOcc[nOp] LOC 0 -BIG BIG "Conv load from occ" HeatFlux QOccVap[nOp] LOC 0 -BIG BIG "Vapour load from occ" HeatFlux QOccMet[nOp] LOC 0 -BIG BIG "Total load from occ" HeatFlux QLwOcc[nOp] LOC 0 -BIG BIG "Rad load from occ" HeatFlux QCvOcc2Zone LOC 0 -BIG BIG "Conv from occupants" HeatFlux QLwOcc2Zone LOC 0 -BIG BIG "LW from occupants" HeatFlux QOcc2Zone LOC 0 -BIG BIG "Total from occupants" HeatFlux QFurn2Zone LOC 2 -BIG BIG "Heat from furniture" /* Convective film coefficients */ HeatCondA hExtWall[nExtWall] LOC 1.8 0 BIG "Film coeff ext walls" HeatCondA hWind[nWind] LOC 2.8 0 BIG "Film coeff windows" HeatCondA hHC[nHCSurf] LOC 1.1 0 BIG "Film coeff h/c surfs" /* ABg Mass MassAir LOC 60 SMALL BIG "Mass of air" */ /* TEMPERATURES */ Temp TAirMean OUT 23.2 ABS_ZERO BIG "Zone air temp, well mixed" Temp TExtWall[nExtWall] IN 24.12 ABS_ZERO BIG "External wall temp" Temp TIntWall OUT 25.23 ABS_ZERO BIG "Temp of internal walls" Temp TWind[nWind] IN 19.6 ABS_ZERO BIG "Window surface temp, innermost pane" Temp THCSurf[nHCSurf] IN 23.45 ABS_ZERO BIG "Heating or Cooling surface Temp" /* CONTROLS */ Control schedOcc[nOp] IN 0 0 1 "Occupancy On / Off" Control schedEquip[nUnit] IN 0 0 1 "Equipment On / Off" Control LiteOn IN 0 0 1 "Lite On / Off" /* PMV AND PPD CALCULATION */ Temp TMrt OUT 24.95 ABS_ZERO BIG "Mean radiant temp" Temp TOp LOC 24 ABS_ZERO BIG "Operative temperature" Factor PMV[nOp] LOC 0 -3 3 "PMV index" Factor PPD[nOp] LOC 0 0 100 "PPD index" Factor hCl[nOp] LOC 5 0 BIG "heat transfer coeff clothes to air" Temp TCl[nOp] OUT 25 ABS_ZERO BIG "Temp of clothes" /* Workloss cost */ Generic TotWorkHour LOC 0 0 BIG "Total working hours" Generic LostWorkHour LOC 0 0 BIG "Lost working hours" /* TERMINALS */ MassFlow MF_0 OUT 0.03 -BIG BIG "Mass flow from term_0" MassFlow MF[nTerminal] IN -0.03 -BIG BIG "Mass flow from term[i]" HeatFlux Q_0 IN 100 -BIG BIG "Heat flux from term_0" HeatFlux Q[nTerminal] IN -100 -BIG BIG "Heat flux from term[i]" HeatFlux QTerm2Zone LOC -100 -BIG BIG "Heat flux from terminals" MassFlow MExhTot LOC -0.03 -BIG BIG "Total exhaust mass flow" NumFlow_h ACH LOC 1.7 0 BIG "Air change rate per hour" /* FRACTION C02 */ Fraction_y XCO2 OUT 594 SMALL BIG "Fraction conc in zone" FractFlow_y XF_0 IN 17 -BIG BIG "Fract flow from term_0" FractFlow_y XF[nTerminal] IN -17 -BIG BIG "Fract flow from term[i]" Generic XCO2Vol LOC 330 SMALL BIG "CO2 ppm/vol" /* HUMIDITY */ HumRatio XHum OUT 0.005 SMALL BIG "Humidity in zone, ratio [kg/kg]" HumFlow VapFOcc2Zone LOC 0 0 BIG "Vapour flow from occ" HumFlow VapF_0 IN 0.00017 -BIG BIG "Vapour flow, term_0" HumFlow VapF[nTerminal] IN -0.00017 -BIG BIG "Vapour flow, term[i]" HumRatio XHumLoc OUT 0.002 SMALL BIG "Humidity in zone, local only ratio [kg/kg]" HumRatio HumSat LOC 0.005 SMALL BIG "Saturated humidity" HumRatio HumAS A_S -0.1 -BIG BIG "Sat memory " Factor Saturated A_S 0 0 1 "0 = Normal 1 = Saturated " /* PRESSURE */ Pressure P IN 1324 SMALL BIG "Zone air pressure" Pressure PVap LOC 956 SMALL 2700 "Vapour pressure" Pressure PVapSat LOC 2876 SMALL BIG "Saturation pressure " Factor RelativeHum OUT 0.3 SMALL 1 "Zone relative humidity" /* Local units */ /* ABg = Enthalpy HAir OUT 20000 -BIG BIG "Air enthalpy" */ Enthalpy HAir LOC 20000 -BIG BIG "Air enthalpy" Enthalpy HChillCoil[nLocUnit] LOC 20000 -BIG BIG "Leaving air enthalpy" HeatFlux QLocalUnit[nLocUnit] LOC 0 -BIG BIG "Heatflux from local unit[i]" HeatFlux QLocUnit LOC 0 -BIG BIG "Heatflux from all local units" Control CtrLocUnit[nLocUnit] IN 0 0 1 "Local unit On / Off" HumRatio WChillCoil[nLocUnit] LOC 0.003 SMALL BIG "Moisture cont of cooling coil leaving air" MassFLow MAir[nLocUnit] LOC 0 0 BIG "Ficticious air massflow through the unit" ElPowerCons QEl[nLocUnit] LOC 0 0 BIG "El. consumption" HumFLow Wf[nLocUnit] LOC 0 0 BIG "Condensation in local unit" /* Misc measure signal */ Generic MiscMeasure[nMisc] OUT 0 -BIG BIG "MiscMeasure signal" MODEL_PARAMETERS /* Separate parameter vectors are maintained in IDA Modeller for different types of surfaces: walls, ceiling light, windows, heated and cooled surfaces. Much of the modelling, including some parameter processing, is done in the same way for all surfaces; thus some vectors are defined for all surfaces. Surfaces are ordered: Walls, HCSurfaces, windows, light. Lights (currently exactly 1), windows, and HC surfaces are all subsurfaces; the light subsurface is transparent, i.e. it is not subtracted from underlying surfaces (currently it is not used). | surfaces | nSurf | mains | subsurfaces | | extWalls | intWalls | HC surfaces | windows | light | nExtWall + nIntWall + nHCsurf + nWind + nLite | walls | | SW rad surfs | nWall + nHCSurf + nRad The main surfaces are walls by default; if there are any wall subsurfaces, they have to appear first among the subsurfaces. */ /* type name role def min max description */ INT nSurf SMP 9 2 BIGINT "all surfaces" INT nWall SMP 6 1 BIGINT "walls" INT nExtWall SMP 1 0 BIGINT "external walls, modelled as separate" INT nIntWall SMP 5 0 BIGINT "internal walls, combined to one in parameter proc" INT nLite SMP 1 1 1 "lighted surfaces" INT nWind SMP 1 0 BIGINT "windows" INT nHCSurf SMP 1 0 BIGINT "heated or cooled surfaces" INT nCvDev SMP 0 0 BIGINT "convective devices" INT nUnit SMP 0 0 BIGINT "equipment loads" INT nOp SMP 0 0 BIGINT "operative points" INT nTerminal SMP 2 0 BIGINT "air flow terminals" INT nSensor SMP 1 0 BIGINT "temperature sensors" INT nMaxLayr SMP 4 1 BIGINT "max number of layers in any wall" INT nRad CMP 1 0 BIGINT "dummy to get *.for ok" INT nLocUnit SMP 0 0 BIGINT "local units cooler / heater" /* Misc measure signal */ INT nMisc SMP 0 0 BIGINT "number of signals for MiscMeasure" INT nMiscCf CMP 0 0 BIGINT "number of coefficients for MiscMeasure" PARAMETERS /* type name role def min max description */ /* LOAD SOURCES */ HeatFlux liteRatedInput S_P 0 0 BIG "Lite rated input" Factor liteFractVisible S_P .1 0 1 "Fraction short wave (Lite)" Factor liteFractLw S_P .6 0 1 "Fraction long wave (Lite)" HeatFlux QSrcCvEquip[nUnit] S_P 0 0 BIG "Convective load" Radiation QSrcRadEquip[nUnit] S_P 0 0 BIG "Radiative load" HumFlow VapFSrcEquip[nUnit] S_P 0 0 BIG "Humidity load" HumFlow EvapVapFSrcEquip[nUnit] S_P 0 0 BIG "Evaporative humidity load" FractFlow_y CO2FSrcEquip[nUnit] S_P 0 0 BIG "CO2 load" Factor nOcc[nOp] S_P 0 0 BIG "Number of persons" Mass numAirmass S_P 30.0 0 BIG "Additional mass to increase numerical robustness" /* SURFACE PROPERTIES AND GEOMETRY */ Angle slopeSurf[nSurf] S_P 90 0 180 "surface slope, 0=floor, 180=ceiling" HeatcondA hLw S_P 5 SMALL BIG "radiative film coeff" HeatcondA hIntWalls S_P 1 SMALL BIG "convective film coeff for internal walls" Area ASurf[nSurf] S_P 10 SMALL BIG "Surface areas" Length height S_P 2.5 SMALL BIG "room height" Factor nfloor S_P 1 1 BIG "Floor surface number (floor has to be external)" /* PMV and PPD CALCULATIONS */ /* Nomenclature according to SS 02 40 01 (ISO 7730) */ Factor M[nOp] S_P 1 .6 10 "Activity[Met], 1 Met = 58 W/m2" HeatCond W[nOp] S_P 0 0 BIG "Outer work, normally 0" Factor iCl[nOp] S_P 1 0 2 "Heat res[clo] of clothes 1 clo = 0.155 (m2 K)/W" Velocity AirVel[nOp] S_P .1 0 1 "Air velocity" Factor fCl[nOp] C_P "Area increase factor" /* STRUCTURE AND PROPERTIES OF INTERIOR WALLS */ Factor nLayers[nIntWall] S_P 4 1 BIG "Number of layers" Length l[nMaxLayr,nIntWall] S_P 0.01 SMALL BIG "Layer thickness" Density rho[nMaxLayr,nIntWall] S_P 1800 SMALL BIG "Layer density" HeatCondL lambda[nMaxLayr,nIntWall] S_P 0.08 SMALL BIG "Layer heat cond" HeatCapM cp[nMaxLayr,nIntWall] S_P 790 SMALL BIG "Layer heat cap" HeatCondA hConv[nIntWall] S_P 1 -BIG BIG "Convective film coeff negative for walls positive for convective masses" /* Local units */ HeatFlux QMaxLoc[nLocUnit] S_P 0 -BIG BIG "Max power of local unit" Temp TCoil[nLocUnit] S_P 5 -BIG BIG "Coil temperature" Factor COP[nLocUnit] S_P 1 1 BIG "COP of local unit" /* Workloss costs */ Generic lostWorkPerC S_P 0.02 0 1 "Loss in work efficency per C when top< 20 and top> 25 (ie 10 % at 30 C)" /* CALCULATED PARAMETERS */ /* ABg + */ Mass MassAir C_P 60 SMALL BIG "Mass of air" Area AExtWall[nExtWall] C_P 6 SMALL BIG "Area of internal walls" Area AIntWall[nIntWall] C_P 20 SMALL BIG "Area of internal walls" Area AIntWalls C_P 75 SMALL BIG "Total area of internal walls" Area AFloor C_P 20 SMALL BIG "Floor surface area" Area AWind[nWind] C_P 2.5 SMALL BIG "Window area" Area AHCSurf[nHCSurf] C_P 1.3 SMALL BIG "Heat/Cool surf areas" Volume volAir C_P 27 SMALL BIG "Air volume of the zone" HeatCapA Ca[nIntWall] C_P 27774 SMALL BIG "Active heat capacity of internal wall (inner side)" HeatCapA Cb[nIntWall] C_P 27774 SMALL BIG "Active heat capacity of internal wall (outer side)" HeatCap CIntWall C_P 6539987 SMALL BIG "Total inside active heat capacity of internal walls" HeatCond hAInt C_P 1 SMALL BIG "Convective film coefficients times areas" HeatCond hLWAInt C_P 1 SMALL BIG "LW coefficients times areas" /* Misc measure signal */ Factor MiscSelector[nMisc] S_P 1.01 1.0 7.0 "determines signal for MiscMeasure 1.0i = Operative temp 2.0i = PPD index with sign at op loc i 3.0i = Not implemented in simplified model 4.0i, 5.0i = Sufr temp at surf i 6.0i = Mean air temp 7.0 = Air dewpoint temperature" Generic MiscCoef[nMisc,nMiscCf] C_P 0 0 BIG "Auxiliary parameter" PARAMETER_PROCESSING nrad := nwind + nlite; /* Adapt geometry to simplified wall handling */ FOR i=1,nSurf IF i <= nExtWall THEN AExtWall[i] := ASurf[i] ELSE_IF i <= nWall THEN AIntWall[i-nExtWall] := ASurf[i] ELSE_IF i <= nWall+nHCSurf THEN AHCSurf[i-nWall] := ASurf[i] ELSE_IF i <= nWall+nHCSurf+nWind THEN AWind[i-nWall-nHCSurf] := ASurf[i] ELSE END_IF END_FOR; AFloor:= ASurf[nfloor]; AIntWalls := SUM i= 1, nIntWall AIntWall[i] END_SUM; /* ABg + */ MassAir := AFloor * height * RHO_AIR; FOR i=1,nIntWall CALL ActivCap (nLayers[i],l[1,i],lambda[1,i],rho[1,i],cp[1,i],24, Ca[i],Cb[i]); END_FOR; CIntWall:= IF nIntWall < 0.5 THEN 1000 /* dummy value to avoid zero row */ ELSE SUM i=1, nIntWall Ca[i]*AIntWall[i] END_SUM END_IF; hAInt := SUM i=1, nIntWall ABS(hConv[i])*AIntWall[i] END_SUM; hLWAInt := SUM i=1, nIntWall IF hConv[i] < 0 THEN hLW*AIntWall[i] ELSE 0 END_IF END_SUM; volAir := aFloor * height; FOR i=1, nOp fCl[i] := IF 0.155*iCl[i] < 0.078 THEN 1.00+1.29*(0.155*iCl[i]) ELSE 1.05+0.645*(0.155*iCl[i]) END_IF END_FOR; nMiscCf := MAX(nExtWall,nOp); FOR i=1, nMisc MiscCoef[i, max(1.0, 100*Mod(MiscSelector[i],1.0))] := 1.0; END_FOR; END_MODEL