The thermal zone is based on the BESTEST Case 600 envelope, while the HVAC
system is based on a conventional VAV system with air cooled chiller and
economizer.  See documentation for the specific models for more information.
This is a single zone model based on the envelope of the BESTEST Case 600
building, though it has some modifications.  Supply and return air ports are
included for simulation with air-based HVAC systems.  Heating and cooling
setpoints and internal loads are time-varying according to an assumed
occupancy schedule.
model Room
  
  
replaceable package MediumA = 
Buildings.Media.Air ;
  
parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal
    ;
  
parameter Modelica.Units.SI.Angle S_=Buildings.Types.Azimuth.S
    ;
  
parameter Modelica.Units.SI.Angle E_=Buildings.Types.Azimuth.E
    ;
  
parameter Modelica.Units.SI.Angle W_=Buildings.Types.Azimuth.W
    ;
  
parameter Modelica.Units.SI.Angle N_=Buildings.Types.Azimuth.N
    ;
  
parameter Modelica.Units.SI.Angle C_=Buildings.Types.Tilt.Ceiling
    ;
  
parameter Modelica.Units.SI.Angle F_=Buildings.Types.Tilt.Floor
    ;
  
parameter Modelica.Units.SI.Angle Z_=Buildings.Types.Tilt.Wall
    ;
  
parameter Integer nConExtWin = 1 ;
  
parameter Integer nConBou = 1
    ;
  
parameter Buildings.HeatTransfer.Data.OpaqueConstructions.Generic matExtWal(
    nLay=3,
    absIR_a=0.9,
    absIR_b=0.9,
    absSol_a=0.6,
    absSol_b=0.6,
    material={
      
Buildings.HeatTransfer.Data.Solids.Generic(
        x=0.009,
        k=0.140,
        c=900,
        d=530,
        nStaRef=Buildings.ThermalZones.Detailed.Validation.BESTEST.nStaRef),
      
Buildings.HeatTransfer.Data.Solids.Generic(
        x=0.066,
        k=0.040,
        c=840,
        d=12,
        nStaRef=Buildings.ThermalZones.Detailed.Validation.BESTEST.nStaRef),
      
Buildings.HeatTransfer.Data.Solids.Generic(
        x=0.012,
        k=0.160,
        c=840,
        d=950,
        nStaRef=Buildings.ThermalZones.Detailed.Validation.BESTEST.nStaRef)})
    ;
  
parameter Buildings.HeatTransfer.Data.OpaqueConstructions.Generic matFlo(
    
final nLay= 2,
    absIR_a=0.9,
    absIR_b=0.9,
    absSol_a=0.6,
    absSol_b=0.6,
    material={
      
Buildings.HeatTransfer.Data.Solids.Generic(
        x=1.003,
        k=0.040,
        c=0,
        d=0,
        nStaRef=Buildings.ThermalZones.Detailed.Validation.BESTEST.nStaRef),
     
Buildings.HeatTransfer.Data.Solids.Generic(
        x=0.025,
        k=0.140,
        c=1200,
        d=650,
        nStaRef=Buildings.ThermalZones.Detailed.Validation.BESTEST.nStaRef)})
    ;
  
parameter Buildings.HeatTransfer.Data.Solids.Generic soil(
    x=2,
    k=1.3,
    c=800,
    d=1500) ;
  
parameter Buildings.HeatTransfer.Data.OpaqueConstructions.Generic roof(
    nLay=3,
    absIR_a=0.9,
    absIR_b=0.9,
    absSol_a=0.6,
    absSol_b=0.6,
    material={
      
Buildings.HeatTransfer.Data.Solids.Generic(
        x=0.019,
        k=0.140,
        c=900,
        d=530,
        nStaRef=Buildings.ThermalZones.Detailed.Validation.BESTEST.nStaRef),
     
Buildings.HeatTransfer.Data.Solids.Generic(
        x=0.1118,
        k=0.040,
        c=840,
        d=12,
        nStaRef=Buildings.ThermalZones.Detailed.Validation.BESTEST.nStaRef),
     
Buildings.HeatTransfer.Data.Solids.Generic(
        x=0.010,
        k=0.160,
        c=840,
        d=950,
        nStaRef=Buildings.ThermalZones.Detailed.Validation.BESTEST.nStaRef)})
    ;
  
parameter Buildings.ThermalZones.Detailed.Validation.BESTEST.Data.Win600 window600(
    UFra=3,
    haveExteriorShade=false,
    haveInteriorShade=false) ;
  
Buildings.HeatTransfer.Conduction.SingleLayer soi(
    A=48,
    material=soil,
    steadyStateInitial=true,
    stateAtSurface_a=false,
    stateAtSurface_b=true,
    T_a_start=283.15,
    T_b_start=283.75)
    ;
  
Modelica.Fluid.Interfaces.FluidPort_a supplyAir(
redeclare final package
      Medium = 
MediumA)
    ;
  
Modelica.Fluid.Interfaces.FluidPort_b returnAir(
redeclare final package
      Medium = 
MediumA)
    ;
  
Buildings.BoundaryConditions.WeatherData.Bus weaBus
    ;
  
Modelica.Blocks.Interfaces.RealOutput TRooAir
    ;
  
Buildings.ThermalZones.Detailed.MixedAir roo(
    
redeclare package Medium = 
MediumA,
    use_C_flow=true,
    nPorts=5,
    hRoo=2.7,
    nConExtWin=nConExtWin,
    nConBou=1,
    energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
    AFlo=48,
    datConBou(
      layers={matFlo},
      
each A=48,
      
each til=F_),
    datConExt(
      layers={roof,matExtWal,matExtWal,matExtWal},
      A={48,6*2.7,6*2.7,8*2.7},
      til={C_,Z_,Z_,Z_},
      azi={S_,W_,E_,N_}),
    nConExt=4,
    nConPar=0,
    nSurBou=0,
    datConExtWin(
      layers={matExtWal},
      A={8*2.7},
      glaSys={window600},
      wWin={2*3},
      hWin={2},
      fFra={0.001},
      til={Z_},
      azi={S_}),
    intConMod=Buildings.HeatTransfer.Types.InteriorConvection.Temperature,
    extConMod=Buildings.HeatTransfer.Types.ExteriorConvection.TemperatureWind,
    steadyStateWindow=false)
    ;
  
Modelica.Blocks.Sources.Constant qConGai_flow(k=192/48)
    ;
  
Modelica.Blocks.Sources.Constant qRadGai_flow(k=288/48)
    ;
  
Modelica.Blocks.Routing.Multiplex3 mul
    ;
  
Modelica.Blocks.Sources.Constant qLatGai_flow(k=96/48)
    ;
  
Modelica.Thermal.HeatTransfer.Sources.FixedTemperature TSoi[nConBou](
    
each T= 283.15)
    ;
  
Fluid.Sources.MassFlowSource_WeatherData sinInf(
    
redeclare package Medium = 
MediumA,
    C=
fill(0.0004, 1),
    nPorts=1,
    use_m_flow_in=true)
    ;
  
Modelica.Blocks.Sources.Constant InfiltrationRate(k=48*2.7*0.5/3600)
    ;
  
Modelica.Blocks.Math.Product product;
  
Buildings.Fluid.Sensors.Density density(
redeclare package Medium = 
MediumA,
      warnAboutOnePortConnection=false)
    ;
  
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor senTZon
    ;
  
Fluid.Sources.MassFlowSource_WeatherData souInf(
    
redeclare package Medium = 
MediumA,
    use_m_flow_in=true,
    C=
fill(0.0004, 1),
    nPorts=1)
    ;
  
Buildings.Controls.OBC.CDL.Reals.Sources.TimeTable intLoad(table=[0,
        0.1; 8*3600,0.1; 8*3600,1.0; 18*3600,1.0; 18*3600,0.1; 24*3600,0.1])
    ;
  
Modelica.Blocks.Sources.Constant CO2_flow_per(k=1.023e-5)
    ;
  
Modelica.Blocks.Logical.GreaterThreshold greThr(threshold=0.1)
    ;
  
Modelica.Blocks.Sources.Constant desOcc(k=2)
    ;
  
Modelica.Blocks.Math.Product numOcc
    ;
  
Modelica.Blocks.Math.BooleanToReal booToRea
    ;
protected 
  Modelica.Blocks.Math.Product pro1
    ;
  
Modelica.Blocks.Math.Product pro2
    ;
  
Modelica.Blocks.Math.Product pro3
    ;
  
Modelica.Blocks.Math.Gain gaiInf(
final k=-1)
    ;
  
Modelica.Blocks.Math.Product pro4
    ;
equation 
  connect(mul.y, roo.qGai_flow);
  
connect(density.port, roo.ports[1]);
  
connect(density.d, product.u2);
  
connect(TSoi[1].port, soi.port_a);
  
connect(soi.port_b, roo.surf_conBou[1]);
  
connect(sinInf.ports[1], roo.ports[2]);
  
connect(weaBus,sinInf. weaBus);
  
connect(weaBus, roo.weaBus);
  
connect(senTZon.T, TRooAir);
  
connect(senTZon.port, roo.heaPorAir);
  
connect(qRadGai_flow.y, pro1.u1);
  
connect(qLatGai_flow.y, pro2.u1);
  
connect(qConGai_flow.y, pro3.u1);
  
connect(intLoad.y[1], pro2.u2);
  
connect(pro1.y, mul.u1[1]);
  
connect(pro3.y, mul.u2[1]);
  
connect(pro2.y, mul.u3[1]);
  
connect(souInf.weaBus, weaBus);
  
connect(souInf.ports[1], roo.ports[3]);
  
connect(product.y, gaiInf.u);
  
connect(gaiInf.y, souInf.m_flow_in);
  
connect(product.y, sinInf.m_flow_in);
  
connect(supplyAir, roo.ports[4]);
  
connect(returnAir, roo.ports[5]);
  
connect(InfiltrationRate.y, product.u1);
  
connect(intLoad.y[1], pro1.u2);
  
connect(pro3.u2, intLoad.y[1]);
  
connect(CO2_flow_per.y, pro4.u2);
  
connect(desOcc.y, numOcc.u1);
  
connect(greThr.y, booToRea.u);
  
connect(booToRea.y, numOcc.u2);
  
connect(greThr.u, pro2.u2);
  
connect(numOcc.y, pro4.u1);
  
connect(pro4.y, roo.C_flow[1]);
end Room;