Version 4.0.0 is a major new release. It is the first release that is based on the Modelica IBPSA Library (https://github.com/ibpsa/modelica). All models simulate with Dymola 2017 FD01 and with JModelica, and the results of these simulators have been cross-compared and are equal within the expected tolerance.
The following major changes have been done:
Modelica_StateGraph2
   library. Instead, it uses Modelica.StateGraph which is part
   of the Modelica Standard Library.
   Buildings.Fluid.Movers have been refactored to increase
   the numerical robustness at very low speed when the fans or pumps are switched on or off.
   Buildings.Obsolete.DistrictHeatingCooling
   with models for district heating and cooling
   with bi-directional flow in the distribution pipes.
   Buildings.Fluid.FMI.Adaptors and
   Buildings.Fluid.FMI.ExportContainers, which
   allow export of HVAC systems and of thermal zones as
   Functional Mockup Units.
   Buildings.Fluid.HeatExchangers.ActiveBeams,
   with active beams for cooling and heating.
   Buildings.Fluid.DXSystems.WaterCooled,
   with water-cooled direct expansion cooling coils.
   Buildings.ThermalZones.ReducedOrder, with
   reduced order models of thermal zones based on VDI 6007
   that are suitable for district energy simulation.
   Buildings.Rooms has been renamed to Buildings.ThermalZones.Detailed.
   This was done because of the introduction of Buildings.ThermalZones.ReducedOrder,
   which is from the Annex60 library,
   in order for thermal zones to be in the same top-level package.Buildings.Rooms.
   Buildings.Fluid.FixedResistances.FixedResistanceDpM has been refactored. Now, if
   the hydraulic diameter is not yet known, one can use the simpler model
   Buildings.Fluid.FixedResistances.PressureDrop, otherwise the model
   Buildings.Fluid.FixedResistances.HydraulicDiameter may be used.
   With this refactoring, also the model Buildings.Fluid.FixedResistances.SplitterFixedResistanceDpM has
   been renamed to Buildings.Fluid.FixedResistances.Junction and
   parameters that use the hydraulic diameter have been removed.
   Buildings.HeatTransfer.Conduction.SingleLayer,
   Buildings.HeatTransfer.Conduction.MultiLayer,
   and Buildings.HeatTransfer.Windows.Window have been refactored
   to add the option to place a state at the surface of a construction.
   This leads in many examples that use the room model to a smaller number
   of non-linear system of equations and a 20% to 40% faster simulation.
   Buildings.Fluid.HeatPumps.ReciprocatingWaterToWater
   and Buildings.Fluid.HeatPumps.ScrollWaterToWater have been added.
   Parameters to these models rely on calibration with tabulated heat pump performance
   data. Python scripts for the calibration of the heat pump models are in
   Buildings/Resources/src/fluid/heatpumps/calibration.
   This is for issue 587.
   The following new libraries have been added:
| Buildings.Obsolete.DistrictHeatingCooling | Package with models for district heating and cooling with bi-directional flow in the distribution pipes. | 
| Buildings.Fluid.FMI.Adaptors Buildings.Fluid.FMI.ExportContainers | Library with adaptors to export HVAC systems and thermal zones
                          as a Functional Mockup Unit for Model Exchange. This is for Buildings, #506. | 
| Buildings.Fluid.HeatExchangers.ActiveBeams | Package with models of active beams for space cooling and heating. | 
| Buildings.Fluid.DXSystems.WaterCooled | Package with models of water-cooled direct expansion cooling coils with single speed, variable speed or multi-stage compressor. | 
| Buildings.Fluid.HeatPumps.Compressors | Package with models of compressors for heat pumps. | 
| Buildings.ThermalZones.ReducedOrder | Package with reduced order models of thermal zones based on VDI 6007. | 
The following new components have been added to existing libraries:
| Buildings.Fluid.Sensors | |
| Buildings.Fluid.Sensors.Velocity | Sensor for the flow velocity. | 
| Buildings.Fluid.HeatExchangers | |
| Buildings.Fluid.HeatExchangers.EvaporatorCondenser | Model for evaporator/condenser with refrigerant experiencing constant temperature phase change. | 
| Buildings.Fluid.HeatPumps | |
| Buildings.Fluid.HeatPumps.ReciprocatingWaterToWater | Model for water to water heat pump with a reciprocating compressor. | 
| Buildings.Fluid.HeatPumps.ScrollWaterToWater | Model for water to water heat pump with a scroll compressor. | 
| Buildings.HeatTransfer.Windows.BaseClasses | |
| Buildings.HeatTransfer.Windows.BaseClasses.HeatCapacity | Model for adding a state on the room-facing surface of a window. This closes issue 565. | 
| Buildings.Media | |
| Buildings.Media.Refrigerants.R410A | Model for thermodynamic properties of refrigerant R410A. | 
| Buildings.Media.Specialized.Water.ConstantProperties_pT | Model for liquid water with constant properties at user-selected temperature. This closes IBPSA, #511. | 
| Buildings.Utilities.Math | |
| Buildings.Utilities.Math.IntegratorWithReset | Integrator with optional input that allows
                          resetting the state if the input changes from falsetotrue.This closes IBPSA, #494. | 
| Buildings.Utilities.Time | |
| Buildings.Utilities.Time.CalendarTime | Block that outputs the calendar time, time of the week, hour of the day etc. This closes IBPSA, #501. | 
The following existing components have been improved in a backward compatible way:
| Buildings.BoundaryConditions | |
| Buildings.BoundaryConditions.WeatherData.BaseClasses.Examples.GetHeaderElement Buildings.BoundaryConditions.WeatherData.BaseClasses.getAbsolutePath Buildings.BoundaryConditions.WeatherData.BaseClasses.getHeaderElementTMY3 Buildings.BoundaryConditions.WeatherData.ReaderTMY3 Buildings.BoundaryConditions.SolarGeometry.ProjectedShadowLength | Refactored the use of Modelica.Utilities.Files.loadResourceto make the model work in JModelica.
                          This closes
                          issue 506.Removed the use of Modelica.Utilities.Files.fullPathNameinBuildings.BoundaryConditions.WeatherData.BaseClasses.getAbsolutePath
                          which is implicitly done inModelica.Utilities.Files.loadResource.
                          Removed in Buildings.BoundaryConditions.WeatherData.BaseClasses.getAbsolutePath
                          the addition offile://to file names which do not start
                          withfile://, ormodelica://.
                          This is not required when usingModelica.Utilities.Files.loadResource.
                          This closes
                          issue 539. | 
| Buildings.BoundaryConditions.WeatherData.ReaderTMY3 | Shifted the computation of the infrared irradiation such that
                          the results in Buildings.BoundaryConditions.SkyTemperature.Examples.BlackBodyare consistent for both option of the black-body sky temperature calculation.
                          This closes
                          IBPSA, #648. | 
| Buildings.BoundaryConditions.SolarIrradiation.BaseClasses.SkyClearness | Reduced tolerance for regularization if the sky clearness is near one or eight. This closes IBPSA, #521. | 
| Buildings.Controls | |
| Buildings.Controls.Continuous.LimPID Buildings.Controls.Continuous.PIDHysteresis Buildings.Controls.Continuous.PIDHysteresisTimer | Added option to reset the control output when an optional Boolean input signal
                           changes from falsetotrue.This closes IBPSA, #494. | 
| Buildings.Electrical | |
| Buildings.Electrical.DC.Storage.Examples.Battery | Replaced Modelica_StateGraph2withModelica.StateGraph.
                          This closes
                          issue 504. | 
| Buildings.Examples | |
| Buildings.Examples.DualFanDualDuct.ClosedLoop Buildings.Examples.VAVReheat.ClosedLoop | Added hysteresis to the economizer control to avoid many events.
                          This change was done in Buildings.Examples.VAVReheat.Controls.EconomizerTemperatureControl.
                          This closes
                          issue 502. | 
| Buildings.Examples.DualFanDualDuct.ClosedLoop | Set filteredSpeed=falsein fan models to avoid a large
                          increase in computing time when simulated between t=1.60E7
                          and t=1.66E7. | 
| Buildings.Examples.VAVReheat.ClosedLoop | Changed chilled water supply temperature to 6°C. This closes issue 509. | 
| Buildings.Examples.ChillerPlant.BaseClasses.Controls.BatteryControl Buildings.Examples.ChillerPlant.BaseClasses.Controls.WSEControl Buildings.Examples.HydronicHeating.TwoRoomsWithStorage Buildings.Examples.Tutorial.Boiler.System7 | Replaced Modelica_StateGraph2withModelica.StateGraph.
                          This closes
                          issue 504. | 
| Buildings.HeatTransfer | |
| Buildings.HeatTransfer.Conduction.SingleLayer | Added option to place a state at the surface of a construction. This closes issue 565. | 
| Buildings.HeatTransfer.Conduction.MultiLayer | Added option to place a state at the surface of a construction. This closes issue 565. | 
| Buildings.HeatTransfer.Windows.Window | Added option to place a state at the surface of a construction. This closes issue 565. | 
| Buildings.HeatTransfer.Windows.BeamDepthInRoom | Refactored the use of Modelica.Utilities.Files.loadResource.
                          This closes
                          issue 506. | 
| Buildings.ThermalZones | |
| Buildings.ThermalZones.Detailed.CFD Buildings.ThermalZones.Detailed.BaseClasses.CFDExchange | Refactored the use of Modelica.Utilities.Files.loadResource.
                          This closes
                          issue 506. | 
| Buildings.ThermalZones.Detailed.MixedAir Buildings.ThermalZones.Detailed.CFD | Refactored the distribution of the diffuse solar irradiation. Previously, the model assumed that all diffuse irradiation first hits the floor before it is diffusely reflected to all other surfaces. Now, the incoming diffuse solar irradiation is distributed to all surfaces, proportional to their emissivity plus transmissivity times area. This closes issue 451. | 
The following existing components have been improved in a non-backward compatible way:
| Buildings.BoundaryConditions | |
| Buildings.BoundaryConditions.WeatherData.BaseClasses.getHeaderElementTMY3 | This function is used to read location coordinates
                          from the TMY3 weather data file. The call to Buildings.BoundaryConditions.WeatherData.BaseClasses.getAbsolutePathhas been removed as it calls the functionModelica.Utilities.Files.loadResource, whose return value needs
                          to be known at compilation time to store the weather data in the FMU.
                          This is not supported by JModelica.
                          Most models should still work as this call has been added at a higher level
                          of the model hierarchy. If models don't work, add a call toloadResourceat the top-level.
                          This closes
                          Buildings, #506. | 
| Buildings.Controls | |
| Buildings.Controls.Continuous.PIDHysteresis | Set zer(final k=0)and madeswi,zerandzer1protected, as they are forBuildings.Controls.Continuous.PIDHysteresis.
                          Only models that access these instances, which typically is not the case,
                          are affected by this change. | 
| Buildings.Controls.Continuous.LimPID Buildings.Controls.Continuous.PIDHysteresis Buildings.Controls.Continuous.PIDHysteresisTimer | Removed the parameter limitsAtInitas
                           it is not used.For Dymola, the conversion script will update models that set this parameter. | 
| Buildings.Controls.SetPoints.Table | Changed protected final parameter nColtonRow.For Dymola, the conversion script will update models that access this parameter. This is for issue 555. | 
| Buildings.Fluid.Actuators | |
| Buildings.Fluid.Actuators.Dampers.Exponential Buildings.Fluid.Actuators.Dampers.MixingBox Buildings.Fluid.Actuators.Dampers.MixingBoxMinimumFlow Buildings.Fluid.Actuators.Dampers.VAVBoxExponential Buildings.Fluid.Actuators.Dampers.MixingBoxMinimumFlow Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear Buildings.Fluid.Actuators.Valves.ThreeWayLinear Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage Buildings.Fluid.Actuators.Valves.TwoWayLinear Buildings.Fluid.Actuators.Valves.TwoWayPressureIndependent Buildings.Fluid.Actuators.Valves.TwoWayQuickOpening Buildings.Fluid.Actuators.Valves.TwoWayTable | Renamed the parameter filteredOpeningtouse_inputFilter.For Dymola, the conversion script will update models that access this parameter. This is for IBPSA, #665 | 
| Buildings.Fluid.Actuators.Dampers.Exponential Buildings.Fluid.Actuators.Dampers.MixingBox Buildings.Fluid.Actuators.Dampers.MixingBoxMinimumFlow Buildings.Fluid.Actuators.Dampers.VAVBoxExponential Buildings.Fluid.Actuators.Dampers.MixingBoxMinimumFlow | Renamed the parameters use_v_nominaland all area related parameters,
                          becausem_flow_nominalandv_nominalare used to compute the area.For Dymola, the conversion script will update models that access this parameter. This is for IBPSA, #544 | 
| Buildings.Fluid.Chillers | |
| Buildings.Fluid.Chillers.Carnot_TEva Buildings.Fluid.Chillers.Carnot_y | Removed the parameters effInpEvaandeffInpCon.
                          Now, always the leaving water temperatures are used to compute the coefficient
                          of performance (COP). Previously, the
                          entering water temperature could be used, but this can give COPs that are higher than
                          the Carnot efficiency if the temperature lift is small.
                          For Dymola, the conversion script will update models.This is for IBPSA, #497 | 
| Buildings.Fluid.FixedResistances | |
| Buildings.Fluid.FixedResistances.FixedResistanceDpM | Renamed Buildings.Fluid.FixedResistances.FixedResistanceDpMtoBuildings.Fluid.FixedResistances.PressureDropand removed the parametersuse_dh,dhandReC.
                          For Dymola, the conversion script will update models.
                          If a model needs to be used that allows specifyingdhandReC,
                          then the new modelBuildings.Fluid.FixedResistances.HydraulicDiametercan be used. | 
| Buildings.Fluid.FixedResistances.SplitterFixedResistanceDpM | Renamed Buildings.Fluid.FixedResistances.SplitterFixedResistanceDpMtoBuildings.Fluid.FixedResistances.Junctionand removed the parametersuse_dh,dhandReC.
                          For Dymola, the conversion script will update models.
                          If a model needs to be used that allows specifyingdhandReC,
                          then useBuildings.Fluid.FixedResistances.Junctionwithdp_nominal = 0(which removes the pressure drop) and useBuildings.Fluid.FixedResistances.HydraulicDiameterat each fluid port. | 
| Buildings.Fluid.FMI | |
| Buildings.Fluid.FMI.InletAdaptor Buildings.Fluid.FMI.OutletAdaptor Buildings.Fluid.FMI.TwoPort Buildings.Fluid.FMI.TwoPortComponent | Renamed Buildings.Fluid.FMI.InletAdaptortoBuildings.Fluid.FMI.Adaptors.Inlet,renamed Buildings.Fluid.FMI.OutletAdaptortoBuildings.Fluid.FMI.Adaptors.Outlet,renamed Buildings.Fluid.FMI.TwoPorttoBuildings.Fluid.FMI.ExportContainers.PartialTwoPort,renamed Buildings.Fluid.FMI.TwoPortComponenttoBuildings.Fluid.FMI.ExportContainers.ReplaceableTwoPort.
                          This was due to the restructuring of theBuildings.Fluid.FMIpackage for
                          Buildings, #506.For Dymola, the conversion script updates these models. | 
| Buildings.Fluid.HeatExchangers | |
| Buildings.Fluid.DXSystems.AirCooled.SingleSpeed Buildings.Fluid.DXSystems.AirCooled.VariableSpeed Buildings.Fluid.DXSystems.AirCooled.MultiStage Buildings.Fluid.DXSystems.Data | Renamed Buildings.Fluid.DXSystems.AirCooled.SingleSpeedtoBuildings.Fluid.DXSystems.AirCooled.SingleSpeed,Buildings.Fluid.DXSystems.AirCooled.VariableSpeedtoBuildings.Fluid.DXSystems.AirCooled.VariableSpeed,Buildings.Fluid.DXSystems.AirCooled.MultiStagetoBuildings.Fluid.DXSystems.AirCooled.MultiStageandBuildings.Fluid.DXSystems.DatatoBuildings.Fluid.DXSystems.AirCooled.Data.This was due to the addition of the new package Buildings.Fluid.DXSystems.WaterCooled.
                          This is for
                          Buildings, #635.For Dymola, the conversion script updates these models. | 
| Buildings.Fluid.HeatPumps | |
| Buildings.Fluid.HeatPumps.Carnot_TEva Buildings.Fluid.HeatPumps.Carnot_y | Removed the parameters effInpEvaandeffInpCon.
                          Now, always the leaving water temperatures are used to compute the coefficient
                          of performance (COP). Previously, the
                          entering water temperature could be used, but this can give COPs that are higher than
                          the Carnot efficiency if the temperature lift is small.
                          For Dymola, the conversion script will update models.This is for IBPSA, #497 | 
| Buildings.Fluid.HeatExchangers.Boreholes | Moved the package Buildings.Fluid.HeatExchangers.BoreholestoBuildings.Fluid.Geothermal.Boreholes.
                          This is for compatibility with an ongoing model development that will include
                          a borefield model.For Dymola, the conversion script will update models that use any model of the package Buildings.Fluid.HeatExchangers.Boreholes. | 
| Buildings.Fluid.Movers | Removed the function Buildings.Fluid.Movers.BaseClasses.Characteristics.flowApproximationAtOriginand changed the arguments of the functionBuildings.Fluid.Movers.BaseClasses.Characteristics.pressure.This was done due to the refactoring of the fan and pump model for low speed. This is for IBPSA, #458. Users who simply use the existing model in Buildings.Fluid.Moversare not affected by
                          this change as the function are called by a low-level implementation only. | 
| Buildings.Fluid.Movers.
                          Buildings.Fluid.Movers.FlowControlled_dp Buildings.Fluid.Movers.FlowControlled_m_flow Buildings.Fluid.Movers.SpeedControlled_Nrpm Buildings.Fluid.Movers.SpeedControlled_y | Renamed the parameter filteredSpeedtouse_inputFilter.For Dymola, the conversion script will update models that access this parameter. This is for IBPSA, #665 | 
| Buildings.Fluid.HeatExchangers.CoolingTowers | Changed the name of the function Buildings.Fluid.HeatExchangers.CoolingTowers.BaseClasses.Characteristics.efficiencytoBuildings.Fluid.HeatExchangers.CoolingTowers.BaseClasses.Characteristics.normalizedPower.
                          Changed the name of the recordBuildings.Fluid.HeatExchangers.CoolingTowers.BaseClasses.Characteristics.efficiencyParameterstoBuildings.Fluid.HeatExchangers.CoolingTowers.BaseClasses.Characteristics.fan,
                          and changed the parameter of this record frometator_P.
                          This change was done as the performance is for the relative power consumption, and not the fan
                          efficiency, as the old parameter name suggests.
                          Users who use the default parameters are not affected by this change.
                          If the default parameters were changed, then for Dymola,
                          the conversion script will update the model. | 
| Buildings.HeatTransfer | |
| Buildings.HeatTransfer.BaseClasses.TransmittedRadiation Buildings.HeatTransfer.BaseClasses.WindowRadiation | Refactored the model to allow separate treatment for the diffuse and direct irradiation, which is needed for issue 451. | 
| Buildings.HeatTransfer.Conduction.BaseClasses.PartialConstruction | Removed parameter Aas it is already declared inBuildings.HeatTransfer.Conduction.BaseClasses.PartialConductorwhich is often used with this class. | 
| Buildings.ThermalZones | |
| Buildings.ThermalZones.Detailed | Moved package from Buildings.RoomstoBuildings.ThermalZones.Detailed.
                          This was done becauseBuildingshas a new packageBuildings.ThermalZones.ReducedOrderwith reduced order building models.
                          Hence, the more detailed room models should be in the same top-level package as they
                          are also for modeling of thermal zones.For Dymola, the conversion script will update models that use any model of the package Buildings.ThermalZones. | 
| Buildings.ThermalZones.Detailed.CFD Buildings.ThermalZones.Detailed.MixedAir Buildings.ThermalZones.Detailed.BaseClasses.CFDAirHeatMassBalance Buildings.ThermalZones.Detailed.BaseClasses.MixedAirHeatMassBalance Buildings.ThermalZones.Detailed.BaseClasses.PartialAirHeatMassBalance Buildings.ThermalZones.Detailed.BaseClasses.RoomHeatMassBalance | Refactored implementation of latent heat gain for
                          Buildings, #515.
                          Users who simply use Buildings.MixedAir.Rooms.CFDorBuildings.MixedAir.Rooms.MixedAirwill not be affected by this change,
                          except if they access variables related to the heat gain. | 
| Buildings.ThermalZones.Detailed.BaseClasses.AirHeatMassBalanceMixed Buildings.ThermalZones.Detailed.BaseClasses.MixedAirHeatGain | Removed models as these are no longer needed due after the refactoring of the room model for Buildings, #515. | 
| Buildings.ThermalZones.Detailed.BaseClasses.RoomHeatMassBalance Buildings.ThermalZones.Detailed.BaseClasses.SolarRadiationExchange | Refactored the distribution of the diffuse solar irradiation, which required replacing the
                          input and output signals.
                          Previously, the model assumed that all diffuse irradiation first hits the floor before it is
                          diffusely reflected to all other surfaces. Now, the incoming diffuse solar irradiation is distributed
                          to all surfaces, proportional to their emissivity plus transmissivity times area. This closes issue 451. | 
| Buildings.ThermalZones.Detailed.BaseClasses.CFDHeatGain | Renamed model from Buildings.ThermalZones.Detailed.BaseClasses.CFDHeatGaintoBuildings.ThermalZones.Detailed.BaseClasses.HeatGain.This is for Buildings, #515. | 
| Buildings.ThermalZones.Detailed.BaseClasses.CFDExchange | Removed the parameter uStartas it is not required. As this is in a base
                          class, users typically won't need to change their models
                          unless they use this base class directly.This is for Buildings, #579. | 
| Buildings.Utilities | |
| Buildings.Utilities.Psychrometrics.WetBul_pTX | Deleted the model Buildings.Utilities.Psychrometrics.WetBul_pTXas the same functionality is provided byBuildings.Utilities.Psychrometrics.TWetBul_TDryBulXi.
                          Users who useBuildings.Utilities.Psychrometrics.WetBul_pTXneed to replace the model manually and reconnect the input and output ports.This is for IBPSA, #475. | 
The following critical errors have been fixed (i.e., errors that can lead to wrong simulation results):
| Buildings.Fluid | |
| Buildings.Fluid.DXSystems.AirCooled.MultiStage Buildings.Fluid.DXSystems.AirCooled.SingleSpeed Buildings.Fluid.DXSystems.AirCooled.VariableSpeed Buildings.Fluid.DXSystems.AirCooled.BaseClasses.Evaporation | Corrected the computation of the wet bulb state in the model that computes the reevaporation of water vapor into the air stream when the coil is switched off. The results change slightly. This closes issue 520 and integrates the change of IBPSA, #474. | 
| Buildings.Fluid.Storage.StratifiedEnhancedInternalHex | Corrected computation of the heat exchanger location which was wrong
                          if hHex_a < hHex_b, e.g., the port a of the heat exchanger
                          is below the port b.
                          This closes
                          issue 531. | 
| Buildings.Examples | |
| Buildings.Examples.VAVReheat.ClosedLoop Buildings.Examples.DualFanDualDuct.ClosedLoop Buildings.Examples.VAVReheat.Controls.Economizer | Corrected the economizer controller which closed the outside air when there was no freeze concern during summer. This closes issue 511. | 
The following uncritical errors have been fixed (i.e., errors that do not lead to wrong simulation results, e.g., units are wrong or errors in documentation):
| Buildings.Electrical | |
| Buildings.Electrical.AC.OnePhase.Sources.Grid Buildings.Electrical.AC.ThreePhasesUnbalanced.Sources.Grid Buildings.Electrical.AC.ThreePhasesUnbalanced.Sources.Grid_N | Corrected sign error in documentation string of
                          variable P. | 
| Buildings.Fluid | |
| Buildings.Fluid.HeatExchanger.WetCoilCounterFlow Buildings.Fluid.HeatExchanger.WetCoilDiscretized | Redeclared Medium2to force it to be a subclass
                          ofModelica.Media.Interfaces.PartialCondensingGases.This is for issue 544. | 
| Buildings.Fluid.Storage | Removed medium declaration, which is not needed and inconsistent with
                          the declaration in the base class. This is for issue 544. | 
| Buildings.ThermalZones.Detailed.Validation.BESTEST | |
| Buildings.ThermalZones.Detailed.Validation.BESTEST.Cases9xx.Case900 Buildings.ThermalZones.Detailed.Validation.BESTEST.Cases9xx.Case900 | Added missing parameterkeyword,
                          which is required as the variable (for the materials) is assigned to a parameter.
                          This is for
                          issue 543. |