diff --git a/.gitignore b/.gitignore index 0322c0f..8fefdcf 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,14 @@ unittests/outputs/*.png unittests/outputs/*.log +# Unit testing resources +######################### +unittests/resources/**/*.so +unittests/resources/**/*.h +unittests/resources/**/*.o +unittests/resources/**/*.xml +unittests/resources/**/*.txt + # Ignore Dymola output, log and temporary files (in alphabetical order) ####################################################################### *.bak-mo diff --git a/README.md b/README.md index 791c2f1..2ca65ad 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,16 @@ This is the development site for MPCPy, the python-based open-source platform fo MPCPy is a python package that facilitates the testing and implementation of occupant-integrated model predictive control (MPC) for building systems. The package focuses on the use of data-driven, simplified physical or statistical models to predict building performance and optimize control. Four main modules contain object classes to import data, interact with real or emulated systems, estimate and validate data-driven models, and optimize control input. ## Third Party Software -While MPCPy provides an integration platform, it relies on free, open-source, third-party software packages for model implementation, simulators, parameter estimation algorithms, and optimization solvers. This includes python packages for scripting and data manipulation as well as other more comprehensive software packages for specific purposes. In particular, modeling and optimization for physical systems rely heavily on the Modelica language specification (https://www.modelica.org/) and FMI standard (http://fmi-standard.org/) in order to leverage model library and tool development on these standards occurring elsewhere within the building and other industries. +While MPCPy provides an integration platform, it relies on free, open-source, third-party software packages for model implementation, simulators, parameter estimation algorithms, and optimization solvers. This includes python packages for scripting and data manipulation as well as other more comprehensive software packages for specific purposes. In particular, modeling and optimization for physical systems rely on the Modelica language specification (https://www.modelica.org/) and FMI standard (http://fmi-standard.org/) in order to leverage model library and tool development on these standards occurring elsewhere within the building and other industries. ## Getting Started -For installation instructions and an introductory tutorial, see Section 2 of the [User Guide](https://github.com/lbl-srg/MPCPy/tree/master/doc/userGuide). +**Users** can download here. + +**Developers** can ``> git clone https://github.com/lbl-srg/MPCPy.git``. + +Then, follow the installation instructions and introductory tutorial in Section 2 of the [User Guide](https://github.com/lbl-srg/MPCPy/tree/master/doc/userGuide), located in /doc/userGuide. + +MPCPy uses Python 2.7 and has been tested on Ubuntu 16.04. ## Contributing If you are interested in contributing to this project: @@ -25,4 +31,4 @@ MPCPy is available under the following open-source [license](https://github.com/ ## Cite To cite MPCPy, please use: -Blum, D. H. and Wetter, M. “MPCPy: An Open-Source Software Platform for Model Predictive Control in Buildings.” Proceedings of the 15th Conference of International Building Performance Simulation, Aug 7 – 9, 2017. San Francisco, CA, Accepted. +Blum, D. H. and Wetter, M. “MPCPy: An Open-Source Software Platform for Model Predictive Control in Buildings.” Proceedings of the 15th Conference of International Building Performance Simulation, Aug 7 – 9, 2017. San Francisco, CA. diff --git a/doc/userGuide/MPCPyUserGuide.pdf b/doc/userGuide/MPCPyUserGuide.pdf index 88be940..318c4cf 100644 Binary files a/doc/userGuide/MPCPyUserGuide.pdf and b/doc/userGuide/MPCPyUserGuide.pdf differ diff --git a/doc/userGuide/source/conf.py b/doc/userGuide/source/conf.py index ae0dfca..b436869 100755 --- a/doc/userGuide/source/conf.py +++ b/doc/userGuide/source/conf.py @@ -57,7 +57,7 @@ # The short X.Y version. #version = u'0.1' # The full version, including alpha/beta/rc tags. -release = u'0.1' +release = u'0.1.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/doc/userGuide/source/gettingStarted.rst b/doc/userGuide/source/gettingStarted.rst index 4cb44ca..5b2e19e 100755 --- a/doc/userGuide/source/gettingStarted.rst +++ b/doc/userGuide/source/gettingStarted.rst @@ -6,17 +6,29 @@ To get started with MPCPy, first follow the installation instructions below. Th Installation Instructions For Linux (Ubuntu 16.04 LTS) ------------------------------------------------------ -1. Install Python Packages - - - matplotlib 2.0.2 - - numpy 1.13.1 - - pandas 0.20.3 - - python-dateutil 2.6.1 - - pytz 2017.2 - - scikit-learn 0.18.2 - - tzwhere 2.3 - - sphinx 1.6.3 - - numpydoc 0.7.0 +1. Install Python packages: + + - MPCPy uses Python 2.7. + + - using pip, install the following packages: + + matplotlib >= 2.0.2 + + numpy >= 1.13.1 + + pandas >= 0.20.3 + + python-dateutil >= 2.6.1 + + pytz >= 2017.2 + + scikit-learn >= 0.18.2 + + sphinx >= 1.6.3 + + numpydoc >= 0.7.0 + + tzwhere **=** 2.3 2. Install libgeos-dev with command: diff --git a/doc/userGuide/source/introduction.rst b/doc/userGuide/source/introduction.rst index 9134358..bf3a53b 100755 --- a/doc/userGuide/source/introduction.rst +++ b/doc/userGuide/source/introduction.rst @@ -24,7 +24,7 @@ Three other modules provide additional, mainly internal, functionality to MPCPy: Third-Party Software -------------------- -While MPCPy provides an integration platform, it relies on free, open-source, third-party software packages for model implementation, simulators, parameter estimation algorithms, and optimization solvers. This includes python packages for scripting and data manipulation as well as other more comprehensive software packages for specific purposes. In particular, modeling and optimization for physical systems rely heavily on the Modelica language specification (https://www.modelica.org/) and FMI standard (http://fmi-standard.org/) in order to leverage model library and tool development on these standards occurring elsewhere within the building and other industries. Two examples of these third-party tools are: +While MPCPy provides an integration platform, it relies on free, open-source, third-party software packages for model implementation, simulators, parameter estimation algorithms, and optimization solvers. This includes python packages for scripting and data manipulation as well as other more comprehensive software packages for specific purposes. In particular, modeling and optimization for physical systems rely on the Modelica language specification (https://www.modelica.org/) and FMI standard (http://fmi-standard.org/) in order to leverage model library and tool development on these standards occurring elsewhere within the building and other industries. Two examples of these third-party tools are: - **JModelica.org** (http://jmodelica.org/) is used for simulation of FMUs, compiling FMUs from Modelica models, parameter estimation of Modelica models, and control optimization using Modelica models. - **EstimationPy** (http://lbl-srg.github.io/EstimationPy/) is used for implementing the Unscented Kalman Filter for parameter estimation of FMU models. @@ -39,5 +39,5 @@ Cite ---- To cite MPCPy, please use: -Blum, D. H. and Wetter, M. “MPCPy: An Open-Source Software Platform for Model Predictive Control in Buildings.” Proceedings of the 15th Conference of International Building Performance Simulation, Aug 7 – 9, 2017. San Francisco, CA, Accepted. +Blum, D. H. and Wetter, M. “MPCPy: An Open-Source Software Platform for Model Predictive Control in Buildings.” Proceedings of the 15th Conference of International Building Performance Simulation, Aug 7 – 9, 2017. San Francisco, CA. diff --git a/doc/userGuide/tutorial/introductory.py b/doc/userGuide/tutorial/introductory.py index d7c7cd7..31a974d 100644 --- a/doc/userGuide/tutorial/introductory.py +++ b/doc/userGuide/tutorial/introductory.py @@ -3,7 +3,8 @@ This tutorial will introduce the basic concepts and workflow of mpcpy. By the end, we will train a simple model based on emulated data, and use -the model to optimize the control signal of the system. +the model to optimize the control signal of the system. All required data +files for this tutorial are located in doc/userGuide/tutorial. The model is a simple RC model of zone thermal response to ambient temperature and a singal heat input. It is written in Modelica: @@ -437,7 +438,11 @@ data of the model object and updates their timeseries data with the optimal solution for the time period specified. Note that other than the constraints, the exogenous data within the model object is used, and the control interval -is assumed to be the same as the measurement sampling rate of the model. +is assumed to be the same as the measurement sampling rate of the model. Use +the ``get_optimization_options()`` and ``set_optimization_options()`` to see +and change the options for the optimization solver; for instance number +of control points, maximum iteration number, tolerance, or maximum CPU time. +See the documentation for these functions for more information. >>> opt_problem.optimize('1/2/2017', '1/3/2017') # doctest: +ELLIPSIS -etc- @@ -472,4 +477,8 @@ if __name__ == "__main__": import doctest doctest.ELLIPSIS_MARKER = '-etc-' - doctest.testmod() + (n_fails, n_tests) = doctest.testmod() + if n_fails: + print('\nTutorial finished with {0} fails.'.format(n_fails)); + else: + print('\nTutorial finished OK.') diff --git a/resources/building/.FMUOutput/binaries/linux32/RapidMPC_Examples_LBNL71T_0Emulate_Emulation.so b/resources/building/.FMUOutput/binaries/linux32/RapidMPC_Examples_LBNL71T_0Emulate_Emulation.so deleted file mode 100755 index 5e19fdb..0000000 Binary files a/resources/building/.FMUOutput/binaries/linux32/RapidMPC_Examples_LBNL71T_0Emulate_Emulation.so and /dev/null differ diff --git a/resources/building/.FMUOutput/binaries/linux64/RapidMPC_Examples_LBNL71T_0Emulate_Emulation.so b/resources/building/.FMUOutput/binaries/linux64/RapidMPC_Examples_LBNL71T_0Emulate_Emulation.so deleted file mode 100755 index 2ffd0ca..0000000 Binary files a/resources/building/.FMUOutput/binaries/linux64/RapidMPC_Examples_LBNL71T_0Emulate_Emulation.so and /dev/null differ diff --git a/resources/building/.FMUOutput/dsmodel.o b/resources/building/.FMUOutput/dsmodel.o deleted file mode 100755 index 01f64a4..0000000 Binary files a/resources/building/.FMUOutput/dsmodel.o and /dev/null differ diff --git a/resources/building/.FMUOutput/dsmodel_fmuconf.h b/resources/building/.FMUOutput/dsmodel_fmuconf.h deleted file mode 100755 index d20bf45..0000000 --- a/resources/building/.FMUOutput/dsmodel_fmuconf.h +++ /dev/null @@ -1 +0,0 @@ -/* file for enabling result storing in FMU */ diff --git a/resources/building/.FMUOutput/fmiFunctions.o b/resources/building/.FMUOutput/fmiFunctions.o deleted file mode 100755 index ce6f95e..0000000 Binary files a/resources/building/.FMUOutput/fmiFunctions.o and /dev/null differ diff --git a/resources/building/.FMUOutput/fmiModelIdentifier.h b/resources/building/.FMUOutput/fmiModelIdentifier.h deleted file mode 100755 index 4fd99ee..0000000 --- a/resources/building/.FMUOutput/fmiModelIdentifier.h +++ /dev/null @@ -1 +0,0 @@ -#define MODEL_IDENTIFIER RapidMPC_Examples_LBNL71T_0Emulate_Emulation diff --git a/resources/building/.FMUOutput/fmu.map b/resources/building/.FMUOutput/fmu.map deleted file mode 100755 index 757143e..0000000 --- a/resources/building/.FMUOutput/fmu.map +++ /dev/null @@ -1,49 +0,0 @@ -# version script generated during FMU export and used when building shared object - -RapidMPC_Examples_LBNL71T_0Emulate_Emulation { - - global: - # FMI 1 - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiGetVersion; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiSetDebugLogging; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiGetReal; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiGetInteger; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiGetBoolean; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiGetString; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiSetReal; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiSetInteger; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiSetBoolean; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiSetString; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiGetModelTypesPlatform; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiInstantiateModel; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiFreeModelInstance; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiSetTime; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiSetContinuousStates; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiInitialize; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiEventUpdate; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiCompletedIntegratorStep; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiTerminate; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiGetDerivatives; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiGetEventIndicators; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiGetContinuousStates; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiGetNominalContinuousStates; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiGetStateValueReferences; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiGetTypesPlatform; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiInstantiateSlave; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiFreeSlaveInstance; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiInitializeSlave; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiTerminateSlave; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiResetSlave; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiSetRealInputDerivatives; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiGetRealOutputDerivatives; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiDoStep; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiCancelStep; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiGetStatus; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiGetRealStatus; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiGetIntegerStatus; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiGetBooleanStatus; - RapidMPC_Examples_LBNL71T_0Emulate_Emulation_fmiGetStringStatus; - - local: - *; -}; diff --git a/resources/building/.FMUOutput/matrixop.o b/resources/building/.FMUOutput/matrixop.o deleted file mode 100755 index 9b0d063..0000000 Binary files a/resources/building/.FMUOutput/matrixop.o and /dev/null differ diff --git a/resources/building/.FMUOutput/modelDescription.xml b/resources/building/.FMUOutput/modelDescription.xml deleted file mode 100755 index 1ed8475..0000000 --- a/resources/building/.FMUOutput/modelDescription.xml +++ /dev/null @@ -1,3319 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - weaCloTim - weaHDirNor - weaSolTim - - - - - - weaCloTim - weaHDirNor - weaSolTim - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - weaCloTim - weaSolTim - - - - - - weaCloTim - weaSolTim - - - - - - - - - - - - - - - - - - weaPAtm - - - - - - weaTDewPoi - - - - - - weaTDryBul - - - - - - weaRelHum - - - - - - weaNOpa - - - - - - weaCelHei - - - - - - weaNTot - - - - - - weaWinSpe - - - - - - weaWinDir - - - - - - weaHHorIR - - - - - - weaHDirNor - - - - - - weaHGloHor - - - - - - weaHDifHor - - - - - - weaTBlaSky - - - - - - weaTWetBul - - - - - - weaCloTim - - - - - - weaSolTim - - - - - - weaSolZen - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - conHeat_wes - - - - - - conHeat_hal - - - - - - conHeat_eas - - - - - - conHeat_eas - conHeat_hal - conHeat_wes - - - - - - - - - diff --git a/resources/internal/.fuse_hidden000007b700000003 b/resources/internal/.fuse_hidden000007b700000003 deleted file mode 100755 index 7900ecc..0000000 --- a/resources/internal/.fuse_hidden000007b700000003 +++ /dev/null @@ -1,746 +0,0 @@ -Time,intRad_wes,intCon_wes,intLat_wes,intRad_eas,intCon_eas,intLat_eas,intRad_hal,intCon_hal,intLat_hal -01/01/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/01/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/01/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/01/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/01/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/01/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/01/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/01/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/01/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/01/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/01/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/01/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/01/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/01/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/01/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/01/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/01/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/01/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/01/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/01/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/01/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/01/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/01/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/01/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/02/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/02/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/02/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/02/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/02/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/02/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/02/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/02/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/02/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/02/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/02/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/02/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/02/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/02/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/02/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/02/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/02/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/02/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/02/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/02/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/02/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/02/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/02/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/02/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/03/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/03/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/03/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/03/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/03/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/03/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/03/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/03/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/03/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/03/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/03/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/03/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/03/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/03/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/03/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/03/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/03/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/03/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/03/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/03/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/03/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/03/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/03/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/03/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/04/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/04/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/04/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/04/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/04/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/04/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/04/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/04/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/04/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/04/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/04/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/04/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/04/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/04/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/04/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/04/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/04/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/04/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/04/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/04/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/04/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/04/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/04/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/04/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/05/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/05/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/05/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/05/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/05/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/05/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/05/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/05/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/05/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/05/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/05/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/05/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/05/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/05/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/05/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/05/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/05/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/05/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/05/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/05/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/05/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/05/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/05/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/05/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/06/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/06/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/06/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/06/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/06/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/06/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/06/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/06/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/06/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/06/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/06/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/06/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/06/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/06/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/06/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/06/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/06/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/06/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/06/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/06/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/06/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/06/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/06/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/06/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/07/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/07/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/07/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/07/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/07/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/07/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/07/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/07/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/07/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/07/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/07/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/07/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/07/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/07/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/07/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/07/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/07/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/07/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/07/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/07/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/07/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/07/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/07/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/07/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/08/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/08/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/08/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/08/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/08/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/08/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/08/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/08/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/08/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/08/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/08/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/08/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/08/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/08/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/08/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/08/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/08/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/08/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/08/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/08/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/08/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/08/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/08/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/08/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/09/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/09/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/09/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/09/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/09/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/09/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/09/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/09/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/09/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/09/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/09/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/09/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/09/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/09/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/09/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/09/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/09/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/09/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/09/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/09/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/09/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/09/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/09/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/09/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/10/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/10/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/10/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/10/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/10/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/10/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/10/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/10/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/10/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/10/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/10/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/10/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/10/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/10/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/10/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/10/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/10/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/10/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/10/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/10/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/10/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/10/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/10/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/10/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/11/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/11/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/11/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/11/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/11/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/11/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/11/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/11/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/11/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/11/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/11/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/11/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/11/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/11/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/11/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/11/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/11/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/11/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/11/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/11/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/11/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/11/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/11/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/11/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/12/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/12/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/12/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/12/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/12/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/12/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/12/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/12/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/12/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/12/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/12/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/12/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/12/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/12/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/12/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/12/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/12/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/12/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/12/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/12/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/12/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/12/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/12/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/12/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/13/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/13/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/13/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/13/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/13/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/13/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/13/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/13/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/13/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/13/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/13/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/13/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/13/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/13/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/13/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/13/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/13/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/13/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/13/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/13/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/13/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/13/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/13/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/13/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/14/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/14/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/14/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/14/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/14/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/14/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/14/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/14/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/14/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/14/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/14/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/14/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/14/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/14/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/14/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/14/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/14/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/14/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/14/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/14/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/14/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/14/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/14/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/14/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/15/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/15/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/15/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/15/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/15/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/15/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/15/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/15/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/15/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/15/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/15/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/15/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/15/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/15/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/15/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/15/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/15/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/15/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/15/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/15/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/15/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/15/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/15/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/15/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/16/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/16/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/16/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/16/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/16/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/16/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/16/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/16/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/16/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/16/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/16/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/16/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/16/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/16/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/16/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/16/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/16/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/16/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/16/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/16/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/16/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/16/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/16/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/16/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/17/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/17/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/17/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/17/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/17/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/17/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/17/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/17/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/17/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/17/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/17/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/17/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/17/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/17/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/17/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/17/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/17/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/17/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/17/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/17/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/17/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/17/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/17/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/17/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/18/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/18/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/18/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/18/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/18/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/18/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/18/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/18/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/18/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/18/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/18/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/18/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/18/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/18/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/18/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/18/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/18/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/18/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/18/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/18/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/18/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/18/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/18/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/18/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/19/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/19/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/19/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/19/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/19/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/19/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/19/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/19/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/19/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/19/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/19/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/19/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/19/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/19/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/19/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/19/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/19/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/19/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/19/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/19/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/19/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/19/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/19/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/19/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/20/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/20/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/20/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/20/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/20/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/20/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/20/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/20/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/20/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/20/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/20/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/20/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/20/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/20/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/20/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/20/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/20/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/20/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/20/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/20/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/20/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/20/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/20/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/20/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/21/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/21/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/21/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/21/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/21/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/21/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/21/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/21/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/21/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/21/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/21/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/21/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/21/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/21/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/21/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/21/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/21/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/21/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/21/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/21/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/21/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/21/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/21/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/21/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/22/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/22/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/22/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/22/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/22/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/22/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/22/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/22/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/22/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/22/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/22/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/22/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/22/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/22/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/22/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/22/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/22/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/22/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/22/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/22/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/22/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/22/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/22/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/22/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/23/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/23/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/23/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/23/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/23/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/23/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/23/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/23/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/23/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/23/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/23/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/23/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/23/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/23/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/23/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/23/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/23/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/23/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/23/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/23/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/23/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/23/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/23/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/23/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/24/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/24/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/24/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/24/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/24/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/24/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/24/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/24/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/24/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/24/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/24/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/24/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/24/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/24/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/24/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/24/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/24/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/24/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/24/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/24/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/24/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/24/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/24/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/24/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/25/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/25/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/25/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/25/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/25/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/25/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/25/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/25/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/25/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/25/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/25/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/25/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/25/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/25/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/25/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/25/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/25/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/25/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/25/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/25/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/25/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/25/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/25/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/25/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/26/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/26/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/26/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/26/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/26/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/26/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/26/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/26/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/26/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/26/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/26/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/26/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/26/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/26/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/26/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/26/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/26/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/26/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/26/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/26/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/26/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/26/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/26/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/26/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/27/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/27/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/27/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/27/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/27/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/27/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/27/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/27/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/27/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/27/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/27/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/27/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/27/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/27/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/27/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/27/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/27/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/27/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/27/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/27/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/27/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/27/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/27/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/27/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/28/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/28/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/28/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/28/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/28/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/28/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/28/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/28/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/28/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/28/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/28/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/28/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/28/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/28/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/28/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/28/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/28/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/28/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/28/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/28/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/28/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/28/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/28/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/28/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/29/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/29/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/29/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/29/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/29/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/29/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/29/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/29/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/29/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/29/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/29/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/29/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/29/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/29/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/29/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/29/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/29/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/29/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/29/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/29/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/29/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/29/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/29/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/29/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/30/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/30/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/30/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/30/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/30/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/30/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/30/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/30/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/30/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/30/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/30/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/30/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/30/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/30/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/30/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/30/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/30/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/30/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/30/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/30/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/30/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/30/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/30/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/30/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/31/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/31/2015 01:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/31/2015 02:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/31/2015 03:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/31/2015 04:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/31/2015 05:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/31/2015 06:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/31/2015 07:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/31/2015 08:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/31/2015 09:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/31/2015 10:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/31/2015 11:00:00,7.2,7.2,3.6,7.2,7.2,3.6,0.8,0.8,0.4 -01/31/2015 12:00:00,6.4,6.4,3.2,6.4,6.4,3.2,0.8,0.8,0.4 -01/31/2015 13:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/31/2015 14:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/31/2015 15:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/31/2015 16:00:00,8,8,4,8,8,4,0.8,0.8,0.4 -01/31/2015 17:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/31/2015 18:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/31/2015 19:00:00,0.8,0.8,0.4,0.8,0.8,0.4,0.4,0.4,0.2 -01/31/2015 20:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/31/2015 21:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/31/2015 22:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -01/31/2015 23:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 -02/01/2015 00:00:00,0.4,0.4,0.2,0.4,0.4,0.2,0.4,0.4,0.2 diff --git a/resources/model/.FMUOutput/binaries/linux32/FmuExamples_ValveStuck_0dhb.so b/resources/model/.FMUOutput/binaries/linux32/FmuExamples_ValveStuck_0dhb.so deleted file mode 100755 index 2c9d197..0000000 Binary files a/resources/model/.FMUOutput/binaries/linux32/FmuExamples_ValveStuck_0dhb.so and /dev/null differ diff --git a/resources/model/.FMUOutput/binaries/linux64/FmuExamples_ValveStuck_0dhb.so b/resources/model/.FMUOutput/binaries/linux64/FmuExamples_ValveStuck_0dhb.so deleted file mode 100755 index d452e39..0000000 Binary files a/resources/model/.FMUOutput/binaries/linux64/FmuExamples_ValveStuck_0dhb.so and /dev/null differ diff --git a/resources/model/.FMUOutput/dsmodel.o b/resources/model/.FMUOutput/dsmodel.o deleted file mode 100755 index 0ac5cad..0000000 Binary files a/resources/model/.FMUOutput/dsmodel.o and /dev/null differ diff --git a/resources/model/.FMUOutput/dsmodel_fmuconf.h b/resources/model/.FMUOutput/dsmodel_fmuconf.h deleted file mode 100755 index d20bf45..0000000 --- a/resources/model/.FMUOutput/dsmodel_fmuconf.h +++ /dev/null @@ -1 +0,0 @@ -/* file for enabling result storing in FMU */ diff --git a/resources/model/.FMUOutput/fmiFunctions.o b/resources/model/.FMUOutput/fmiFunctions.o deleted file mode 100755 index b8217d7..0000000 Binary files a/resources/model/.FMUOutput/fmiFunctions.o and /dev/null differ diff --git a/resources/model/.FMUOutput/fmiModelIdentifier.h b/resources/model/.FMUOutput/fmiModelIdentifier.h deleted file mode 100755 index c0bbdff..0000000 --- a/resources/model/.FMUOutput/fmiModelIdentifier.h +++ /dev/null @@ -1 +0,0 @@ -#define MODEL_IDENTIFIER FmuExamples_ValveStuck_0dhb diff --git a/resources/model/.FMUOutput/fmu.map b/resources/model/.FMUOutput/fmu.map deleted file mode 100755 index 9aed3f6..0000000 --- a/resources/model/.FMUOutput/fmu.map +++ /dev/null @@ -1,49 +0,0 @@ -# version script generated during FMU export and used when building shared object - -FmuExamples_ValveStuck_0dhb { - - global: - # FMI 1 - FmuExamples_ValveStuck_0dhb_fmiGetVersion; - FmuExamples_ValveStuck_0dhb_fmiSetDebugLogging; - FmuExamples_ValveStuck_0dhb_fmiGetReal; - FmuExamples_ValveStuck_0dhb_fmiGetInteger; - FmuExamples_ValveStuck_0dhb_fmiGetBoolean; - FmuExamples_ValveStuck_0dhb_fmiGetString; - FmuExamples_ValveStuck_0dhb_fmiSetReal; - FmuExamples_ValveStuck_0dhb_fmiSetInteger; - FmuExamples_ValveStuck_0dhb_fmiSetBoolean; - FmuExamples_ValveStuck_0dhb_fmiSetString; - FmuExamples_ValveStuck_0dhb_fmiGetModelTypesPlatform; - FmuExamples_ValveStuck_0dhb_fmiInstantiateModel; - FmuExamples_ValveStuck_0dhb_fmiFreeModelInstance; - FmuExamples_ValveStuck_0dhb_fmiSetTime; - FmuExamples_ValveStuck_0dhb_fmiSetContinuousStates; - FmuExamples_ValveStuck_0dhb_fmiInitialize; - FmuExamples_ValveStuck_0dhb_fmiEventUpdate; - FmuExamples_ValveStuck_0dhb_fmiCompletedIntegratorStep; - FmuExamples_ValveStuck_0dhb_fmiTerminate; - FmuExamples_ValveStuck_0dhb_fmiGetDerivatives; - FmuExamples_ValveStuck_0dhb_fmiGetEventIndicators; - FmuExamples_ValveStuck_0dhb_fmiGetContinuousStates; - FmuExamples_ValveStuck_0dhb_fmiGetNominalContinuousStates; - FmuExamples_ValveStuck_0dhb_fmiGetStateValueReferences; - FmuExamples_ValveStuck_0dhb_fmiGetTypesPlatform; - FmuExamples_ValveStuck_0dhb_fmiInstantiateSlave; - FmuExamples_ValveStuck_0dhb_fmiFreeSlaveInstance; - FmuExamples_ValveStuck_0dhb_fmiInitializeSlave; - FmuExamples_ValveStuck_0dhb_fmiTerminateSlave; - FmuExamples_ValveStuck_0dhb_fmiResetSlave; - FmuExamples_ValveStuck_0dhb_fmiSetRealInputDerivatives; - FmuExamples_ValveStuck_0dhb_fmiGetRealOutputDerivatives; - FmuExamples_ValveStuck_0dhb_fmiDoStep; - FmuExamples_ValveStuck_0dhb_fmiCancelStep; - FmuExamples_ValveStuck_0dhb_fmiGetStatus; - FmuExamples_ValveStuck_0dhb_fmiGetRealStatus; - FmuExamples_ValveStuck_0dhb_fmiGetIntegerStatus; - FmuExamples_ValveStuck_0dhb_fmiGetBooleanStatus; - FmuExamples_ValveStuck_0dhb_fmiGetStringStatus; - - local: - *; -}; diff --git a/resources/model/.FMUOutput/matrixop.o b/resources/model/.FMUOutput/matrixop.o deleted file mode 100755 index 9b0d063..0000000 Binary files a/resources/model/.FMUOutput/matrixop.o and /dev/null differ diff --git a/resources/model/.FMUOutput/modelDescription.xml b/resources/model/.FMUOutput/modelDescription.xml deleted file mode 100755 index a90130d..0000000 --- a/resources/model/.FMUOutput/modelDescription.xml +++ /dev/null @@ -1,1700 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cmd - dp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cmd - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/resources/weather/BuildingsEPWReader.mo b/resources/weather/BuildingsEPWReader.mo deleted file mode 100755 index c9a1728..0000000 --- a/resources/weather/BuildingsEPWReader.mo +++ /dev/null @@ -1,9 +0,0 @@ -within ; -model BuildingsEPWReader - - Buildings.BoundaryConditions.WeatherData.ReaderTMY3 epw(filNam= - "modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos") - "Weather data" - annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); - annotation (uses(Buildings(version="3.0.1"))); -end BuildingsEPWReader; diff --git a/resources/weather/BuildingsEPWReader_log.txt b/resources/weather/BuildingsEPWReader_log.txt deleted file mode 100755 index 3e5be89..0000000 --- a/resources/weather/BuildingsEPWReader_log.txt +++ /dev/null @@ -1 +0,0 @@ -FMIL: module = Model, log level = 2: [INFO][FMU status:Error] FMU is already initialized: only one initialization is allowed diff --git a/resources/weather/BuildingsEPWReader_result.txt b/resources/weather/BuildingsEPWReader_result.txt deleted file mode 100755 index b09e969..0000000 --- a/resources/weather/BuildingsEPWReader_result.txt +++ /dev/null @@ -1,1001 +0,0 @@ -#1 -char Aclass(3,11) -Atrajectory -1.1 - -char name(320,40) -time -epw.epsCos -epw.cheWinSpe.winSpeMin -epw.chePre.PMin -epw.chePre.PMax -epw.cheTotSkyCov.delta -epw.cheRelHum.delta -epw.cheRelHum.relHumMin -epw.cheTotSkyCov.nMin -epw.cheOpaSkyCov.nMin -epw.cheWinDir.delta -epw.cheOpaSkyCov.delta -epw.cheTotSkyCov.nMax -epw.cheOpaSkyCov.nMax -epw.cheGloHorRad.HMin -epw.cheDifHorRad.HMin -epw.cheDirNorRad.HMin -epw.cheHorRad.HMin -epw.cheCeiHei.ceiHeiMin -epw.tWetBul_TDryBulXi.rh_per -epw.tWetBul_TDryBulXi.TDryBul_degC -epw.cheWinDir.nMin -epw.cheWinDir.nMax -epw.add.u1 -epw.con30mins.y -epw.conTim1.year -epw.conTim.year -epw.conHorRad.Hou -epw.conDifHorRad.Hou -epw.conGloHorRad.Hou -epw.conDirNorRad.Hou -epw.cheRelHum.relHumMax -epw.decAng.k1 -epw.decAng.k2 -epw.pAtm -epw.ceiHei -epw.totSkyCov -epw.opaSkyCov -epw.TDryBul -epw.TDewPoi -epw.TBlaSky -epw.relHum -epw.winSpe -epw.winDir -epw.HInfHor -epw.cheTemDryBul.TMin -epw.cheTemDryBul.TMax -epw.cheTemDewPoi.TMin -epw.cheTemDewPoi.TMax -epw.add.k1 -epw.add.k2 -epw.cheTemBlaSky.TMin -epw.cheTemBlaSky.TMax -_block_jacobian_check_tol -_cs_rel_tol -_cs_step_size -_events_default_tol -_events_tol_factor -_nle_jacobian_finite_difference_delta -_nle_solver_default_tol -_nle_solver_max_residual_scaling_factor -_nle_solver_min_residual_scaling_factor -_nle_solver_min_tol -_nle_solver_regularization_tolerance -_nle_solver_step_limit_factor -_nle_solver_tol_factor -epw.lon -epw.longitude.y -epw.locTim.lon -epw.longitude.longitude -epw.weaBus.lon -epw.lat -epw.zenAng.lat -epw.latitude.latitude -epw.latitude.y -epw.weaBus.lat -epw.timZon -epw.locTim.timZon -epw.con30mins.k -epw.locTim.diff -epw.conTotSkyCov.k -epw.conOpaSkyCov.k -epw.datRea.tableOnFileRead -epw.datRea1.tableOnFileRead -epw.pAtm_in_internal -epw.chePre.POut -epw.chePre.PIn -epw.tWetBul_TDryBulXi.p -epw.weaBus.pAtm -epw.datRea.y[4] -epw.datRea.y[5] -epw.datRea.y[6] -epw.datRea.y[7] -epw.datRea.y[8] -epw.datRea.y[9] -epw.datRea.y[10] -epw.datRea.y[15] -epw.datRea.y[17] -epw.datRea.y[18] -epw.datRea.y[19] -epw.datRea.y[20] -epw.datRea.y[21] -epw.datRea.y[22] -epw.datRea.y[23] -epw.datRea.y[24] -epw.datRea.y[25] -epw.conRelHum.relHumIn -epw.datRea.y[3] -epw.cheTotSkyCov.nOut -epw.weaBus.nTot -epw.cheGloHorRad.HOut -epw.weaBus.HGloHor -epw.cheDifHorRad.HOut -epw.weaBus.HDifHor -epw.cheDirNorRad.HOut -epw.weaBus.HDirNor -epw.cheCeiHei.ceiHeiOut -epw.weaBus.celHei -epw.cheWinSpe.winSpeOut -epw.weaBus.winSpe -epw.cheWinDir.nOut -epw.weaBus.winDir -epw.TBlaSkyCom.nOpa -epw.weaBus.nOpa -epw.cheOpaSkyCov.nOut -epw.TBlaSkyCom.HHorIR -epw.weaBus.HHorIR -epw.cheHorRad.HOut -epw.TBlaSkyCom.TDewPoiK -epw.TBlaSkyCom.epsSky -epw.TBlaSkyCom.nOpa10 -epw.add.u2 -epw.modTim.y -epw.locTim.cloTim -epw.decAng.nDay -epw.conTim.modTim -epw.eqnTim.nDay -epw.weaBus.cloTim -epw.add.y -epw.conTim1.modTim -epw.locTim.locTim -epw.solTim.locTim -epw.conTim1.calTim -epw.datRea1.u -epw.conTim.calTim -epw.datRea.u -epw.eqnTim.eqnTim -epw.solTim.equTim -epw.eqnTim.Bt -epw.ceiHei_in_internal -epw.datRea.y[16] -epw.cheCeiHei.ceiHeiIn -epw.totSkyCov_in_internal -epw.cheTotSkyCov.nIn -epw.conTotSkyCov.y -epw.opaSkyCov_in_internal -epw.conOpaSkyCov.y -epw.cheOpaSkyCov.nIn -epw.TDewPoi_in_internal -epw.conTDewPoi.y -epw.cheTemDewPoi.TOut -epw.weaBus.TDewPoi -epw.TBlaSkyCom.TDewPoi -epw.cheTemDewPoi.TIn -epw.TBlaSky_in_internal -epw.weaBus.TBlaSky -epw.cheTemBlaSky.TOut -epw.TBlaSkyCom.TBlaSky -epw.cheTemBlaSky.TIn -epw.relHum_in_internal -epw.conRelHum.relHumOut -epw.cheRelHum.relHumIn -epw.winSpe_in_internal -epw.cheWinSpe.winSpeIn -epw.datRea.y[12] -epw.winDir_in_internal -epw.cheWinDir.nIn -epw.conWinDir.y -epw.HGloHor_in_internal -epw.datRea1.y[2] -epw.conGloHorRad.HOut -epw.conGloHorRad.HIn -epw.cheGloHorRad.HIn -epw.HDifHor_in_internal -epw.cheDifHorRad.HIn -epw.conDifHorRad.HIn -epw.conDifHorRad.HOut -epw.datRea1.y[4] -epw.HDirNor_in_internal -epw.cheDirNorRad.HIn -epw.conDirNorRad.HIn -epw.conDirNorRad.HOut -epw.datRea1.y[3] -epw.HInfHor_in_internal -epw.conHorRad.HIn -epw.cheHorRad.HIn -epw.datRea1.y[1] -epw.conHorRad.HOut -epw.conWinDir.u -epw.datRea.y[11] -epw.conTDryBul.u -epw.datRea.y[1] -epw.conTDewPoi.u -epw.datRea.y[2] -epw.cheRelHum.relHumOut -epw.weaBus.relHum -epw.tWetBul_TDryBulXi.phi -epw.altAng.zen -epw.zenAng.zen -epw.weaBus.solZen -epw.altAng.alt -epw.weaBus.solAlt -epw.decAng.decAng -epw.zenAng.decAng -epw.weaBus.solDec -epw.solHouAng.solTim -epw.weaBus.solTim -epw.solTim.solTim -epw.solHouAng.solHouAng -epw.zenAng.solHouAng -epw.weaBus.solHouAng -epw.tWetBul_TDryBulXi.TDryBul -epw.TBlaSkyCom.TDryBul -epw.conTDryBul.y -epw.cheTemDryBul.TIn -epw.TDryBul_in_internal -epw.cheTemDryBul.TOut -epw.weaBus.TDryBul -epw.tWetBul_TDryBulXi.TWetBul -epw.weaBus.TWetBul -epw.tWetBul_TDryBulXi.XiDryBul -epw.tWetBul_TDryBulXi.XiSat -epw.conTotSkyCov.u -epw.datRea.y[13] -epw.conOpaSkyCov.u -epw.datRea.y[14] -epw.conTim1.tStart -epw.conTim.tStart -_block_solver_experimental_mode -_cs_experimental_mode -_cs_solver -_iteration_variable_scaling -_log_level -_nle_active_bounds_mode -_nle_jacobian_calculation_mode -_nle_jacobian_update_mode -_nle_solver_exit_criterion -_nle_solver_max_iter -_nle_solver_max_iter_no_jacobian -_residual_equation_scaling -epw.datRea.columns[1] -epw.datRea.columns[2] -epw.datRea.columns[3] -epw.datRea1.nout -epw.datRea.columns[4] -epw.datRea.columns[5] -epw.datRea.columns[6] -epw.datRea1.columns[4] -epw.datRea.columns[7] -epw.datRea.columns[8] -epw.datRea.columns[9] -epw.datRea.columns[10] -epw.datRea.columns[11] -epw.datRea.columns[12] -epw.datRea.columns[13] -epw.datRea.columns[14] -epw.datRea.columns[15] -epw.datRea.columns[16] -epw.datRea.columns[17] -epw.datRea.columns[18] -epw.datRea.columns[19] -epw.datRea.columns[20] -epw.datRea.nout -epw.datRea.columns[21] -epw.datRea.columns[22] -epw.datRea.columns[23] -epw.datRea.columns[24] -epw.datRea.columns[25] -epw.datRea1.columns[1] -epw.datRea1.columns[2] -epw.datRea1.columns[3] -epw.pAtmSou -epw.ceiHeiSou -epw.totSkyCovSou -epw.HInfHorSou -epw.winDirSou -epw.relHumSou -epw.TBlaSkySou -epw.winSpeSou -epw.TDryBulSou -epw.TDewPoiSou -epw.opaSkyCovSou -epw.HSou -epw.calTSky -epw.TBlaSkyCom.calTSky -epw.datRea.smoothness -epw.datRea1.smoothness -temp_1 -temp_2 -epw.datRea.verboseRead -epw.datRea1.verboseRead -_block_jacobian_check -_block_solver_profiling -_enforce_bounds -_nle_brent_ignore_error -_nle_solver_check_jac_cond -_nle_solver_use_last_integrator_step -_nle_solver_use_nominals_as_fallback -_rescale_after_singular_jac -_rescale_each_step -_runtime_log_to_file -_use_Brent_in_1d -_use_jacobian_equilibration -_use_newton_for_brent -epw.computeWetBulbTemperature -epw.datRea1.tableOnFile -epw.datRea.tableOnFile -epw.tWetBul_TDryBulXi.approximateWetBulb -temp_3 -temp_4 - -char description(320,73) -Time in [s] -Small value to avoid division by 0 -Minimum allowed wind speed -Minimum allowed pressure -Maximum allowed pressure -Smoothing parameter -Smoothing parameter -Lower bound -Lower bound -Lower bound -Smoothing parameter -Smoothing parameter -Upper bound -Upper bound -Minimum value for radiation -Minimum value for radiation -Minimum value for radiation -Minimum value for radiation -Minimum allowed ceiling height -Relative humidity in percentage -Dry bulb temperature in degree Celsius -Lower bound -Upper bound -Connector of Real input signal 1 -Connector of Real output signal -Number of seconds in a year -Number of seconds in a year -1 hour -1 hour -1 hour -1 hour -Upper bound -Constant -Constant -Atmospheric pressure (used if pAtmSou=Parameter) -Ceiling height (used if ceiHei=Parameter) -Total sky cover (used if totSkyCov=Parameter). Use 0 <= totSkyCov <= 1 -Opaque sky cover (used if opaSkyCov=Parameter). Use 0 <= opaSkyCov <= 1 -Dry bulb temperature (used if TDryBul=Parameter) -Dew point temperature (used if TDewPoi=Parameter) -Black-body sky temperature (used if TBlaSkySou=Parameter) -Relative humidity (used if relHum=Parameter) -Wind speed (used if winSpe=Parameter) -Wind direction (used if winDir=Parameter) -Infrared horizontal radiation (used if HInfHorSou=Parameter) -Minimum allowed temperature -Maximum allowed temperature -Minimum allowed temperature -Maximum allowed temperature -Gain of upper input -Gain of lower input -Minimum allowed temperature -Maximum allowed temperature - - - - - - - - - - - - - -Longitude -Longitude of the location -Longitude -Longitude -Longitude of the location -Latitude -Latitude -Latitude -Latitude of the location -Latitude of the location -Time zone -Time zone -Constant output value -Difference between local and clock time -Gain value multiplied with input signal -Gain value multiplied with input signal -= 1, if table was successfully read from file -= 1, if table was successfully read from file -Needed to connect to conditional connector -Atmospheric pressure -Input pressure -Pressure -Atmospheric pressure -Connector of Real output signals -Connector of Real output signals -Connector of Real output signals -Connector of Real output signals -Connector of Real output signals -Connector of Real output signals -Connector of Real output signals -Connector of Real output signals -Connector of Real output signals -Connector of Real output signals -Connector of Real output signals -Connector of Real output signals -Connector of Real output signals -Connector of Real output signals -Connector of Real output signals -Connector of Real output signals -Connector of Real output signals -Value of relative humidity in percentage -Connector of Real output signals -Sky cover [0, 1] -Sky cover [0, 1] -Radiation -Radiation -Radiation -Radiation -Radiation -Radiation -Ceiling height -Ceiling height -Wind speed -Wind speed -Wind direction -Wind direction -Opaque sky cover [0, 1] -Sky cover [0, 1] -Sky cover [0, 1] -Horizontal infrared irradiation -Horizontal infrared irradiation -Horizontal infrared irradiation -Dewpoint temperature -Black-body absorptivity of sky -Opaque sky cover in [0, 10] -Connector of Real input signal 2 -Connector of Real output signal -Clock time -Day number with units of seconds -Simulation time -Zero-based day number in seconds (January 1=0, January 2=86400) -Connector of Real output signal -Connector of Real output signal -Simulation time -Local civil time -Local time -Calendar time -Connector of Real input signal -Calendar time -Connector of Real input signal -Equation of time -Equation of time -Intermediate variable -Needed to connect to conditional connector -Connector of Real output signals -Input ceiling height -Needed to connect to conditional connector -Input sky cover [0, 10] -Output signal connector -Needed to connect to conditional connector -Output signal connector -Input sky cover [0, 10] -Needed to connect to conditional connector -Connector of Real output signal containing input signal u in another unit -Output temperature -Output temperature -Dew point temperature -Input Temperature -Needed to connect to conditional connector -Black-body sky temperature -Black-body sky temperature -Black-body sky temperature -Black-body sky temperature -Needed to connect to conditional connector -Relative humidity between 0 and 1 -Input relative humidity -Needed to connect to conditional connector -Input wind speed -Connector of Real output signals -Needed to connect to conditional connector -Input wind direction -Connector of Real output signal containing input signal u in another unit -Needed to connect to conditional connector -Connector of Real output signals -Radiation -Input radiation -Input radiation -Needed to connect to conditional connector -Input radiation -Input radiation -Radiation -Connector of Real output signals -Needed to connect to conditional connector -Input radiation -Input radiation -Radiation -Connector of Real output signals -Needed to connect to conditional connector -Input radiation -Input horizontal infrared irradiation -Connector of Real output signals -Radiation -Connector of Real input signal to be converted -Connector of Real output signals -Connector of Real input signal to be converted -Connector of Real output signals -Connector of Real input signal to be converted -Connector of Real output signals -Relative humidity -Relative humidity -Relative air humidity -Zenith angle -Zenith angle -Zenith angle -Solar altitude angle -Solar altitude angle -Solar declination angle -Solar declination angle -Solar declination angle -Solar time -Solar time -Solar time -Solar hour angle -Solar hour angle -Solar hour angle -Dry bulb temperature -Dry bulb temperature at ground level -Connector of Real output signal containing input signal u in another unit -Input Temperature -Needed to connect to conditional connector -Output temperature -Output temperature -Wet bulb temperature -Wet bulb temperature -Water vapor mass fraction at dry bulb state -Water vapor mass fraction at saturation -Input signal connector -Connector of Real output signals -Input signal connector -Connector of Real output signals -Start time of period -Start time of period - - - - - - - - - - - - -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Number of outputs -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Number of outputs -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Columns of table to be interpolated -Atmospheric pressure -Ceiling height -Total sky cover -Infrared horizontal radiation -Wind direction -Relative humidity -Black-body sky temperature -Wind speed -Dry bulb temperature -Dew point temperature -Opaque sky cover -Global, diffuse, and direct normal radiation -Computation of black-body sky temperature -Computation of black-body sky temperature -Smoothness of table interpolation -Smoothness of table interpolation - - -= true, if info message that file is loading is to be printed -= true, if info message that file is loading is to be printed - - - - - - - - - - - - - -If true, then this model computes the wet bulb temperature -= true, if table is defined on file or in function usertab -= true, if table is defined on file or in function usertab -Set to true to approximate wet bulb temperature - - - -int dataInfo(320,4) -0 1 0 -1 # time -1 2 0 -1 # epw.epsCos -1 2 0 -1 # epw.cheWinSpe.winSpeMin -1 3 0 -1 # epw.chePre.PMin -1 4 0 -1 # epw.chePre.PMax -1 5 0 -1 # epw.cheTotSkyCov.delta -1 5 0 -1 # epw.cheRelHum.delta -1 5 0 -1 # epw.cheRelHum.relHumMin -1 5 0 -1 # epw.cheTotSkyCov.nMin -1 5 0 -1 # epw.cheOpaSkyCov.nMin -1 5 0 -1 # epw.cheWinDir.delta -1 5 0 -1 # epw.cheOpaSkyCov.delta -1 6 0 -1 # epw.cheTotSkyCov.nMax -1 6 0 -1 # epw.cheOpaSkyCov.nMax -1 7 0 -1 # epw.cheGloHorRad.HMin -1 7 0 -1 # epw.cheDifHorRad.HMin -1 7 0 -1 # epw.cheDirNorRad.HMin -1 7 0 -1 # epw.cheHorRad.HMin -1 8 0 -1 # epw.cheCeiHei.ceiHeiMin -1 8 0 -1 # epw.tWetBul_TDryBulXi.rh_per -1 8 0 -1 # epw.tWetBul_TDryBulXi.TDryBul_degC -1 8 0 -1 # epw.cheWinDir.nMin -1 9 0 -1 # epw.cheWinDir.nMax -1 10 0 -1 # epw.add.u1 -1 10 0 -1 # epw.con30mins.y -1 11 0 -1 # epw.conTim1.year -1 11 0 -1 # epw.conTim.year -1 12 0 -1 # epw.conHorRad.Hou -1 12 0 -1 # epw.conDifHorRad.Hou -1 12 0 -1 # epw.conGloHorRad.Hou -1 12 0 -1 # epw.conDirNorRad.Hou -1 13 0 -1 # epw.cheRelHum.relHumMax -1 14 0 -1 # epw.decAng.k1 -1 15 0 -1 # epw.decAng.k2 -1 16 0 -1 # epw.pAtm -1 17 0 -1 # epw.ceiHei -1 18 0 -1 # epw.totSkyCov -1 19 0 -1 # epw.opaSkyCov -1 20 0 -1 # epw.TDryBul -1 21 0 -1 # epw.TDewPoi -1 22 0 -1 # epw.TBlaSky -1 23 0 -1 # epw.relHum -1 24 0 -1 # epw.winSpe -1 25 0 -1 # epw.winDir -1 26 0 -1 # epw.HInfHor -1 27 0 -1 # epw.cheTemDryBul.TMin -1 28 0 -1 # epw.cheTemDryBul.TMax -1 29 0 -1 # epw.cheTemDewPoi.TMin -1 30 0 -1 # epw.cheTemDewPoi.TMax -1 31 0 -1 # epw.add.k1 -1 32 0 -1 # epw.add.k2 -1 33 0 -1 # epw.cheTemBlaSky.TMin -1 34 0 -1 # epw.cheTemBlaSky.TMax -1 35 0 -1 # _block_jacobian_check_tol -1 36 0 -1 # _cs_rel_tol -1 37 0 -1 # _cs_step_size -1 38 0 -1 # _events_default_tol -1 39 0 -1 # _events_tol_factor -1 40 0 -1 # _nle_jacobian_finite_difference_delta -1 41 0 -1 # _nle_solver_default_tol -1 42 0 -1 # _nle_solver_max_residual_scaling_factor -1 43 0 -1 # _nle_solver_min_residual_scaling_factor -1 44 0 -1 # _nle_solver_min_tol -1 45 0 -1 # _nle_solver_regularization_tolerance -1 46 0 -1 # _nle_solver_step_limit_factor -1 47 0 -1 # _nle_solver_tol_factor -1 48 0 -1 # epw.lon -1 48 0 -1 # epw.longitude.y -1 48 0 -1 # epw.locTim.lon -1 48 0 -1 # epw.longitude.longitude -1 48 0 -1 # epw.weaBus.lon -1 49 0 -1 # epw.lat -1 49 0 -1 # epw.zenAng.lat -1 49 0 -1 # epw.latitude.latitude -1 49 0 -1 # epw.latitude.y -1 49 0 -1 # epw.weaBus.lat -1 50 0 -1 # epw.timZon -1 50 0 -1 # epw.locTim.timZon -1 51 0 -1 # epw.con30mins.k -1 52 0 -1 # epw.locTim.diff -1 53 0 -1 # epw.conTotSkyCov.k -1 53 0 -1 # epw.conOpaSkyCov.k -1 54 0 -1 # epw.datRea.tableOnFileRead -1 55 0 -1 # epw.datRea1.tableOnFileRead -1 56 0 -1 # epw.pAtm_in_internal -1 57 0 -1 # epw.chePre.POut -1 58 0 -1 # epw.chePre.PIn -1 59 0 -1 # epw.tWetBul_TDryBulXi.p -1 60 0 -1 # epw.weaBus.pAtm -2 2 0 -1 # epw.datRea.y[4] -2 3 0 -1 # epw.datRea.y[5] -2 4 0 -1 # epw.datRea.y[6] -2 5 0 -1 # epw.datRea.y[7] -2 6 0 -1 # epw.datRea.y[8] -2 7 0 -1 # epw.datRea.y[9] -2 8 0 -1 # epw.datRea.y[10] -2 9 0 -1 # epw.datRea.y[15] -2 10 0 -1 # epw.datRea.y[17] -2 11 0 -1 # epw.datRea.y[18] -2 12 0 -1 # epw.datRea.y[19] -2 13 0 -1 # epw.datRea.y[20] -2 14 0 -1 # epw.datRea.y[21] -2 15 0 -1 # epw.datRea.y[22] -2 16 0 -1 # epw.datRea.y[23] -2 17 0 -1 # epw.datRea.y[24] -2 18 0 -1 # epw.datRea.y[25] -2 19 0 -1 # epw.conRelHum.relHumIn -2 19 0 -1 # epw.datRea.y[3] -2 20 0 -1 # epw.cheTotSkyCov.nOut -2 20 0 -1 # epw.weaBus.nTot -2 21 0 -1 # epw.cheGloHorRad.HOut -2 21 0 -1 # epw.weaBus.HGloHor -2 22 0 -1 # epw.cheDifHorRad.HOut -2 22 0 -1 # epw.weaBus.HDifHor -2 23 0 -1 # epw.cheDirNorRad.HOut -2 23 0 -1 # epw.weaBus.HDirNor -2 24 0 -1 # epw.cheCeiHei.ceiHeiOut -2 24 0 -1 # epw.weaBus.celHei -2 25 0 -1 # epw.cheWinSpe.winSpeOut -2 25 0 -1 # epw.weaBus.winSpe -2 26 0 -1 # epw.cheWinDir.nOut -2 26 0 -1 # epw.weaBus.winDir -2 27 0 -1 # epw.TBlaSkyCom.nOpa -2 27 0 -1 # epw.weaBus.nOpa -2 27 0 -1 # epw.cheOpaSkyCov.nOut -2 28 0 -1 # epw.TBlaSkyCom.HHorIR -2 28 0 -1 # epw.weaBus.HHorIR -2 28 0 -1 # epw.cheHorRad.HOut -2 29 0 -1 # epw.TBlaSkyCom.TDewPoiK -2 30 0 -1 # epw.TBlaSkyCom.epsSky -2 31 0 -1 # epw.TBlaSkyCom.nOpa10 -2 32 0 -1 # epw.add.u2 -2 32 0 -1 # epw.modTim.y -2 32 0 -1 # epw.locTim.cloTim -2 32 0 -1 # epw.decAng.nDay -2 32 0 -1 # epw.conTim.modTim -2 32 0 -1 # epw.eqnTim.nDay -2 32 0 -1 # epw.weaBus.cloTim -2 33 0 -1 # epw.add.y -2 33 0 -1 # epw.conTim1.modTim -2 34 0 -1 # epw.locTim.locTim -2 34 0 -1 # epw.solTim.locTim -2 35 0 -1 # epw.conTim1.calTim -2 35 0 -1 # epw.datRea1.u -2 36 0 -1 # epw.conTim.calTim -2 36 0 -1 # epw.datRea.u -2 37 0 -1 # epw.eqnTim.eqnTim -2 37 0 -1 # epw.solTim.equTim -2 38 0 -1 # epw.eqnTim.Bt -2 39 0 -1 # epw.ceiHei_in_internal -2 39 0 -1 # epw.datRea.y[16] -2 39 0 -1 # epw.cheCeiHei.ceiHeiIn -2 40 0 -1 # epw.totSkyCov_in_internal -2 40 0 -1 # epw.cheTotSkyCov.nIn -2 40 0 -1 # epw.conTotSkyCov.y -2 41 0 -1 # epw.opaSkyCov_in_internal -2 41 0 -1 # epw.conOpaSkyCov.y -2 41 0 -1 # epw.cheOpaSkyCov.nIn -2 42 0 -1 # epw.TDewPoi_in_internal -2 42 0 -1 # epw.conTDewPoi.y -2 42 0 -1 # epw.cheTemDewPoi.TOut -2 42 0 -1 # epw.weaBus.TDewPoi -2 42 0 -1 # epw.TBlaSkyCom.TDewPoi -2 42 0 -1 # epw.cheTemDewPoi.TIn -2 43 0 -1 # epw.TBlaSky_in_internal -2 43 0 -1 # epw.weaBus.TBlaSky -2 43 0 -1 # epw.cheTemBlaSky.TOut -2 43 0 -1 # epw.TBlaSkyCom.TBlaSky -2 43 0 -1 # epw.cheTemBlaSky.TIn -2 44 0 -1 # epw.relHum_in_internal -2 44 0 -1 # epw.conRelHum.relHumOut -2 44 0 -1 # epw.cheRelHum.relHumIn -2 45 0 -1 # epw.winSpe_in_internal -2 45 0 -1 # epw.cheWinSpe.winSpeIn -2 45 0 -1 # epw.datRea.y[12] -2 46 0 -1 # epw.winDir_in_internal -2 46 0 -1 # epw.cheWinDir.nIn -2 46 0 -1 # epw.conWinDir.y -2 47 0 -1 # epw.HGloHor_in_internal -2 47 0 -1 # epw.datRea1.y[2] -2 47 0 -1 # epw.conGloHorRad.HOut -2 47 0 -1 # epw.conGloHorRad.HIn -2 47 0 -1 # epw.cheGloHorRad.HIn -2 48 0 -1 # epw.HDifHor_in_internal -2 48 0 -1 # epw.cheDifHorRad.HIn -2 48 0 -1 # epw.conDifHorRad.HIn -2 48 0 -1 # epw.conDifHorRad.HOut -2 48 0 -1 # epw.datRea1.y[4] -2 49 0 -1 # epw.HDirNor_in_internal -2 49 0 -1 # epw.cheDirNorRad.HIn -2 49 0 -1 # epw.conDirNorRad.HIn -2 49 0 -1 # epw.conDirNorRad.HOut -2 49 0 -1 # epw.datRea1.y[3] -2 50 0 -1 # epw.HInfHor_in_internal -2 50 0 -1 # epw.conHorRad.HIn -2 50 0 -1 # epw.cheHorRad.HIn -2 50 0 -1 # epw.datRea1.y[1] -2 50 0 -1 # epw.conHorRad.HOut -2 51 0 -1 # epw.conWinDir.u -2 51 0 -1 # epw.datRea.y[11] -2 52 0 -1 # epw.conTDryBul.u -2 52 0 -1 # epw.datRea.y[1] -2 53 0 -1 # epw.conTDewPoi.u -2 53 0 -1 # epw.datRea.y[2] -2 54 0 -1 # epw.cheRelHum.relHumOut -2 54 0 -1 # epw.weaBus.relHum -2 54 0 -1 # epw.tWetBul_TDryBulXi.phi -2 55 0 -1 # epw.altAng.zen -2 55 0 -1 # epw.zenAng.zen -2 55 0 -1 # epw.weaBus.solZen -2 56 0 -1 # epw.altAng.alt -2 56 0 -1 # epw.weaBus.solAlt -2 57 0 -1 # epw.decAng.decAng -2 57 0 -1 # epw.zenAng.decAng -2 57 0 -1 # epw.weaBus.solDec -2 58 0 -1 # epw.solHouAng.solTim -2 58 0 -1 # epw.weaBus.solTim -2 58 0 -1 # epw.solTim.solTim -2 59 0 -1 # epw.solHouAng.solHouAng -2 59 0 -1 # epw.zenAng.solHouAng -2 59 0 -1 # epw.weaBus.solHouAng -2 60 0 -1 # epw.tWetBul_TDryBulXi.TDryBul -2 60 0 -1 # epw.TBlaSkyCom.TDryBul -2 60 0 -1 # epw.conTDryBul.y -2 60 0 -1 # epw.cheTemDryBul.TIn -2 60 0 -1 # epw.TDryBul_in_internal -2 60 0 -1 # epw.cheTemDryBul.TOut -2 60 0 -1 # epw.weaBus.TDryBul -2 61 0 -1 # epw.tWetBul_TDryBulXi.TWetBul -2 61 0 -1 # epw.weaBus.TWetBul -2 62 0 -1 # epw.tWetBul_TDryBulXi.XiDryBul -2 63 0 -1 # epw.tWetBul_TDryBulXi.XiSat -2 64 0 -1 # epw.conTotSkyCov.u -2 64 0 -1 # epw.datRea.y[13] -2 65 0 -1 # epw.conOpaSkyCov.u -2 65 0 -1 # epw.datRea.y[14] -2 66 0 -1 # epw.conTim1.tStart -2 67 0 -1 # epw.conTim.tStart -1 61 0 -1 # _block_solver_experimental_mode -1 62 0 -1 # _cs_experimental_mode -1 63 0 -1 # _cs_solver -1 64 0 -1 # _iteration_variable_scaling -1 65 0 -1 # _log_level -1 66 0 -1 # _nle_active_bounds_mode -1 67 0 -1 # _nle_jacobian_calculation_mode -1 68 0 -1 # _nle_jacobian_update_mode -1 69 0 -1 # _nle_solver_exit_criterion -1 70 0 -1 # _nle_solver_max_iter -1 71 0 -1 # _nle_solver_max_iter_no_jacobian -1 72 0 -1 # _residual_equation_scaling -1 73 0 -1 # epw.datRea.columns[1] -1 74 0 -1 # epw.datRea.columns[2] -1 75 0 -1 # epw.datRea.columns[3] -1 75 0 -1 # epw.datRea1.nout -1 76 0 -1 # epw.datRea.columns[4] -1 77 0 -1 # epw.datRea.columns[5] -1 78 0 -1 # epw.datRea.columns[6] -1 78 0 -1 # epw.datRea1.columns[4] -1 79 0 -1 # epw.datRea.columns[7] -1 80 0 -1 # epw.datRea.columns[8] -1 81 0 -1 # epw.datRea.columns[9] -1 82 0 -1 # epw.datRea.columns[10] -1 83 0 -1 # epw.datRea.columns[11] -1 84 0 -1 # epw.datRea.columns[12] -1 85 0 -1 # epw.datRea.columns[13] -1 86 0 -1 # epw.datRea.columns[14] -1 87 0 -1 # epw.datRea.columns[15] -1 88 0 -1 # epw.datRea.columns[16] -1 89 0 -1 # epw.datRea.columns[17] -1 90 0 -1 # epw.datRea.columns[18] -1 91 0 -1 # epw.datRea.columns[19] -1 92 0 -1 # epw.datRea.columns[20] -1 92 0 -1 # epw.datRea.nout -1 93 0 -1 # epw.datRea.columns[21] -1 94 0 -1 # epw.datRea.columns[22] -1 95 0 -1 # epw.datRea.columns[23] -1 96 0 -1 # epw.datRea.columns[24] -1 97 0 -1 # epw.datRea.columns[25] -1 98 0 -1 # epw.datRea1.columns[1] -1 99 0 -1 # epw.datRea1.columns[2] -1 100 0 -1 # epw.datRea1.columns[3] -1 101 0 -1 # epw.pAtmSou -1 102 0 -1 # epw.ceiHeiSou -1 102 0 -1 # epw.totSkyCovSou -1 102 0 -1 # epw.HInfHorSou -1 102 0 -1 # epw.winDirSou -1 102 0 -1 # epw.relHumSou -1 102 0 -1 # epw.TBlaSkySou -1 102 0 -1 # epw.winSpeSou -1 102 0 -1 # epw.TDryBulSou -1 102 0 -1 # epw.TDewPoiSou -1 102 0 -1 # epw.opaSkyCovSou -1 103 0 -1 # epw.HSou -1 104 0 -1 # epw.calTSky -1 104 0 -1 # epw.TBlaSkyCom.calTSky -1 105 0 -1 # epw.datRea.smoothness -1 105 0 -1 # epw.datRea1.smoothness -2 68 0 -1 # temp_1 -2 69 0 -1 # temp_2 -1 106 0 -1 # epw.datRea.verboseRead -1 107 0 -1 # epw.datRea1.verboseRead -1 108 0 -1 # _block_jacobian_check -1 109 0 -1 # _block_solver_profiling -1 110 0 -1 # _enforce_bounds -1 111 0 -1 # _nle_brent_ignore_error -1 112 0 -1 # _nle_solver_check_jac_cond -1 113 0 -1 # _nle_solver_use_last_integrator_step -1 114 0 -1 # _nle_solver_use_nominals_as_fallback -1 115 0 -1 # _rescale_after_singular_jac -1 116 0 -1 # _rescale_each_step -1 117 0 -1 # _runtime_log_to_file -1 118 0 -1 # _use_Brent_in_1d -1 119 0 -1 # _use_jacobian_equilibration -1 120 0 -1 # _use_newton_for_brent -1 121 0 -1 # epw.computeWetBulbTemperature -1 121 0 -1 # epw.datRea1.tableOnFile -1 121 0 -1 # epw.datRea.tableOnFile -1 122 0 -1 # epw.tWetBul_TDryBulXi.approximateWetBulb -2 70 0 -1 # temp_3 -2 71 0 -1 # temp_4 - -float data_1(2,122) -0.00000000000000E+00 1.00000000000000E-06 3.10000000000000E+03 1.20000000000000E+05 1.00000000000000E-02 9.99000000000000E+00 1.00000000000000E-04 0.00000000000000E+00 6.28318530717959E+00 1.80000000000000E+03 3.15360000000000E+07 3.60000000000000E+03 9.90000000000000E-01 3.97948631307610E-01 1.72024238389585E-02 1.01325000000000E+05 2.00000000000000E+04 5.00000000000000E-01 5.00000000000000E-01 2.93150000000000E+02 2.83150000000000E+02 2.73150000000000E+02 5.00000000000000E-01 1.00000000000000E+00 1.00000000000000E+00 0.00000000000000E+00 2.03150000000000E+02 3.43150000000000E+02 2.03150000000000E+02 3.43150000000000E+02 1.00000000000000E+00 1.00000000000000E+00 0.00000000000000E+00 3.43150000000000E+02 1.00000000000000E-06 1.00000000000000E-06 1.00000000000000E-03 1.00000000000000E-10 1.00000000000000E-04 1.49011611938477E-08 1.00000000000000E-10 1.00000000000000E+10 1.00000000000000E-10 1.00000000000000E-12 -1.00000000000000E+00 1.00000000000000E+01 1.00000000000000E-04 -1.53449347835341E+00 7.32689219987220E-01 -2.16000000000000E+04 1.80000000000000E+03 4.99200000000001E+02 1.00000000000000E-01 1.00000000000000E+00 1.00000000000000E+00 1.01325000000000E+05 1.01325000000000E+05 1.01325000000000E+05 1.01325000000000E+05 1.01325000000000E+05 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 1.00000000000000E+00 3.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.00000000000000E+00 3.00000000000000E+00 1.00000000000000E+02 1.00000000000000E+01 1.00000000000000E+00 2.00000000000000E+00 3.00000000000000E+00 4.00000000000000E+00 5.00000000000000E+00 6.00000000000000E+00 1.10000000000000E+01 1.20000000000000E+01 1.30000000000000E+01 1.40000000000000E+01 1.50000000000000E+01 1.60000000000000E+01 1.70000000000000E+01 1.80000000000000E+01 1.90000000000000E+01 2.00000000000000E+01 2.10000000000000E+01 2.20000000000000E+01 2.30000000000000E+01 2.40000000000000E+01 2.50000000000000E+01 2.60000000000000E+01 2.70000000000000E+01 2.80000000000000E+01 2.90000000000000E+01 3.00000000000000E+01 8.00000000000000E+00 9.00000000000000E+00 1.00000000000000E+01 2.00000000000000E+00 1.00000000000000E+00 1.00000000000000E+00 2.00000000000000E+00 2.00000000000000E+00 1.00000000000000E+00 1.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 1.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 1.00000000000000E+00 1.00000000000000E+00 1.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 1.00000000000000E+00 0.00000000000000E+00 1.00000000000000E+00 1.00000000000000E+00 0.00000000000000E+00 -8.64000000000000E+04 1.00000000000000E-06 3.10000000000000E+03 1.20000000000000E+05 1.00000000000000E-02 9.99000000000000E+00 1.00000000000000E-04 0.00000000000000E+00 6.28318530717959E+00 1.80000000000000E+03 3.15360000000000E+07 3.60000000000000E+03 9.90000000000000E-01 3.97948631307610E-01 1.72024238389585E-02 1.01325000000000E+05 2.00000000000000E+04 5.00000000000000E-01 5.00000000000000E-01 2.93150000000000E+02 2.83150000000000E+02 2.73150000000000E+02 5.00000000000000E-01 1.00000000000000E+00 1.00000000000000E+00 0.00000000000000E+00 2.03150000000000E+02 3.43150000000000E+02 2.03150000000000E+02 3.43150000000000E+02 1.00000000000000E+00 1.00000000000000E+00 0.00000000000000E+00 3.43150000000000E+02 1.00000000000000E-06 1.00000000000000E-06 1.00000000000000E-03 1.00000000000000E-10 1.00000000000000E-04 1.49011611938477E-08 1.00000000000000E-10 1.00000000000000E+10 1.00000000000000E-10 1.00000000000000E-12 -1.00000000000000E+00 1.00000000000000E+01 1.00000000000000E-04 -1.53449347835341E+00 7.32689219987220E-01 -2.16000000000000E+04 1.80000000000000E+03 4.99200000000001E+02 1.00000000000000E-01 1.00000000000000E+00 1.00000000000000E+00 1.01325000000000E+05 1.01325000000000E+05 1.01325000000000E+05 1.01325000000000E+05 1.01325000000000E+05 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 1.00000000000000E+00 3.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.00000000000000E+00 3.00000000000000E+00 1.00000000000000E+02 1.00000000000000E+01 1.00000000000000E+00 2.00000000000000E+00 3.00000000000000E+00 4.00000000000000E+00 5.00000000000000E+00 6.00000000000000E+00 1.10000000000000E+01 1.20000000000000E+01 1.30000000000000E+01 1.40000000000000E+01 1.50000000000000E+01 1.60000000000000E+01 1.70000000000000E+01 1.80000000000000E+01 1.90000000000000E+01 2.00000000000000E+01 2.10000000000000E+01 2.20000000000000E+01 2.30000000000000E+01 2.40000000000000E+01 2.50000000000000E+01 2.60000000000000E+01 2.70000000000000E+01 2.80000000000000E+01 2.90000000000000E+01 3.00000000000000E+01 8.00000000000000E+00 9.00000000000000E+00 1.00000000000000E+01 2.00000000000000E+00 1.00000000000000E+00 1.00000000000000E+00 2.00000000000000E+00 2.00000000000000E+00 1.00000000000000E+00 1.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 1.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 1.00000000000000E+00 1.00000000000000E+00 1.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 1.00000000000000E+00 0.00000000000000E+00 1.00000000000000E+00 1.00000000000000E+00 0.00000000000000E+00 - -float data_2(25,71) - 0.00000000000000E+00 9.95000000000000E+04 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.41000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 4.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 7.30000000000000E+01 9.00000000000000E-01 1.00000000000000E-04 1.00000000000000E-04 1.00000000000000E-04 2.74000000000000E+03 2.60000000000000E+00 4.71238898038469E+00 9.00000000000000E-01 2.16762500000000E+02 2.57050000000000E+02 8.31101134737295E-01 9.00000000000000E+00 0.00000000000000E+00 1.80000000000000E+03 4.99200000000001E+02 1.80000000000000E+03 0.00000000000000E+00 -2.16412398939308E+02 -1.38091984773178E+00 2.74000000000000E+03 9.00000000000000E-01 9.00000000000000E-01 2.57050000000000E+02 2.49155667253264E+02 7.30000000000000E-01 2.60000000000000E+00 4.71238898038469E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.16762500000000E+02 2.70000000000000E+02 -1.22000000000000E+01 -1.61000000000000E+01 7.30000000000000E-01 2.81134335864098E+00 -1.24054703184609E+00 -4.02886133720508E-01 2.82787601060693E+02 -3.12102775891344E+00 2.60950000000000E+02 2.60130571836001E+02 1.07465564668638E-03 1.37764737231161E-03 9.00000000000000E+00 9.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 3.60000000000000E+03 9.95000000000000E+04 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.41000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 4.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 7.30000000000000E+01 9.00000000000000E-01 1.00000000000000E-04 1.00000000000000E-04 1.00000000000000E-04 2.74000000000000E+03 2.60000000000000E+00 4.71238898038469E+00 9.00000000000000E-01 2.22612500000000E+02 2.57050000000000E+02 8.31101134737295E-01 9.00000000000000E+00 3.60000000000000E+03 5.40000000000000E+03 4.09920000000000E+03 5.40000000000000E+03 3.60000000000000E+03 -2.17534662609251E+02 -1.38020061864442E+00 2.74000000000000E+03 9.00000000000000E-01 9.00000000000000E-01 2.57050000000000E+02 2.49155667253264E+02 7.30000000000000E-01 2.60000000000000E+00 4.71238898038469E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.22612500000000E+02 2.70000000000000E+02 -1.22000000000000E+01 -1.61000000000000E+01 7.30000000000000E-01 2.73639022457458E+00 -1.16559389777968E+00 -4.02832949276805E-01 3.88166533739075E+03 -2.85930998443144E+00 2.60950000000000E+02 2.60130571836001E+02 1.07465564668638E-03 1.37764737231161E-03 9.00000000000000E+00 9.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 7.20000000000000E+03 9.96000000000000E+04 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.41000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 5.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 7.30000000000000E+01 1.00000000000000E+00 1.00000000000000E-04 1.00000000000000E-04 1.00000000000000E-04 1.68000000000000E+03 2.60000000000000E+00 4.36332312998582E+00 1.00000000000000E+00 2.28968750000000E+02 2.57550000000000E+02 8.56350262675101E-01 1.00000000000000E+01 7.20000000000000E+03 9.00000000000000E+03 7.69920000000000E+03 9.00000000000000E+03 7.20000000000000E+03 -2.18656471851391E+02 -1.37948138955706E+00 1.68000000000000E+03 1.00000000000000E+00 1.00000000000000E+00 2.57550000000000E+02 2.51507827003720E+02 7.30000000000000E-01 2.60000000000000E+00 4.36332312998582E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.28968750000000E+02 2.50000000000000E+02 -1.17000000000000E+01 -1.56000000000000E+01 7.30000000000000E-01 2.58176898247466E+00 -1.01097265567976E+00 -4.02779547113245E-01 7.48054352814861E+03 -2.59759217690252E+00 2.61450000000000E+02 2.60603925860310E+02 1.11893560321264E-03 1.43174525723365E-03 1.00000000000000E+01 1.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 1.08000000000000E+04 9.95000000000000E+04 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.41000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 5.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 7.30000000000000E+01 1.00000000000000E+00 1.00000000000000E-04 1.00000000000000E-04 1.00000000000000E-04 1.40000000000000E+03 2.10000000000000E+00 4.18879020478639E+00 1.00000000000000E+00 2.29943750000000E+02 2.58150000000000E+02 8.58401819156357E-01 1.00000000000000E+01 1.08000000000000E+04 1.26000000000000E+04 1.12992000000000E+04 1.26000000000000E+04 1.08000000000000E+04 -2.19777824858702E+02 -1.37876216046970E+00 1.40000000000000E+03 1.00000000000000E+00 1.00000000000000E+00 2.58150000000000E+02 2.52235855202313E+02 7.30000000000000E-01 2.10000000000000E+00 4.18879020478639E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.29943750000000E+02 2.40000000000000E+02 -1.11000000000000E+01 -1.50000000000000E+01 7.30000000000000E-01 2.39766897836351E+00 -8.26872651568615E-01 -4.02725927271973E-01 1.10794221751413E+04 -2.33587433619526E+00 2.62050000000000E+02 2.61171225361692E+02 1.17421162282669E-03 1.49906871629719E-03 1.00000000000000E+01 1.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 1.44000000000000E+04 9.95000000000000E+04 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.41000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 5.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 7.30000000000000E+01 1.00000000000000E+00 1.00000000000000E-04 1.00000000000000E-04 1.00000000000000E-04 1.40000000000000E+03 2.60000000000000E+00 4.01425727958696E+00 1.00000000000000E+00 2.31150000000000E+02 2.58150000000000E+02 8.58401819156357E-01 1.00000000000000E+01 1.44000000000000E+04 1.62000000000000E+04 1.48992000000000E+04 1.62000000000000E+04 1.44000000000000E+04 -2.20898719825101E+02 -1.37804293138234E+00 1.40000000000000E+03 1.00000000000000E+00 1.00000000000000E+00 2.58150000000000E+02 2.52235855202313E+02 7.30000000000000E-01 2.60000000000000E+00 4.01425727958696E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.31150000000000E+02 2.30000000000000E+02 -1.11000000000000E+01 -1.50000000000000E+01 7.30000000000000E-01 2.20435926398412E+00 -6.33562937189227E-01 -4.02672089795297E-01 1.46783012801749E+04 -2.07415646217833E+00 2.62050000000000E+02 2.61171225361692E+02 1.17421162282669E-03 1.49906871629719E-03 1.00000000000000E+01 1.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 1.80000000000000E+04 9.95000000000000E+04 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.41000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 5.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 7.30000000000000E+01 1.00000000000000E+00 1.00000000000000E-04 1.00000000000000E-04 1.00000000000000E-04 1.40000000000000E+03 2.60000000000000E+00 4.18879020478639E+00 1.00000000000000E+00 2.32000000000000E+02 2.58750000000000E+02 8.60448612878876E-01 1.00000000000000E+01 1.80000000000000E+04 1.98000000000000E+04 1.84992000000000E+04 1.98000000000000E+04 1.80000000000000E+04 -2.22019154945454E+02 -1.37732370229498E+00 1.40000000000000E+03 1.00000000000000E+00 1.00000000000000E+00 2.58750000000000E+02 2.52867641161565E+02 7.30000000000000E-01 2.60000000000000E+00 4.18879020478639E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.32000000000000E+02 2.40000000000000E+02 -1.06000000000000E+01 -1.44000000000000E+01 7.30000000000000E-01 2.01058359581846E+00 -4.39787269023567E-01 -4.02618034725694E-01 1.82771808450545E+04 -1.81243855472045E+00 2.62550000000000E+02 2.61643373051478E+02 1.22211861858507E-03 1.55723590318595E-03 1.00000000000000E+01 1.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 2.16000000000000E+04 9.95000000000000E+04 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.41000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 5.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 7.30000000000000E+01 1.00000000000000E+00 1.00000000000000E-04 1.00000000000000E-04 1.00000000000000E-04 1.83000000000000E+03 2.60000000000000E+00 3.66519142918809E+00 1.00000000000000E+00 2.32000000000000E+02 2.58750000000000E+02 8.60448612878876E-01 1.00000000000000E+01 2.16000000000000E+04 2.34000000000000E+04 2.20992000000000E+04 2.34000000000000E+04 2.16000000000000E+04 -2.23139128415585E+02 -1.37660447320762E+00 1.83000000000000E+03 1.00000000000000E+00 1.00000000000000E+00 2.58750000000000E+02 2.52867641161565E+02 7.30000000000000E-01 2.60000000000000E+00 3.66519142918809E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.32000000000000E+02 2.10000000000000E+02 -1.06000000000000E+01 -1.44000000000000E+01 7.30000000000000E-01 1.82174124390227E+00 -2.50944917107374E-01 -4.02563762105805E-01 2.18760608715844E+04 -1.55072061369042E+00 2.62550000000000E+02 2.61643373051478E+02 1.22211861858507E-03 1.55723590318595E-03 1.00000000000000E+01 1.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 2.52000000000000E+04 9.95000000000000E+04 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.41000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 5.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 7.70000000000000E+01 1.00000000000000E+00 9.07894736842105E-01 2.28260869565217E+00 3.56038647342995E+00 1.68000000000000E+03 3.10000000000000E+00 3.14159265358979E+00 1.00000000000000E+00 2.29281250000000E+02 2.59250000000000E+02 8.62150652017517E-01 1.00000000000000E+01 2.52000000000000E+04 2.70000000000000E+04 2.56992000000000E+04 2.70000000000000E+04 2.52000000000000E+04 -2.24258638432267E+02 -1.37588524412026E+00 1.68000000000000E+03 1.00000000000000E+00 1.00000000000000E+00 2.59250000000000E+02 2.52992596832331E+02 7.70000000000000E-01 3.10000000000000E+00 3.14159265358979E+00 9.07894736842105E-01 2.28260869565217E+00 3.56038647342995E+00 2.29281250000000E+02 1.80000000000000E+02 -1.06000000000000E+01 -1.39000000000000E+01 7.70000000000000E-01 1.64267674352360E+00 -7.18804167287046E-02 -4.02509271978433E-01 2.54749413615677E+04 -1.28900263895711E+00 2.62550000000000E+02 2.61778624383746E+02 1.28913649293810E-03 1.57426482968228E-03 1.00000000000000E+01 1.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 2.88000000000000E+04 9.95000000000000E+04 4.30000000000000E+01 1.00000000000000E+01 1.27200000000000E+03 8.73000000000000E+02 1.22600000000000E+03 2.05000000000000E+02 2.41000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 5.00000000000000E+01 1.18000000000000E-01 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 7.70000000000000E+01 8.00000000000000E-01 5.33126337184424E+01 2.76370341614907E+01 1.88533222123855E+02 2.13000000000000E+03 2.60000000000000E+00 3.14159265358979E+00 8.00000000000000E-01 2.13343750000000E+02 2.59850000000000E+02 8.22671764728708E-01 8.00000000000000E+00 2.88000000000000E+04 3.06000000000000E+04 2.92992000000000E+04 3.06000000000000E+04 2.88000000000000E+04 -2.25377683193240E+02 -1.37516601503289E+00 2.13000000000000E+03 8.00000000000000E-01 8.00000000000000E-01 2.59850000000000E+02 2.50616708792206E+02 7.70000000000000E-01 2.60000000000000E+00 3.14159265358979E+00 5.33126337184424E+01 2.76370341614907E+01 1.88533222123855E+02 2.13343750000000E+02 1.80000000000000E+02 -1.00000000000000E+01 -1.33000000000000E+01 7.70000000000000E-01 1.47893038314089E+00 9.18659436540048E-02 -4.02454564386551E-01 2.90738223168068E+04 -1.02728463038944E+00 2.63150000000000E+02 2.62349639806847E+02 1.35219719286038E-03 1.64800215430745E-03 8.00000000000000E+00 8.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 3.24000000000000E+04 9.95000000000000E+04 2.36000000000000E+02 4.70000000000000E+01 1.15600000000000E+04 2.80420000000000E+04 6.84900000000000E+03 8.28000000000000E+02 2.41000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 5.00000000000000E+01 1.18000000000000E-01 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 7.10000000000000E+01 1.10000000000000E-02 1.79694471544715E+02 5.99388130252101E+01 5.01199713698521E+02 2.00000000000000E+03 3.10000000000000E+00 3.31612557878923E+00 1.10000000000000E-02 2.10500000000000E+02 2.59850000000000E+02 7.50677518206631E-01 1.10000000000000E-01 3.24000000000000E+04 3.42000000000000E+04 3.28992000000000E+04 3.42000000000000E+04 3.24000000000000E+04 -2.26496260897202E+02 -1.37444678594553E+00 2.00000000000000E+03 0.00000000000000E+00 0.00000000000000E+00 2.59850000000000E+02 2.45967851908588E+02 7.10000000000000E-01 3.10000000000000E+00 3.31612557878923E+00 1.79694471544715E+02 5.99388130252101E+01 5.01199713698521E+02 2.10500000000000E+02 1.90000000000000E+02 -8.90000000000000E+00 -1.33000000000000E+01 7.10000000000000E-01 1.33747626660829E+00 2.33320060186603E-01 -4.02399639373294E-01 3.26727037391028E+04 -7.65566587856434E-01 2.64250000000000E+02 2.63169373377036E+02 1.35994695048552E-03 1.75923557442830E-03 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 3.60000000000000E+04 9.95000000000000E+04 4.10000000000000E+02 7.10000000000000E+01 2.49780000000000E+04 5.12570000000000E+04 1.00620000000000E+04 1.32200000000000E+03 2.41000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 5.00000000000000E+01 1.18000000000000E-01 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 6.00000000000000E+01 2.00000000000000E-01 2.97034468085106E+02 7.51415441176471E+01 6.54292294142550E+02 2.00000000000000E+03 5.70000000000000E+00 3.83972435438753E+00 1.10000000000000E-02 2.17500000000000E+02 2.59850000000000E+02 7.50677518206631E-01 1.10000000000000E-01 3.60000000000000E+04 3.78000000000000E+04 3.64992000000000E+04 3.78000000000000E+04 3.60000000000000E+04 -2.27614369743821E+02 -1.37372755685817E+00 2.00000000000000E+03 2.00000000000000E-01 0.00000000000000E+00 2.59850000000000E+02 2.48015644810002E+02 6.00000000000000E-01 5.70000000000000E+00 3.83972435438753E+00 2.97034468085106E+02 7.51415441176471E+01 6.54292294142550E+02 2.17500000000000E+02 2.20000000000000E+02 -6.70000000000000E+00 -1.33000000000000E+01 6.00000000000000E-01 1.22696158741215E+00 3.43834739382751E-01 -4.02344496981962E-01 3.62715856302562E+04 -5.03848511227156E-01 2.66450000000000E+02 2.64747948397626E+02 1.36383453927710E-03 1.99242920148382E-03 2.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 3.96000000000000E+04 9.94000000000000E+04 5.31000000000000E+02 8.00000000000000E+01 3.55720000000000E+04 6.47250000000000E+04 1.11770000000000E+04 1.58100000000000E+03 2.41000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 6.00000000000000E+01 1.18000000000000E-01 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 6.30000000000000E+01 1.10000000000000E-02 3.69425531914894E+02 1.10197674418605E+02 6.40359623857392E+02 2.00000000000000E+03 5.70000000000000E+00 3.66519142918809E+00 1.10000000000000E-02 2.27205882352941E+02 2.62050000000000E+02 7.57134237560899E-01 1.10000000000000E-01 3.96000000000000E+04 4.14000000000000E+04 4.00992000000000E+04 4.14000000000000E+04 3.96000000000000E+04 -2.28732007933733E+02 -1.37300832777081E+00 2.00000000000000E+03 0.00000000000000E+00 0.00000000000000E+00 2.62050000000000E+02 2.50133017709323E+02 6.30000000000000E-01 5.70000000000000E+00 3.66519142918809E+00 3.69425531914894E+02 1.10197674418605E+02 6.40359623857392E+02 2.27205882352941E+02 2.10000000000000E+02 -5.00000000000000E+00 -1.11000000000000E+01 6.30000000000000E-01 1.15687957314737E+00 4.13916753647524E-01 -4.02289137256019E-01 3.98704679920663E+04 -2.42130400370757E-01 2.68150000000000E+02 2.66421598178633E+02 1.63119757688593E-03 2.26933405224483E-03 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 4.32000000000000E+04 9.93000000000000E+04 5.91000000000000E+02 1.44000000000000E+02 3.80260000000000E+04 5.04670000000000E+04 1.68540000000000E+04 2.86300000000000E+03 2.41000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 6.00000000000000E+01 1.18000000000000E-01 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 6.30000000000000E+01 6.00000000000000E-01 2.98175149700599E+02 1.59336979046742E+02 3.28370025190977E+02 2.00000000000000E+03 5.70000000000000E+00 3.83972435438753E+00 2.00000000000000E-01 2.46020680147059E+02 2.63750000000000E+02 7.85363671161304E-01 2.00000000000000E+00 4.32000000000000E+04 4.50000000000000E+04 4.36992000000000E+04 4.50000000000000E+04 4.32000000000000E+04 -2.29849173668550E+02 -1.37228909868345E+00 2.00000000000000E+03 6.00000000000000E-01 2.00000000000000E-01 2.63750000000000E+02 2.54032992619536E+02 6.30000000000000E-01 5.70000000000000E+00 3.83972435438753E+00 2.98175149700599E+02 1.59336979046742E+02 3.28370025190977E+02 2.46020680147059E+02 2.20000000000000E+02 -3.30000000000000E+00 -9.40000000000000E+00 6.30000000000000E-01 1.13506753360082E+00 4.35728793194075E-01 -4.02233560239096E-01 4.34693508263315E+04 1.95877448435467E-02 2.69850000000000E+02 2.67957521693015E+02 1.85451462415501E-03 2.55302562058289E-03 6.00000000000000E+00 2.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 4.68000000000000E+04 9.92000000000000E+04 5.86000000000000E+02 1.68000000000000E+02 2.51740000000000E+04 1.49900000000000E+04 1.89390000000000E+04 3.96900000000000E+03 2.41000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 7.00000000000000E+01 1.18000000000000E-01 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 6.30000000000000E+01 1.00000000000000E+00 2.06077628077179E+02 1.71664326126490E+02 7.62324987409166E+01 6.71000000000000E+03 5.20000000000000E+00 4.01425727958696E+00 8.00000000000000E-01 2.62960937500000E+02 2.64850000000000E+02 8.38668053008990E-01 8.00000000000000E+00 4.68000000000000E+04 4.86000000000000E+04 4.72992000000000E+04 4.86000000000000E+04 4.68000000000000E+04 -2.30965865150859E+02 -1.37156986959609E+00 6.71000000000000E+03 1.00000000000000E+00 8.00000000000000E-01 2.64850000000000E+02 2.59290544867261E+02 6.30000000000000E-01 5.20000000000000E+00 4.01425727958696E+00 2.06077628077179E+02 1.71664326126490E+02 7.62324987409166E+01 2.62960937500000E+02 2.30000000000000E+02 -2.20000000000000E+00 -8.30000000000000E+00 6.30000000000000E-01 1.16433116620321E+00 4.06465160591687E-01 -4.02177765974986E-01 4.70682341348491E+04 2.81305924546466E-01 2.70950000000000E+02 2.68947325710035E+02 2.01308328034189E-03 2.75213795252125E-03 1.00000000000000E+01 8.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 5.04000000000000E+04 9.92000000000000E+04 5.16000000000000E+02 1.61000000000000E+02 1.98050000000000E+04 5.14500000000000E+03 1.79200000000000E+04 4.31700000000000E+03 2.41000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 7.00000000000000E+01 1.18000000000000E-01 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 6.10000000000000E+01 1.00000000000000E+00 1.49411695906433E+02 1.27920883421862E+02 7.94721402309565E+01 6.71000000000000E+03 4.10000000000000E+00 4.53785605518526E+00 9.00000000000000E-01 2.67068750000000E+02 2.65350000000000E+02 8.58347767009692E-01 9.00000000000000E+00 5.04000000000000E+04 5.22000000000000E+04 5.08992000000000E+04 5.22000000000000E+04 5.04000000000000E+04 -2.32082080584229E+02 -1.37085064050873E+00 6.71000000000000E+03 1.00000000000000E+00 9.00000000000000E-01 2.65350000000000E+02 2.61857218653667E+02 6.10000000000000E-01 4.10000000000000E+00 4.53785605518526E+00 1.49411695906433E+02 1.27920883421862E+02 7.94721402309565E+01 2.67068750000000E+02 2.60000000000000E+02 -1.10000000000000E+00 -7.80000000000000E+00 6.10000000000000E-01 1.24094889804141E+00 3.29847428753482E-01 -4.02121754507648E-01 5.06671179194158E+04 5.43024138868641E-01 2.72050000000000E+02 2.69816503127712E+02 2.11415118416309E-03 2.93823379885277E-03 1.00000000000000E+01 9.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 5.40000000000000E+04 9.92000000000000E+04 3.86000000000000E+02 9.30000000000000E+01 1.30010000000000E+04 8.25100000000000E+03 1.07390000000000E+04 2.05600000000000E+03 2.41000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 7.00000000000000E+01 1.18000000000000E-01 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 6.40000000000000E+01 9.00000000000000E-01 8.31235697940503E+01 6.71007252215955E+01 6.41960046323104E+01 3.66000000000000E+03 3.10000000000000E+00 4.53785605518526E+00 9.00000000000000E-01 2.71837500000000E+02 2.65950000000000E+02 8.60284246839121E-01 9.00000000000000E+00 5.40000000000000E+04 5.58000000000000E+04 5.44992000000000E+04 5.58000000000000E+04 5.40000000000000E+04 -2.33197818173212E+02 -1.37013141142137E+00 3.66000000000000E+03 9.00000000000000E-01 9.00000000000000E-01 2.65950000000000E+02 2.62004784944426E+02 6.40000000000000E-01 3.10000000000000E+00 4.53785605518526E+00 8.31235697940503E+01 6.71007252215955E+01 6.41960046323104E+01 2.71837500000000E+02 2.60000000000000E+02 -1.10000000000000E+00 -7.20000000000000E+00 6.40000000000000E-01 1.35662274816324E+00 2.14173578631655E-01 -4.02065525881203E-01 5.42660021818268E+04 8.04742387940640E-01 2.72050000000000E+02 2.69992819865813E+02 2.21826601954493E-03 2.97731901578595E-03 9.00000000000000E+00 9.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 5.76000000000000E+04 9.92000000000000E+04 2.06000000000000E+02 4.30000000000000E+01 5.29400000000000E+03 2.63500000000000E+03 4.90800000000000E+03 1.08300000000000E+03 1.93000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 8.00000000000000E+01 1.18000000000000E-01 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 6.90000000000000E+01 1.00000000000000E+00 1.97041440217391E+01 2.01176470588235E+01 1.27840909090909E+01 3.66000000000000E+03 1.50000000000000E+00 3.66519142918809E+00 1.00000000000000E+00 2.76618750000000E+02 2.67050000000000E+02 8.88285633439346E-01 1.00000000000000E+01 5.76000000000000E+04 5.94000000000000E+04 5.80992000000000E+04 5.94000000000000E+04 5.76000000000000E+04 -2.34313076123349E+02 -1.36941218233401E+00 3.66000000000000E+03 1.00000000000000E+00 1.00000000000000E+00 2.67050000000000E+02 2.64111243377933E+02 6.90000000000000E-01 1.50000000000000E+00 3.66519142918809E+00 1.97041440217391E+01 2.01176470588235E+01 1.27840909090909E+01 2.76618750000000E+02 2.10000000000000E+02 -1.10000000000000E+00 -6.10000000000000E+00 6.90000000000000E-01 1.50186813851193E+00 6.89281882829660E-02 -4.02009080139939E-01 5.78648869238766E+04 1.06646067189296E+00 2.72050000000000E+02 2.70284993295837E+02 2.39181999326044E-03 3.04310387160377E-03 1.00000000000000E+01 1.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 6.12000000000000E+04 9.92000000000000E+04 2.50000000000000E+01 5.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 1.93000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 8.00000000000000E+01 1.18000000000000E-01 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 6.90000000000000E+01 1.00000000000000E+00 1.13281250000000E+00 6.61764705882352E-01 1.00000000000000E-04 3.66000000000000E+03 1.00000000000000E-06 1.00000000000000E-03 1.00000000000000E+00 2.74500000000000E+02 2.67050000000000E+02 8.88285633439346E-01 1.00000000000000E+01 6.12000000000000E+04 6.30000000000000E+04 6.16992000000000E+04 6.30000000000000E+04 6.12000000000000E+04 -2.35427852641171E+02 -1.36869295324665E+00 3.66000000000000E+03 1.00000000000000E+00 1.00000000000000E+00 2.67050000000000E+02 2.64111243377933E+02 6.90000000000000E-01 0.00000000000000E+00 0.00000000000000E+00 1.13281250000000E+00 6.61764705882352E-01 0.00000000000000E+00 2.74500000000000E+02 0.00000000000000E+00 -1.10000000000000E+00 -6.10000000000000E+00 6.90000000000000E-01 1.66826532419542E+00 -9.74689974005198E-02 -4.01952417328305E-01 6.14637721473588E+04 1.32817899085603E+00 2.72050000000000E+02 2.70284993295837E+02 2.39181999326044E-03 3.04310387160377E-03 1.00000000000000E+01 1.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 6.48000000000000E+04 9.92000000000000E+04 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 1.61000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 8.00000000000000E+01 1.18000000000000E-01 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 7.20000000000000E+01 1.00000000000000E+00 1.00000000000000E-04 1.00000000000000E-04 1.00000000000000E-04 2.44000000000000E+03 1.00000000000000E-06 1.00000000000000E-03 1.00000000000000E+00 2.71787500000000E+02 2.67050000000000E+02 8.88285633439346E-01 1.00000000000000E+01 6.48000000000000E+04 6.66000000000000E+04 6.52992000000000E+04 6.66000000000000E+04 6.48000000000000E+04 -2.36542145934203E+02 -1.36797372415929E+00 2.44000000000000E+03 1.00000000000000E+00 1.00000000000000E+00 2.67050000000000E+02 2.63528752122551E+02 7.20000000000000E-01 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.71787500000000E+02 0.00000000000000E+00 -1.70000000000000E+00 -6.10000000000000E+00 7.20000000000000E-01 1.84907933940036E+00 -2.78283012605467E-01 -4.01895537490917E-01 6.50626578540658E+04 1.58989734496019E+00 2.71450000000000E+02 2.69905497301742E+02 2.38792028269414E-03 2.95790436880426E-03 1.00000000000000E+01 1.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 6.84000000000000E+04 9.92000000000000E+04 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 1.61000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 8.00000000000000E+01 1.18000000000000E-01 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 7.50000000000000E+01 1.00000000000000E+00 1.00000000000000E-04 1.00000000000000E-04 1.00000000000000E-04 2.44000000000000E+03 2.10000000000000E+00 2.79252680319093E+00 1.00000000000000E+00 2.73275000000000E+02 2.67050000000000E+02 8.88285633439346E-01 1.00000000000000E+01 6.84000000000000E+04 7.02000000000000E+04 6.88992000000000E+04 7.02000000000000E+04 6.84000000000000E+04 -2.37655954210969E+02 -1.36725449507193E+00 2.44000000000000E+03 1.00000000000000E+00 1.00000000000000E+00 2.67050000000000E+02 2.63043342743066E+02 7.50000000000000E-01 2.10000000000000E+00 2.79252680319093E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.73275000000000E+02 1.60000000000000E+02 -2.20000000000000E+00 -6.10000000000000E+00 7.50000000000000E-01 2.03892156508153E+00 -4.68125238286635E-01 -4.01838440672553E-01 6.86615440457890E+04 1.85161573433573E+00 2.70950000000000E+02 2.69607636269984E+02 2.39708638130480E-03 2.89252298113736E-03 1.00000000000000E+01 1.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 7.20000000000000E+04 9.92000000000000E+04 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 1.61000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 8.00000000000000E+01 1.18000000000000E-01 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 7.20000000000000E+01 1.00000000000000E+00 1.00000000000000E-04 1.00000000000000E-04 1.00000000000000E-04 3.05000000000000E+03 2.60000000000000E+00 2.79252680319093E+00 1.00000000000000E+00 2.75652419354839E+02 2.67550000000000E+02 8.89934822098297E-01 1.00000000000000E+01 7.20000000000000E+04 7.38000000000000E+04 7.24992000000000E+04 7.38000000000000E+04 7.20000000000000E+04 -2.38769275680992E+02 -1.36653526598457E+00 3.05000000000000E+03 1.00000000000000E+00 1.00000000000000E+00 2.67550000000000E+02 2.64233745173848E+02 7.20000000000000E-01 2.60000000000000E+00 2.79252680319093E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.75652419354839E+02 1.60000000000000E+02 -1.10000000000000E+00 -5.60000000000000E+00 7.20000000000000E-01 2.23295066421515E+00 -6.62154337420255E-01 -4.01781126918153E-01 7.22604307243190E+04 2.11333415911286E+00 2.72050000000000E+02 2.70459288244651E+02 2.49596993040458E-03 3.08295913568888E-03 1.00000000000000E+01 1.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 7.56000000000000E+04 9.91000000000000E+04 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 1.61000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 8.00000000000000E+01 1.18000000000000E-01 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 7.80000000000000E+01 1.00000000000000E+00 1.00000000000000E-04 1.00000000000000E-04 1.00000000000000E-04 3.05000000000000E+03 1.00000000000000E-06 1.00000000000000E-03 1.00000000000000E+00 2.76191001697793E+02 2.68150000000000E+02 8.91909785029795E-01 1.00000000000000E+01 7.56000000000000E+04 7.74000000000000E+04 7.60992000000000E+04 7.74000000000000E+04 7.56000000000000E+04 -2.39882108554804E+02 -1.36581603689721E+00 3.05000000000000E+03 1.00000000000000E+00 1.00000000000000E+00 2.68150000000000E+02 2.63797137185198E+02 7.80000000000000E-01 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.76191001697793E+02 0.00000000000000E+00 -1.70000000000000E+00 -5.00000000000000E+00 7.80000000000000E-01 2.42548927737833E+00 -8.54692950583433E-01 -4.01723596272824E-01 7.58593178914452E+04 2.37505261942171E+00 2.71450000000000E+02 2.70241517534497E+02 2.58722656413376E-03 3.03323401520765E-03 1.00000000000000E+01 1.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 7.92000000000000E+04 9.91000000000000E+04 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 1.61000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 8.00000000000000E+01 1.18000000000000E-01 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 7.50000000000000E+01 1.00000000000000E+00 1.00000000000000E-04 1.00000000000000E-04 1.00000000000000E-04 3.05000000000000E+03 2.60000000000000E+00 2.79252680319093E+00 1.00000000000000E+00 2.66345864661654E+02 2.68150000000000E+02 8.91909785029795E-01 1.00000000000000E+01 7.92000000000000E+04 8.10000000000000E+04 7.96992000000000E+04 8.10000000000000E+04 7.92000000000000E+04 -2.40994451043940E+02 -1.36509680780985E+00 3.05000000000000E+03 1.00000000000000E+00 1.00000000000000E+00 2.68150000000000E+02 2.64380221665990E+02 7.50000000000000E-01 2.60000000000000E+00 2.79252680319093E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.66345864661654E+02 1.60000000000000E+02 -1.10000000000000E+00 -5.00000000000000E+00 7.50000000000000E-01 2.60677576805285E+00 -1.03597944125795E+00 -4.01665848781834E-01 7.94582055489561E+04 2.63677111539234E+00 2.72050000000000E+02 2.70632829116957E+02 2.60013303528630E-03 3.12310162542307E-03 1.00000000000000E+01 1.00000000000000E+01 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 8.28000000000000E+04 9.90000000000000E+04 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 1.61000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 8.00000000000000E+01 1.18000000000000E-01 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 7.80000000000000E+01 6.00000000000000E-01 1.00000000000000E-04 1.00000000000000E-04 1.00000000000000E-04 3.05000000000000E+03 2.60000000000000E+00 3.14159265358979E+00 6.00000000000000E-01 2.50473214285714E+02 2.68150000000000E+02 8.26121777315986E-01 6.00000000000000E+00 8.28000000000000E+04 8.46000000000000E+04 8.32992000000000E+04 8.46000000000000E+04 8.28000000000000E+04 -2.42106301360950E+02 -1.36437757872249E+00 3.05000000000000E+03 6.00000000000000E-01 6.00000000000000E-01 2.68150000000000E+02 2.58792009979733E+02 7.80000000000000E-01 2.60000000000000E+00 3.14159265358979E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.50473214285714E+02 1.80000000000000E+02 -1.70000000000000E+00 -5.00000000000000E+00 7.80000000000000E-01 2.75334029032974E+00 -1.18254396353485E+00 -4.01607884490615E-01 8.30570936986390E+04 2.89848964715473E+00 2.71450000000000E+02 2.70241517534497E+02 2.58722656413376E-03 3.03323401520765E-03 6.00000000000000E+00 6.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 - 8.64000000000000E+04 9.90000000000000E+04 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 1.61000000000000E+01 9.00000000000000E+00 9.99999999000000E+08 8.00000000000000E+01 1.18000000000000E-01 0.00000000000000E+00 8.80000000000000E+01 9.99000000000000E+02 9.99000000000000E+02 9.90000000000000E+01 7.20000000000000E+01 3.00000000000000E-01 1.00000000000000E-04 1.00000000000000E-04 1.00000000000000E-04 2.00000000000000E+03 2.60000000000000E+00 3.31612557878923E+00 3.00000000000000E-01 2.41725961538462E+02 2.67050000000000E+02 8.03044081405487E-01 3.00000000000000E+00 8.64000000000000E+04 8.82000000000000E+04 8.68992000000000E+04 8.82000000000000E+04 8.64000000000000E+04 -2.43217657719399E+02 -1.36365834963513E+00 2.00000000000000E+03 3.00000000000000E-01 3.00000000000000E-01 2.67050000000000E+02 2.56965424979274E+02 7.20000000000000E-01 2.60000000000000E+00 3.31612557878923E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 2.41725961538462E+02 1.90000000000000E+02 -1.70000000000000E+00 -6.10000000000000E+00 7.20000000000000E-01 2.81008867868493E+00 -1.23929235189003E+00 -4.01549703444762E-01 8.66559823422806E+04 3.16020821483881E+00 2.71450000000000E+02 2.69905497301742E+02 2.38792028269414E-03 2.95790436880426E-03 3.00000000000000E+00 3.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 0.00000000000000E+00 diff --git a/resources/building/ControlCSV_0.csv b/unittests/resources/building/ControlCSV_0.csv similarity index 100% rename from resources/building/ControlCSV_0.csv rename to unittests/resources/building/ControlCSV_0.csv diff --git a/resources/building/LBNL71T_Emulation_Dymola_v1.fmu b/unittests/resources/building/LBNL71T_Emulation_Dymola_v1.fmu similarity index 100% rename from resources/building/LBNL71T_Emulation_Dymola_v1.fmu rename to unittests/resources/building/LBNL71T_Emulation_Dymola_v1.fmu diff --git a/resources/building/LBNL71T_Emulation_Dymola_v2.fmu b/unittests/resources/building/LBNL71T_Emulation_Dymola_v2.fmu similarity index 100% rename from resources/building/LBNL71T_Emulation_Dymola_v2.fmu rename to unittests/resources/building/LBNL71T_Emulation_Dymola_v2.fmu diff --git a/resources/building/LBNL71T_Emulation_JModelica_v1.fmu b/unittests/resources/building/LBNL71T_Emulation_JModelica_v1.fmu similarity index 100% rename from resources/building/LBNL71T_Emulation_JModelica_v1.fmu rename to unittests/resources/building/LBNL71T_Emulation_JModelica_v1.fmu diff --git a/resources/building/LBNL71T_Emulation_JModelica_v2.fmu b/unittests/resources/building/LBNL71T_Emulation_JModelica_v2.fmu similarity index 100% rename from resources/building/LBNL71T_Emulation_JModelica_v2.fmu rename to unittests/resources/building/LBNL71T_Emulation_JModelica_v2.fmu diff --git a/resources/building/OccData.csv b/unittests/resources/building/OccData.csv similarity index 100% rename from resources/building/OccData.csv rename to unittests/resources/building/OccData.csv diff --git a/resources/internal/sampleCSV.csv b/unittests/resources/internal/sampleCSV.csv similarity index 100% rename from resources/internal/sampleCSV.csv rename to unittests/resources/internal/sampleCSV.csv diff --git a/resources/model/LBNL71T_MPC.mo b/unittests/resources/model/LBNL71T_MPC.mo similarity index 100% rename from resources/model/LBNL71T_MPC.mo rename to unittests/resources/model/LBNL71T_MPC.mo diff --git a/unittests/resources/model/LBNL71T_MPC.mop b/unittests/resources/model/LBNL71T_MPC.mop new file mode 100644 index 0000000..2f83ad7 --- /dev/null +++ b/unittests/resources/model/LBNL71T_MPC.mop @@ -0,0 +1,3495 @@ +package LBNL71T_MPC + + model RunMPC + + parameter Modelica.SIunits.Angle lon= -87.6298*Modelica.Constants.pi/180; + parameter Modelica.SIunits.Angle lat= 41.8781*Modelica.Constants.pi/180; + parameter Modelica.SIunits.Time timZon= -6*3600; + parameter Modelica.SIunits.Time modTimOffset = 0; + + Buildings.BoundaryConditions.WeatherData.ReaderTMY3 epw(filNam= + "modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos") + "Weather data" + annotation (Placement(transformation(extent={{-540,20},{-430,120}}))); + MPC mpc( + timZon=timZon, + modTimOffset=0, + lon=lon, + lat=lat) + annotation (Placement(transformation(extent={{-108,-102},{146,138}}))); + Modelica.Blocks.Sources.CombiTimeTable intGaiFra( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, table=[0, + 0.05; 3600*8,0.05; 3600*8,0.9; 3600*12,0.9; 3600*12,0.8; 3600*13, + 0.8; 3600*13,1; 3600*17,1; 3600*17,0.1; 3600*20,0.1; 3600*20,0.05; + 3600*24,0.05]) + "Fraction of internal heat gain" + annotation (Placement(transformation(extent={{-320,200},{-300,220}}))); + Modelica.Blocks.Math.MatrixGain gai(K=20*[0.4; 0.4; 0.2]) + "Matrix gain to split up heat gain in radiant, convective and latent gain" + annotation (Placement(transformation(extent={{-280,200},{-260,220}}))); + Modelica.Blocks.Routing.DeMultiplex3 deMultiplex3_1 + annotation (Placement(transformation(extent={{222,118},{202,138}}))); + Modelica.Blocks.Sources.CombiTimeTable intGaiFra1( + extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic, table=[0, + 0.05; 3600*7,0.05; 3600*7,0.1; 3600*19,0.1; 3600*19,0.05; 3600*24, + 0.05]) "Fraction of internal heat gain" + annotation (Placement(transformation(extent={{-320,160},{-300,180}}))); + Modelica.Blocks.Math.MatrixGain gai1( + K=20*[0.4; 0.4; 0.2]) + "Matrix gain to split up heat gain in radiant, convective and latent gain" + annotation (Placement(transformation(extent={{-280,160},{-260,180}}))); + Modelica.Blocks.Routing.DeMultiplex3 deMultiplex3_2 + annotation (Placement(transformation(extent={{220,48},{200,68}}))); + Buildings.BoundaryConditions.WeatherData.Bus weaBus "Weather data bus" + annotation (Placement(transformation(extent={{-412,60},{-392,80}}))); + BoundaryConditions.WeatherProcessor weatherProcessor( + modTimOffset=0, + lon=-1.5344934783534, + lat=0.73268921998722, + timZon=-21600) + annotation (Placement(transformation(extent={{-316,36},{-248,104}}))); + Controllers.DualSetpoint DualSetpoint( + OnStatus=true, + Setpoint=20 + 273, + Setback=5) + annotation (Placement(transformation(extent={{-82,-172},{-62,-152}}))); + equation + + connect(deMultiplex3_1.y1[1], mpc.intRad_wes) annotation (Line(points={{201,135}, + {176.5,135},{176.5,109.2},{156.583,109.2}}, color={0, + 0,127})); + connect(deMultiplex3_1.y2[1], mpc.intCon_wes) annotation (Line(points={{201,128}, + {176,128},{176,94.8},{156.583,94.8}}, color={0,0,127})); + connect(deMultiplex3_1.y3[1], mpc.intLat_wes) annotation (Line(points={{201,121}, + {174.5,121},{174.5,80.4},{156.583,80.4}}, color={0, + 0,127})); + connect(deMultiplex3_1.y1[1], mpc.intRad_eas) annotation (Line(points={{201,135}, + {184,135},{184,13.2},{156.583,13.2}}, color={0,0, + 127})); + connect(deMultiplex3_1.y2[1], mpc.intCon_eas) annotation (Line(points={{201,128}, + {188,128},{188,-1.2},{156.583,-1.2}}, color={0,0, + 127})); + connect(deMultiplex3_1.y3[1], mpc.intLat_eas) annotation (Line(points={{201,121}, + {194,121},{194,-15.6},{156.583,-15.6}}, color={0,0, + 127})); + connect(deMultiplex3_2.y1[1], mpc.intRad_hal) annotation (Line(points={{199,65}, + {178,65},{178,61.2},{156.583,61.2}}, color={0,0,127})); + connect(deMultiplex3_2.y2[1], mpc.intCon_hal) annotation (Line(points={{199,58}, + {170,58},{170,46.8},{156.583,46.8}}, color={0,0,127})); + connect(deMultiplex3_2.y3[1], mpc.intLat_hal) annotation (Line(points={{199,51}, + {170,51},{170,32.4},{156.583,32.4}}, color={0,0,127})); + connect(epw.weaBus, weaBus) annotation (Line( + points={{-430,70},{-402,70}}, + color={255,204,51}, + thickness=0.5), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaBus.pAtm, weatherProcessor.weaPAtm) annotation (Line( + points={{-402,70},{-396,70},{-388,70},{-388,102},{-318,102}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.TDewPoi, weatherProcessor.weaTDewPoi) annotation (Line( + points={{-402,70},{-388,70},{-388,96},{-318,96}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.TDryBul, weatherProcessor.weaTDryBul) annotation (Line( + points={{-402,70},{-388,70},{-388,89.8},{-318,89.8}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.relHum, weatherProcessor.weaRelHum) annotation (Line( + points={{-402,70},{-388,70},{-388,83.8},{-318,83.8}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.nOpa, weatherProcessor.weaNOpa) annotation (Line( + points={{-402,70},{-388,70},{-388,77.8},{-318,77.8}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.celHei, weatherProcessor.weaCelHei) annotation (Line( + points={{-402,70},{-396,70},{-386,70},{-386,71.8},{-318,71.8}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.nTot, weatherProcessor.weaNTot) annotation (Line( + points={{-402,70},{-388,70},{-388,66},{-318,66}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.winSpe, weatherProcessor.weaWinSpe) annotation (Line( + points={{-402,70},{-396,70},{-388,70},{-388,60},{-318,60}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.winDir, weatherProcessor.weaWinDir) annotation (Line( + points={{-402,70},{-388,70},{-388,53.6},{-318,53.6}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.HHorIR, weatherProcessor.weaHHorIR) annotation (Line( + points={{-402,70},{-388,70},{-388,47.8},{-318,47.8}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.HDirNor, weatherProcessor.weaHDirNor) annotation (Line( + points={{-402,70},{-396,70},{-388,70},{-388,41.8},{-318,41.8}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.HGloHor, weatherProcessor.weaHGloHor) annotation (Line( + points={{-402,70},{-388,70},{-388,36},{-318,36}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(mpc.weaPAtm, weatherProcessor.weaPAtm) annotation (Line(points={{ + -118.583,128.4},{-376,128.4},{-376,102},{-318,102}}, + color={0,0, + 127})); + connect(mpc.weaTDewPoi, weatherProcessor.weaTDewPoi) annotation (Line( + points={{-118.583,114},{-136,114},{-136,146},{-378,146},{-378,96},{-318, + 96}}, color={0,0,127})); + connect(mpc.weaTDryBul, weatherProcessor.weaTDryBul) annotation (Line( + points={{-118.583,99.6},{-138,99.6},{-138,144},{-376,144},{-376,89.8},{ + -318,89.8}}, color={0,0,127})); + connect(mpc.weaRelHum, weatherProcessor.weaRelHum) annotation (Line( + points={{-118.583,85.2},{-140,85.2},{-140,142},{-374,142},{-374,83.8},{ + -318,83.8}}, color={0,0,127})); + connect(mpc.weaNOpa, weatherProcessor.weaNOpa) annotation (Line(points={{ + -118.583,70.8},{-142,70.8},{-142,140},{-372,140},{-372,77.8},{-318, + 77.8}}, + color={0,0,127})); + connect(mpc.weaCelHei, weatherProcessor.weaCelHei) annotation (Line( + points={{-118.583,56.4},{-144,56.4},{-144,138},{-370,138},{-370,71.8},{ + -318,71.8}}, color={0,0,127})); + connect(mpc.weaNTot, weatherProcessor.weaNTot) annotation (Line(points={{ + -118.583,42},{-146,42},{-146,136},{-368,136},{-368,66},{-318,66}}, + color={0,0,127})); + connect(mpc.weaWinSpe, weatherProcessor.weaWinSpe) annotation (Line( + points={{-118.583,27.6},{-134,27.6},{-134,34},{-148,34},{-148,134},{ + -366,134},{-366,60},{-318,60}},color={0,0,127})); + connect(mpc.weaWinDir, weatherProcessor.weaWinDir) annotation (Line( + points={{-118.583,13.2},{-150,13.2},{-150,132},{-364,132},{-364,53.6},{ + -318,53.6}}, color={0,0,127})); + connect(mpc.weaHHorIR, weatherProcessor.weaHHorIR) annotation (Line( + points={{-118.583,-1.2},{-152,-1.2},{-152,130},{-362,130},{-362,47.8},{ + -318,47.8}}, color={0,0,127})); + connect(mpc.weaHDirNor, weatherProcessor.weaHDirNor) annotation (Line( + points={{-118.583,-15.6},{-154,-15.6},{-154,128},{-360,128},{-360,41.8}, + {-318,41.8}}, color={0,0,127})); + connect(mpc.weaHGloHor, weatherProcessor.weaHGloHor) annotation (Line( + points={{-118.583,-30},{-156,-30},{-156,126},{-358,126},{-358,36},{-318, + 36}}, color={0,0,127})); + connect(weatherProcessor.weaHDifHor, mpc.weaHDifHor) annotation (Line( + points={{-247,102},{-182,102},{-182,-44.4},{-118.583,-44.4}}, color= + {0,0,127})); + connect(weatherProcessor.weaTBlaSky, mpc.weaTBlaSky) annotation (Line( + points={{-247,96},{-186,96},{-186,-58.8},{-118.583,-58.8}}, color={ + 0,0,127})); + connect(weatherProcessor.weaTWetBul, mpc.weaTWetBul) annotation (Line( + points={{-247,90},{-247,90},{-190,90},{-190,-73.2},{-118.583,-73.2}}, + color={0,0,127})); + connect(weatherProcessor.weaCloTim, mpc.weaCloTim) annotation (Line( + points={{-247,77.8},{-198,77.8},{-198,-102},{-118.583,-102}}, color= + {0,0,127})); + connect(weatherProcessor.weaSolTim, mpc.weaSolTim) annotation (Line( + points={{-247,71.8},{-202,71.8},{-202,-116.4},{-118.583,-116.4}}, + color={0,0,127})); + connect(weatherProcessor.weaSolZen, mpc.weaSolZen) annotation (Line( + points={{-247,84},{-194,84},{-194,-87.6},{-118.583,-87.6}}, color={ + 0,0,127})); + connect(intGaiFra.y, gai.u) + annotation (Line(points={{-299,210},{-282,210}}, color={0,0,127})); + connect(intGaiFra1.y, gai1.u) annotation (Line(points={{-299,170},{-290.5, + 170},{-282,170}}, color={0,0,127})); + connect(gai.y, deMultiplex3_1.u) annotation (Line(points={{-259,210},{-34, + 210},{242,210},{242,142},{242,128},{224,128}}, color={0,0,127})); + connect(gai1.y, deMultiplex3_2.u) annotation (Line(points={{-259,170},{ + -259,170},{250,170},{250,58},{222,58}}, color={0,0,127})); + connect(mpc.wesTdb, DualSetpoint.meaTDryBul_wes) annotation (Line(points={{151.292, + -34.8},{240,-34.8},{240,-222},{-140,-222},{-140,-156},{-84,-156}}, + color={0,0,127})); + connect(mpc.halTdb, DualSetpoint.meaTDryBul_hal) annotation (Line(points={{151.292, + -44.4},{232,-44.4},{232,-216},{-132,-216},{-132,-162},{-84,-162}}, + color={0,0,127})); + connect(mpc.easTdb, DualSetpoint.meaTDryBul_eas) annotation (Line(points={{151.292, + -54},{226,-54},{226,-204},{-120,-204},{-120,-168},{-84,-168}}, + color={0,0,127})); + connect(DualSetpoint.y_wes, mpc.conHeat_wes) annotation (Line(points={{-61, + -158},{-2.16667,-158},{-2.16667,-111.6}}, color={0,0,127})); + connect(DualSetpoint.y_hal, mpc.conHeat_hal) annotation (Line(points={{-61, + -162},{-61,-162},{19,-162},{19,-111.6}}, color={0,0,127})); + connect(DualSetpoint.y_eas, mpc.conHeat_eas) annotation (Line(points={{-61, + -166},{-61,-166},{40.1667,-166},{40.1667,-111.6}}, color={0, + 0,127})); + + annotation (Diagram(coordinateSystem(extent={{-600,-240},{280,240}})), Icon( + coordinateSystem(extent={{-600,-240},{280,240}})), + experiment(StopTime=604800, Interval=300), + __Dymola_experimentSetupOutput); + end RunMPC; + + model MPC "Open loop MPC model of the three zones" + extends Modelica.Blocks.Icons.Block; + + replaceable package Medium = Buildings.Media.Air "Medium model"; + + parameter Modelica.SIunits.Angle lon=-122*Modelica.Constants.pi/180; + parameter Modelica.SIunits.Angle lat=38*Modelica.Constants.pi/180; + parameter Modelica.SIunits.Time timZon=-8*3600; + parameter Modelica.SIunits.Time modTimOffset=0; + Modelica.Blocks.Interfaces.RealInput intRad_wes + "Radiant, convective and latent heat input into room (positive if heat gain)" + annotation (Placement(transformation(extent={{280,180},{240,220}}))); + Modelica.Blocks.Interfaces.RealInput intCon_wes + "Radiant, convective and latent heat input into room (positive if heat gain)" + annotation (Placement(transformation(extent={{280,150},{240,190}}))); + Modelica.Blocks.Interfaces.RealInput intLat_wes + "Radiant, convective and latent heat input into room (positive if heat gain)" + annotation (Placement(transformation(extent={{280,120},{240,160}}))); + Modelica.Blocks.Interfaces.RealInput intRad_hal + "Radiant, convective and latent heat input into room (positive if heat gain)" + annotation (Placement(transformation(extent={{280,80},{240,120}}))); + Modelica.Blocks.Interfaces.RealInput intCon_hal + "Radiant, convective and latent heat input into room (positive if heat gain)" + annotation (Placement(transformation(extent={{280,50},{240,90}}))); + Modelica.Blocks.Interfaces.RealInput intLat_hal + "Radiant, convective and latent heat input into room (positive if heat gain)" + annotation (Placement(transformation(extent={{280,20},{240,60}}))); + Modelica.Blocks.Interfaces.RealInput intRad_eas + "Radiant, convective and latent heat input into room (positive if heat gain)" + annotation (Placement(transformation(extent={{280,-20},{240,20}}))); + Modelica.Blocks.Interfaces.RealInput intCon_eas + "Radiant, convective and latent heat input into room (positive if heat gain)" + annotation (Placement(transformation(extent={{280,-50},{240,-10}}))); + Modelica.Blocks.Interfaces.RealInput intLat_eas + "Radiant, convective and latent heat input into room (positive if heat gain)" + annotation (Placement(transformation(extent={{280,-80},{240,-40}}))); + Modules.modExt exteas( + lat=lat, + A_ext=1.51, + til=1.5707963267949, + azi=-1.5707963267949) + annotation (Placement(transformation(extent={{64,20},{84,40}}))); + Modules.modZon eas(A_zon=13.7954) + annotation (Placement(transformation(extent={{68,-10},{88,10}}))); + Modules.modAdj adjeas(A_adj=10.22) + annotation (Placement(transformation(extent={{34,-10},{54,10}}))); + Modules.modZon hal(A_zon=9.09792) + annotation (Placement(transformation(extent={{-2,-10},{18,10}}))); + Modules.modAdj adjwes(A_adj=10.22) + annotation (Placement(transformation(extent={{-38,-10},{-18,10}}))); + Modules.modZon wes(A_zon=13.7954) + annotation (Placement(transformation(extent={{-76,-10},{-56,10}}))); + Modules.modExt extwes( + lat=lat, + A_ext=1.51, + til=1.5707963267949, + azi=1.5707963267949) + annotation (Placement(transformation(extent={{-76,20},{-56,40}}))); + Modules.modWin winwes( + lat=lat, + A_win=8.71, + til=1.5707963267949, + azi=1.5707963267949) + annotation (Placement(transformation(extent={{-76,-40},{-56,-20}}))); + Modules.modWin wineas( + lat=lat, + A_win=8.71, + azi(displayUnit="deg") = -1.5707963267949, + til=1.5707963267949) + annotation (Placement(transformation(extent={{64,-40},{84,-20}}))); + protected + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temSen + "Room air temperature sensor" + annotation (Placement(transformation(extent={{-2,-64},{18,-44}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temSen1 + "Room air temperature sensor" + annotation (Placement(transformation(extent={{24,-88},{44,-68}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temSen2 + "Room air temperature sensor" + annotation (Placement(transformation(extent={{66,-106},{86,-86}}))); + public + Modelica.Blocks.Interfaces.RealOutput easTdb(unit = "K") + annotation (Placement(transformation(extent={{240,-150},{260,-130}}))); + Modelica.Blocks.Interfaces.RealOutput halTdb(unit = "K") + annotation (Placement(transformation(extent={{240,-130},{260,-110}}))); + Modelica.Blocks.Interfaces.RealOutput wesTdb(unit = "K") + annotation (Placement(transformation(extent={{240,-110},{260,-90}}))); + Modelica.Blocks.Interfaces.RealInput weaPAtm "Input pressure" + annotation (Placement(transformation(extent={{-280,220},{-240,260}}))); + Modelica.Blocks.Interfaces.RealInput weaTDewPoi + "Input dew point temperature" + annotation (Placement(transformation(extent={{-280,190},{-240,230}}))); + Modelica.Blocks.Interfaces.RealInput weaTDryBul + "Input dry bulb temperature" + annotation (Placement(transformation(extent={{-280,160},{-240,200}}))); + Modelica.Blocks.Interfaces.RealInput weaRelHum + "Input relative humidity" + annotation (Placement(transformation(extent={{-280,130},{-240,170}}))); + Modelica.Blocks.Interfaces.RealInput weaNOpa "Input opaque sky cover" + annotation (Placement(transformation(extent={{-280,100},{-240,140}}))); + Modelica.Blocks.Interfaces.RealInput weaCelHei "Input ceiling height" + annotation (Placement(transformation(extent={{-280,70},{-240,110}}))); + Modelica.Blocks.Interfaces.RealInput weaNTot "Input total sky cover" + annotation (Placement(transformation(extent={{-280,40},{-240,80}}))); + Modelica.Blocks.Interfaces.RealInput weaWinSpe "Input wind speed" + annotation (Placement(transformation(extent={{-280,10},{-240,50}}))); + Modelica.Blocks.Interfaces.RealInput weaWinDir "Input wind direction" + annotation (Placement(transformation(extent={{-280,-20},{-240,20}}))); + Modelica.Blocks.Interfaces.RealInput weaHHorIR + "Input diffuse horizontal radiation" + annotation (Placement(transformation(extent={{-280,-50},{-240,-10}}))); + Modelica.Blocks.Interfaces.RealInput weaHDirNor + "Input infrared horizontal radiation" + annotation (Placement(transformation(extent={{-280,-80},{-240,-40}}))); + Modelica.Blocks.Interfaces.RealInput weaHGloHor + "Input direct normal radiation" + annotation (Placement(transformation(extent={{-280,-110},{-240,-70}}))); + Modelica.Blocks.Interfaces.RealInput weaHDifHor + "Input global horizontal radiation" annotation (Placement( + transformation(extent={{-280,-140},{-240,-100}}))); + Modelica.Blocks.Interfaces.RealInput weaTBlaSky + "Input global horizontal radiation" annotation (Placement( + transformation(extent={{-280,-170},{-240,-130}}))); + Modelica.Blocks.Interfaces.RealInput weaTWetBul + "Input global horizontal radiation" annotation (Placement( + transformation(extent={{-280,-200},{-240,-160}}))); + Modelica.Blocks.Interfaces.RealInput weaCloTim + "Input global horizontal radiation" annotation (Placement( + transformation(extent={{-280,-260},{-240,-220}}))); + Modelica.Blocks.Interfaces.RealInput weaSolTim + "Input global horizontal radiation" annotation (Placement( + transformation(extent={{-280,-290},{-240,-250}}))); + Modelica.Blocks.Interfaces.RealInput weaSolZen + "Input global horizontal radiation" annotation (Placement( + transformation(extent={{-280,-230},{-240,-190}}))); + BoundaryConditions.Wea2Bus wea2Bus + annotation (Placement(transformation(extent={{-164,138},{-120,242}}))); + Modelica.Blocks.Interfaces.RealInput conHeat_eas(unit = "1") + "HVAC Heating Input for eas Zone" annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={40,-260}))); + Modelica.Blocks.Interfaces.RealInput conHeat_hal(unit = "1") + "HVAC Heating Input for hal Zone" annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={0,-260}))); + Modelica.Blocks.Interfaces.RealInput conHeat_wes(unit = "1") + "HVAC Heating Input for wes Zone" annotation (Placement(transformation( + extent={{-20,-20},{20,20}}, + rotation=90, + origin={-40,-260}))); + HVAC.ConvectiveHeater convectiveHeater_wes(eff=0.99, + q_max=1034.655) + annotation (Placement(transformation(extent={{-60,-76},{-40,-56}}))); + HVAC.ConvectiveHeater convectiveHeater_eas(eff=0.99, + q_max=827.724) + annotation (Placement(transformation(extent={{-60,-116},{-40,-96}}))); + Modelica.Blocks.Interfaces.RealOutput wesPhvac(unit = "W") + annotation (Placement(transformation(extent={{240,-170},{260,-150}}))); + Modelica.Blocks.Interfaces.RealOutput easPhvac(unit = "W") + annotation (Placement(transformation(extent={{240,-210},{260,-190}}))); + Modelica.Blocks.Math.Add3 add + annotation (Placement(transformation(extent={{210,-250},{230,-230}}))); + Modelica.Blocks.Interfaces.RealOutput Ptot(unit = "W") + annotation (Placement(transformation(extent={{240,-250},{260,-230}}))); + HVAC.ConvectiveHeater convectiveHeater_hal(eff=0.99, + q_max=350) + annotation (Placement(transformation(extent={{-60,-96},{-40,-76}}))); + Modelica.Blocks.Interfaces.RealOutput halPhvac(unit = "W") + annotation (Placement(transformation(extent={{240,-190},{260,-170}}))); + equation + + // Fluid connections + connect(extwes.porZon, wes.porZon) annotation (Line(points={{-55,30},{ + -46,30},{-46,5},{-55,5}}, + color={191,0,0})); + connect(wes.porZon, adjwes.porAdj) annotation (Line(points={{-55,5},{ + -42,5},{-42,0},{-39,0}}, + color={191,0,0})); + connect(adjwes.porZon, hal.porZon) + annotation (Line(points={{-17,0},{19,0},{19,5}}, color={191,0,0})); + connect(adjeas.porZon, eas.porZon) + annotation (Line(points={{55,0},{89,0},{89,5}}, color={191,0,0})); + connect(exteas.porZon, eas.porZon) + annotation (Line(points={{85,30},{96,30},{96,5},{89,5}}, color={191,0,0})); + + connect(intRad_wes, wes.intRad) annotation (Line(points={{260,200},{260, + 200},{210,200},{210,174},{-44,174},{-44,62},{-88,62},{-88,-7},{ + -78,-7}}, color={0,0,127})); + connect(intCon_wes, wes.intCon) annotation (Line(points={{260,170},{-40, + 170},{-40,58},{-84,58},{-84,7},{-78,7}}, color={0,0,127})); + connect(intRad_hal, hal.intRad) annotation (Line(points={{260,100},{-12, + 100},{-12,-7},{-4,-7}}, color={0,0,127})); + connect(intCon_hal, hal.intCon) annotation (Line(points={{260,70},{210,70}, + {210,104},{-8,104},{-8,7},{-4,7}}, color={0,0,127})); + connect(intRad_eas, eas.intRad) annotation (Line(points={{260,0},{210,0}, + {210,28},{116,28},{116,16},{60,16},{60,-6},{66,-6},{66,-7}}, + color={0,0, + 127})); + connect(intCon_eas, eas.intCon) annotation (Line(points={{260,-30},{206, + -30},{206,22},{120,22},{120,12},{62,12},{62,6},{66,6},{66,7}}, + color={0, + 0,127})); + connect(hal.porZon, adjeas.porAdj) + annotation (Line(points={{19,5},{19,0},{33,0}}, color={191,0,0})); + connect(temSen.port, wes.porZon) annotation (Line(points={{-2,-54},{-2,-44},{-46, + -44},{-46,5},{-55,5}}, color={191,0,0})); + connect(temSen1.port, adjeas.porAdj) + annotation (Line(points={{24,-78},{24,0},{33,0}}, color={191,0,0})); + connect(temSen.T, wesTdb) annotation (Line(points={{18,-54},{18,-54},{96,-54},{96, + -78},{216,-78},{216,-100},{250,-100}}, color={0,0,127})); + connect(temSen1.T, halTdb) annotation (Line(points={{44,-78},{44,-80},{212,-80}, + {212,-120},{250,-120}}, color={0,0,127})); + connect(eas.porZon, temSen2.port) annotation (Line(points={{89,5},{120,5},{120,-48}, + {54,-48},{54,-96},{66,-96}}, color={191,0,0})); + connect(temSen2.T, easTdb) annotation (Line(points={{86,-96},{86,-96},{96,-96},{ + 96,-82},{208,-82},{208,-140},{250,-140}}, color={0,0, + 127})); + connect(winwes.porZon, wes.porZon) annotation (Line(points={{-55,-30},{ + -46,-30},{-46,5},{-55,5}}, color={191,0,0})); + connect(wineas.porZon, eas.porZon) annotation (Line(points={{85,-30},{96, + -30},{96,5},{89,5}}, color={191,0,0})); + connect(weaPAtm, wea2Bus.weaPAtm) + annotation (Line(points={{-260,240},{-166,240}}, color={0,0,127})); + connect(weaTDewPoi, wea2Bus.weaTDewPoi) annotation (Line(points={{-260, + 210},{-236,210},{-236,234},{-166,234}}, color={0,0,127})); + connect(weaTDryBul, wea2Bus.weaTDryBul) annotation (Line(points={{-260, + 180},{-234,180},{-234,228},{-166,228}}, color={0,0,127})); + connect(weaRelHum, wea2Bus.weaRelHum) annotation (Line(points={{-260,150}, + {-232,150},{-232,222},{-166,222}}, color={0,0,127})); + connect(weaNOpa, wea2Bus.weaNOpa) annotation (Line(points={{-260,120},{ + -230,120},{-230,216},{-166,216}}, color={0,0,127})); + connect(weaCelHei, wea2Bus.weaCelHei) annotation (Line(points={{-260,90}, + {-228,90},{-228,210},{-166,210}}, color={0,0,127})); + connect(weaNTot, wea2Bus.weaNTot) annotation (Line(points={{-260,60},{ + -226,60},{-226,204},{-166,204}}, color={0,0,127})); + connect(weaWinSpe, wea2Bus.weaWinSpe) annotation (Line(points={{-260,30}, + {-224,30},{-224,198},{-166,198}}, color={0,0,127})); + connect(weaWinDir, wea2Bus.weaWinDir) annotation (Line(points={{-260,0},{ + -222,0},{-222,192},{-166,192}}, color={0,0,127})); + connect(weaHHorIR, wea2Bus.weaHHorIR) annotation (Line(points={{-260,-30}, + {-220,-30},{-220,186},{-166,186}}, color={0,0,127})); + connect(weaHDirNor, wea2Bus.weaHDirNor) annotation (Line(points={{-260, + -60},{-218,-60},{-218,180},{-166,180}}, color={0,0,127})); + connect(weaHGloHor, wea2Bus.weaHGloHor) annotation (Line(points={{-260, + -90},{-216,-90},{-216,174},{-166,174}}, color={0,0,127})); + connect(weaHDifHor, wea2Bus.weaHDifHor) annotation (Line(points={{-260, + -120},{-214,-120},{-214,168},{-166,168}}, color={0,0,127})); + connect(weaTBlaSky, wea2Bus.weaTBlaSky) annotation (Line(points={{-260, + -150},{-212,-150},{-212,162.2},{-166,162.2}}, color={0,0,127})); + connect(weaTWetBul, wea2Bus.weaTWetBul) annotation (Line(points={{-260, + -180},{-210,-180},{-210,156},{-166,156}}, color={0,0,127})); + connect(weaSolZen, wea2Bus.weaSolZen) annotation (Line(points={{-260,-210}, + {-208,-210},{-208,149.8},{-166,149.8}}, color={0,0,127})); + connect(weaCloTim, wea2Bus.weaCloTim) annotation (Line(points={{-260,-240}, + {-206,-240},{-206,144},{-166,144}}, color={0,0,127})); + connect(weaSolTim, wea2Bus.weaSolTim) annotation (Line(points={{-260,-270}, + {-204,-270},{-204,138},{-166,138}}, color={0,0,127})); + connect(wea2Bus.weaBus, extwes.weaBus) annotation (Line( + points={{-120,190},{-114,190},{-110,190},{-110,30},{-77,30}}, + color={255,204,51}, + thickness=0.5)); + connect(wea2Bus.weaBus, winwes.weaBus) annotation (Line( + points={{-120,190},{-110,190},{-110,-30},{-77,-30}}, + color={255,204,51}, + thickness=0.5)); + connect(wea2Bus.weaBus, wineas.weaBus) annotation (Line( + points={{-120,190},{-110,190},{-110,40},{28,40},{28,-30},{63,-30}}, + color={255,204,51}, + thickness=0.5)); + connect(wea2Bus.weaBus, exteas.weaBus) annotation (Line( + points={{-120,190},{-110,190},{-110,40},{28,40},{28,30},{63,30}}, + color={255,204,51}, + thickness=0.5)); + connect(convectiveHeater_wes.HeatOutput, wes.porZon) annotation (Line(points={ + {-39.6,-66},{-24,-66},{-24,-16},{-46,-16},{-46,5},{-55,5}}, color={191, + 0,0})); + connect(convectiveHeater_eas.HeatOutput, eas.porZon) annotation (Line(points={ + {-39.6,-106},{-24,-106},{-12,-106},{-12,-16},{46,-16},{96,-16},{96,5}, + {89,5}}, color={191,0,0})); + connect(conHeat_wes, convectiveHeater_wes.u) annotation (Line(points={{-40, + -260},{-40,-260},{-40,-180},{-40,-176},{-102,-176},{-102,-66},{ + -62,-66}}, + color={0,0,127})); + connect(conHeat_eas, convectiveHeater_eas.u) annotation (Line(points={{40,-260}, + {40,-260},{40,-160},{40,-154},{-94,-154},{-94,-106},{-62,-106}}, + color={0,0,127})); + connect(convectiveHeater_wes.P_e, wesPhvac) annotation (Line(points={{-39,-72}, + {-2,-72},{-2,-110},{110,-110},{110,-86},{184,-86},{184,-160},{250,-160}}, + color={0,0,127})); + connect(convectiveHeater_eas.P_e, easPhvac) annotation (Line(points={{-39,-112}, + {-39,-112},{-10,-112},{-10,-118},{114,-118},{114,-90},{176,-90},{176,-200}, + {250,-200}}, color={0,0,127})); + connect(add.y,Ptot) + annotation (Line(points={{231,-240},{250,-240}}, color={0,0,127})); + connect(add.u1, wesPhvac) annotation (Line(points={{208,-232},{184,-232}, + {184,-160},{250,-160}}, color={0,0,127})); + connect(conHeat_hal, convectiveHeater_hal.u) annotation (Line(points={{0,-260}, + {0,-260},{0,-166},{0,-164},{-98,-164},{-98,-86},{-62,-86}}, + color={0,0,127})); + connect(convectiveHeater_hal.P_e, halPhvac) annotation (Line(points={{-39, + -92},{-6,-92},{-6,-114},{112,-114},{112,-88},{180,-88},{180,-180}, + {250,-180}}, color={0,0,127})); + connect(add.u2, halPhvac) annotation (Line(points={{208,-240},{180,-240}, + {180,-180},{250,-180}}, color={0,0,127})); + connect(add.u3, easPhvac) annotation (Line(points={{208,-248},{176,-248}, + {176,-200},{250,-200}}, color={0,0,127})); + connect(convectiveHeater_hal.HeatOutput, adjeas.porAdj) annotation (Line( + points={{-39.6,-86},{-18,-86},{-18,-14},{24,-14},{24,0},{33,0}}, + color={191,0,0})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, + -240},{240,260}}), graphics={ + Rectangle( + extent={{-130,124},{138,-122}}, + lineColor={0,0,0}, + lineThickness=1, + fillPattern=FillPattern.Solid, + fillColor={255,255,255}), + Text( + extent={{64,-122},{136,-138}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="Reduced Order Model"), + Text( + extent={{-164,134},{-120,122}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="Weather Input", + fontSize=12), + Rectangle( + extent={{-118,132},{-102,114}}, + lineColor={255,255,255}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-50,132},{-34,114}}, + lineColor={255,255,255}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid), + Text( + extent={{-32,136},{46,122}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + fontSize=12, + textString="Internal Load West Input"), + Rectangle( + extent={{-8,9},{8,-9}}, + lineColor={255,255,255}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + origin={138,103}, + rotation=90), + Text( + extent={{138,122},{216,108}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + fontSize=12, + textString="Internal Load Hall Input"), + Text( + extent={{138,44},{216,30}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + fontSize=12, + textString="Internal Load East Input"), + Rectangle( + extent={{-8,9},{8,-9}}, + lineColor={255,255,255}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + origin={138,25}, + rotation=90), + Rectangle( + extent={{-11.5,9.5},{11.5,-9.5}}, + lineColor={255,255,255}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + origin={137.5,-84.5}, + rotation=90), + Text( + extent={{138,-62},{216,-76}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + fontSize=12, + textString="Measurement Outputs"), + Rectangle( + extent={{-8,9},{8,-9}}, + lineColor={255,255,255}, + fillColor={0,0,0}, + fillPattern=FillPattern.Solid, + origin={-98,-123}, + rotation=180), + Text( + extent={{-96,-124},{-20,-136}}, + lineColor={0,0,0}, + lineThickness=1, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + fontSize=12, + textString="Control Signals")}), + Icon(coordinateSystem(preserveAspectRatio=false, + extent={{-240,-240},{240,260}}), + graphics={ + Rectangle( + extent={{-240,260},{240,-280}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-80,-30},{80,26}}, + lineColor={95,95,95}, + fillColor={95,95,95}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-74,18},{-24,-20}}, + pattern=LinePattern.None, + lineColor={117,148,176}, + fillColor={170,213,255}, + fillPattern=FillPattern.Sphere), + Rectangle( + extent={{-80,16},{-74,-18}}, + lineColor={95,95,95}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{-78,16},{-76,-18}}, + lineColor={95,95,95}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{24,18},{74,-20}}, + pattern=LinePattern.None, + lineColor={117,148,176}, + fillColor={170,213,255}, + fillPattern=FillPattern.Sphere), + Rectangle( + extent={{-16,18},{16,-20}}, + pattern=LinePattern.None, + lineColor={117,148,176}, + fillColor={170,213,255}, + fillPattern=FillPattern.Sphere), + Rectangle( + extent={{74,16},{80,-18}}, + lineColor={95,95,95}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Rectangle( + extent={{76,16},{78,-18}}, + lineColor={95,95,95}, + fillColor={170,213,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{20,100},{96,68}}, + lineColor={0,0,127}, + textString="TRoo"), + Text( + extent={{20,74},{96,42}}, + lineColor={0,0,127}, + textString="Xi"), + Text( + extent={{22,-44},{98,-76}}, + lineColor={0,0,127}, + textString="HDirWin")})); + end MPC; + + package Modules "RC modules for multi-zone building" + model modZon + parameter Modelica.SIunits.Area A_zon = 1; + parameter Units.HeatCapacityCoefficient c_zon=2500 + annotation (Fixed=false); + parameter Units.HeatCapacityCoefficient c_int=150000 + annotation (Fixed=false); + parameter Units.HeatResistanceCoefficient r_int=0.2 + annotation (Fixed=false); + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor capZon(C = c_zon*A_zon) + annotation (Placement(transformation(extent={{-24,-14},{-4,-34}}))); + + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor capInt(C = c_int*A_zon) + annotation (Placement(transformation(extent={{8,-14},{28,-34}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalResistor resInt(R=r_int/ + A_zon) + annotation (Placement(transformation(extent={{-8,6},{12,26}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow preCon + annotation (Placement(transformation(extent={{-60,60},{-40,80}}))); + Modelica.Blocks.Interfaces.RealInput intCon + annotation (Placement(transformation(extent={{-140,50},{-100,90}}))); + Modelica.Blocks.Interfaces.RealInput intRad + annotation (Placement(transformation(extent={{-140,-90},{-100,-50}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow preRad + annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b porZon + annotation (Placement(transformation(extent={{100,40},{120,60}}), + iconTransformation(extent={{100,40},{120,60}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b porInt annotation ( + Placement(transformation(extent={{100,-60},{120,-40}}), + iconTransformation(extent={{100,-60},{120,-40}}))); + Modelica.Blocks.Math.Gain areCon(k=A_zon) + annotation (Placement(transformation(extent={{-90,60},{-70,80}}))); + Modelica.Blocks.Math.Gain areRad(k=A_zon) + annotation (Placement(transformation(extent={{-90,-80},{-70,-60}}))); + equation + connect(resInt.port_b, capInt.port) + annotation (Line(points={{12,16},{18,16},{18,-14}}, color={191,0,0})); + connect(preCon.port, capZon.port) annotation (Line(points={{-40,70},{-30, + 70},{-30,-14},{-14,-14}}, color={191,0,0})); + connect(preRad.port, capInt.port) annotation (Line(points={{-40,-70},{2, + -70},{2,-14},{18,-14}}, color={191,0,0})); + connect(capZon.port, resInt.port_a) + annotation (Line(points={{-14,-14},{-14,16},{-8,16}}, + color={191,0,0})); + connect(capZon.port, porZon) + annotation (Line(points={{-14,-14},{-14,50},{110,50}},color={191,0,0})); + connect(capInt.port, porInt) annotation (Line(points={{18,-14},{32,-14},{ + 48,-14},{48,-50},{110,-50}}, + color={191,0,0})); + connect(intCon, areCon.u) + annotation (Line(points={{-120,70},{-92,70}}, color={0,0,127})); + connect(areCon.y, preCon.Q_flow) + annotation (Line(points={{-69,70},{-60,70}}, color={0,0,127})); + connect(intRad, areRad.u) + annotation (Line(points={{-120,-70},{-92,-70}}, color={0,0,127})); + connect(areRad.y, preRad.Q_flow) + annotation (Line(points={{-69,-70},{-60,-70}}, color={0,0,127})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-44,36},{42,-34}}, + lineColor={0,0,0}, + textStyle={TextStyle.Bold}, + textString="modZon")}), Diagram( + coordinateSystem(preserveAspectRatio=false))); + end modZon; + + model modExt + parameter Modelica.SIunits.Area A_ext = 1; + parameter Units.HeatResistanceCoefficient r_out=0.1 + annotation (Fixed=false); + parameter Units.HeatResistanceCoefficient r_zon=2 annotation (Fixed=false); + parameter Units.HeatCapacityCoefficient c_bou=15000 + annotation (Fixed=false); + parameter Modelica.SIunits.DimensionlessRatio abs = 0.6 annotation(Fixed=false); + parameter Modelica.SIunits.Angle til = Modelica.Constants.pi/2; + parameter Modelica.SIunits.Angle azi = 0; + parameter Modelica.SIunits.Angle lat = 38*Modelica.Constants.pi/180; + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor capExt(C = c_bou*A_ext) + annotation (Placement(transformation(extent={{40,-50},{60,-70}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalResistor resExtZon(R = r_zon/A_ext) + annotation (Placement(transformation(extent={{60,60},{80,80}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalResistor resExtOut(R = r_out/A_ext) + annotation (Placement(transformation(extent={{20,60},{40,80}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature preTdb + annotation (Placement(transformation(extent={{-20,60},{0,80}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow preIto + annotation (Placement(transformation(extent={{22,-60},{42,-40}}))); + + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b porZon + annotation (Placement(transformation(extent={{100,-10},{120,10}}), + iconTransformation(extent={{100,-10},{120,10}}))); + Modelica.Blocks.Math.Gain absIto(k = abs*A_ext) + annotation (Placement(transformation(extent={{-4,-60},{16,-40}}))); + Buildings.BoundaryConditions.WeatherData.Bus weaBus annotation (Placement( + transformation(extent={{-120,-20},{-80,20}}), iconTransformation( + extent={{-120,-10},{-100,10}}))); + Buildings.BoundaryConditions.SolarIrradiation.DiffuseIsotropic HDifTilIso(til=til) + annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); + Buildings.BoundaryConditions.SolarIrradiation.DirectTiltedSurface HDirTil( + til=til, + lat=lat, + azi=azi) + annotation (Placement(transformation(extent={{-60,-80},{-40,-60}}))); + Modelica.Blocks.Math.Add add + annotation (Placement(transformation(extent={{-28,-58},{-12,-42}}))); + equation + connect(preTdb.port, resExtOut.port_a) + annotation (Line(points={{0,70},{0,70},{20,70}}, color={191,0,0})); + connect(resExtZon.port_b, porZon) + annotation (Line(points={{80,70},{110,70},{110,0}},color={191,0,0})); + connect(absIto.y, preIto.Q_flow) annotation (Line(points={{17,-50},{17, + -50},{22,-50}}, color={0,0,127})); + connect(preIto.port, capExt.port) + annotation (Line(points={{42,-50},{42,-50},{50,-50}}, color={191,0,0})); + connect(weaBus.TDryBul, preTdb.T) annotation (Line( + points={{-100,0},{-62,0},{-62,70},{-22,70}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus, HDifTilIso.weaBus) annotation (Line( + points={{-100,0},{-80,0},{-80,-30},{-60,-30}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus, HDirTil.weaBus) annotation (Line( + points={{-100,0},{-80,0},{-80,-70},{-60,-70}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(absIto.u, add.y) + annotation (Line(points={{-6,-50},{-11.2,-50}}, color={0,0,127})); + connect(HDifTilIso.H, add.u1) annotation (Line(points={{-39,-30},{-34,-30}, + {-34,-45.2},{-29.6,-45.2}}, color={0,0,127})); + connect(HDirTil.H, add.u2) annotation (Line(points={{-39,-70},{-34,-70},{ + -34,-54.8},{-29.6,-54.8}}, color={0,0,127})); + connect(resExtOut.port_b, capExt.port) + annotation (Line(points={{40,70},{50,70},{50,-50}}, color={191,0,0})); + connect(resExtZon.port_a, capExt.port) + annotation (Line(points={{60,70},{50,70},{50,-50}}, color={191,0,0})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-38,38},{48,-32}}, + lineColor={0,0,0}, + textStyle={TextStyle.Bold}, + textString="modExt"), + Rectangle(extent={{-100,100},{100,-100}}, lineColor={0,0,0})}), + Diagram( + coordinateSystem(preserveAspectRatio=false))); + end modExt; + + model modWin + parameter Modelica.SIunits.Area A_win = 1; + parameter Units.HeatResistanceCoefficient r_win=0.3 + annotation (Fixed=false); + parameter Modelica.SIunits.DimensionlessRatio g = 0.75 annotation(Fixed=false); + parameter Modelica.SIunits.Angle til = Modelica.Constants.pi/2; + parameter Modelica.SIunits.Angle azi = 0; + parameter Modelica.SIunits.Angle lat = 38*Modelica.Constants.pi/180; + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow preSol + annotation (Placement(transformation(extent={{36,-40},{56,-20}}))); + Modelica.Blocks.Math.Gain solWin(k=g*A_win) + annotation (Placement(transformation(extent={{0,-40},{20,-20}}))); + Buildings.BoundaryConditions.SolarIrradiation.DiffuseIsotropic HDifTilIso(til=til) + annotation (Placement(transformation(extent={{-70,-20},{-50,0}}))); + Buildings.BoundaryConditions.SolarIrradiation.DirectTiltedSurface HDirTil( + til=til, + lat=lat, + azi=azi) + annotation (Placement(transformation(extent={{-70,-60},{-50,-40}}))); + Modelica.Blocks.Math.Add add + annotation (Placement(transformation(extent={{-38,-38},{-22,-22}}))); + Buildings.BoundaryConditions.WeatherData.Bus weaBus annotation (Placement( + transformation(extent={{-120,-20},{-80,20}}), iconTransformation( + extent={{-120,-10},{-100,10}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalResistor resWin(R=r_win/A_win) + annotation (Placement(transformation(extent={{30,20},{50,40}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature preTdb + annotation (Placement(transformation(extent={{-10,20},{10,40}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b porZon annotation ( + Placement(transformation(extent={{80,20},{100,40}}), iconTransformation( + extent={{100,-10},{120,10}}))); + equation + connect(solWin.y,preSol. Q_flow) + annotation (Line(points={{21,-30},{36,-30}}, color={0,0,127})); + connect(weaBus, HDifTilIso.weaBus) annotation (Line( + points={{-100,0},{-78,0},{-78,-10},{-70,-10}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus, HDirTil.weaBus) annotation (Line( + points={{-100,0},{-78,0},{-78,-50},{-70,-50}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(HDifTilIso.H, add.u1) annotation (Line(points={{-49,-10},{-44,-10},{-44, + -25.2},{-39.6,-25.2}}, color={0,0,127})); + connect(HDirTil.H, add.u2) annotation (Line(points={{-49,-50},{-44,-50},{-44,-34.8}, + {-39.6,-34.8}}, color={0,0,127})); + connect(add.y,solWin. u) + annotation (Line(points={{-21.2,-30},{-2,-30}}, + color={0,0,127})); + connect(preTdb.port, resWin.port_a) + annotation (Line(points={{10,30},{10,30},{30,30}}, color={191,0,0})); + connect(weaBus.TDryBul, preTdb.T) annotation (Line( + points={{-100,0},{-78,0},{-78,30},{-12,30}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(resWin.port_b, porZon) annotation (Line(points={{50,30},{56,30},{60,30}, + {90,30}}, color={191,0,0})); + connect(preSol.port, porZon) + annotation (Line(points={{56,-30},{90,-30},{90,30}}, color={191,0,0})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-42,38},{44,-32}}, + lineColor={0,0,0}, + textStyle={TextStyle.Bold}, + textString="modWin"), + Rectangle(extent={{-100,100},{100,-100}}, lineColor={0,0,0})}), + Diagram( + coordinateSystem(preserveAspectRatio=false))); + end modWin; + + model modAdj + parameter Modelica.SIunits.Area A_adj = 1; + parameter Units.HeatResistanceCoefficient r_adj=0.3 + annotation (Fixed=false); + parameter Units.HeatResistanceCoefficient r_zon=0.3 + annotation (Fixed=false); + parameter Units.HeatCapacityCoefficient c_bou=15000 + annotation (Fixed=false); + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor capBou(C = c_bou*A_adj) + annotation (Placement(transformation(extent={{-10,-12},{10,-32}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalResistor resBouAdj(R = r_adj/A_adj) + annotation (Placement(transformation(extent={{-28,-10},{-8,10}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalResistor resBouZon(R = r_zon/A_adj) + annotation (Placement(transformation(extent={{6,-10},{26,10}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a porAdj + annotation (Placement(transformation(extent={{-120,-10},{-100,10}}), + iconTransformation(extent={{-120,-10},{-100,10}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b porZon + annotation (Placement(transformation(extent={{100,-10},{120,10}}), + iconTransformation(extent={{100,-10},{120,10}}))); + equation + connect(resBouAdj.port_b, resBouZon.port_a) + annotation (Line(points={{-8,0},{6,0}}, color={191,0,0})); + connect(capBou.port, resBouZon.port_a) + annotation (Line(points={{0,-12},{0,0},{6,0}}, color={191,0,0})); + connect(resBouAdj.port_a, porAdj) + annotation (Line(points={{-28,0},{-110,0}}, color={191,0,0})); + connect(resBouZon.port_b, porZon) + annotation (Line(points={{26,0},{110,0}}, color={191,0,0})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-40,38},{46,-32}}, + lineColor={0,0,0}, + textStyle={TextStyle.Bold}, + textString="modAdj"), + Rectangle(extent={{-100,100},{100,-100}}, lineColor={0,0,0})}), + Diagram( + coordinateSystem(preserveAspectRatio=false))); + end modAdj; + + model modGnd + parameter Modelica.SIunits.Area A_gnd = 1; + parameter Units.HeatResistanceCoefficient r_out=0.3 + annotation (Fixed=false); + parameter Units.HeatResistanceCoefficient r_zon=0.3 + annotation (Fixed=false); + parameter Units.HeatCapacityCoefficient c_sla=200000 + annotation (Fixed=false); + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor capSla(C = c_sla*A_gnd) + annotation (Placement(transformation(extent={{-10,-12},{10,-32}}))); + Modelica.Blocks.Interfaces.RealInput weaGnd + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}), + iconTransformation(extent={{-140,-20},{-100,20}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature preGnd + annotation (Placement(transformation(extent={{-68,-10},{-48,10}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalResistor resGndOut(R = r_out/A_gnd) + annotation (Placement(transformation(extent={{-28,-10},{-8,10}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalResistor resGndZon(R = r_zon/A_gnd) + annotation (Placement(transformation(extent={{6,-10},{26,10}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b porZon + annotation (Placement(transformation(extent={{100,-10},{120,10}}), + iconTransformation(extent={{100,-10},{120,10}}))); + equation + connect(preGnd.T, weaGnd) + annotation (Line(points={{-70,0},{-70,0},{-120,0}}, color={0,0,127})); + connect(preGnd.port, resGndOut.port_a) + annotation (Line(points={{-48,0},{-48,0},{-28,0}}, color={191,0,0})); + connect(resGndOut.port_b, resGndZon.port_a) + annotation (Line(points={{-8,0},{6,0}}, color={191,0,0})); + connect(capSla.port, resGndZon.port_a) + annotation (Line(points={{0,-12},{0,0},{6,0}}, color={191,0,0})); + connect(resGndZon.port_b, porZon) + annotation (Line(points={{26,0},{110,0},{110,0}}, color={191,0,0})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Text( + extent={{-46,38},{40,-32}}, + lineColor={0,0,0}, + textStyle={TextStyle.Bold}, + textString="modGnd"), + Rectangle(extent={{-100,100},{100,-100}}, lineColor={0,0,0})}), + Diagram( + coordinateSystem(preserveAspectRatio=false))); + end modGnd; + + annotation (); + end Modules; + + package BoundaryConditions + "Package containing models for defining boundary conditions." + + block WeatherCalculator + "Reader for TMY3 weather data or user input data. Modification of Buildings.BoundaryConditions.WeatherData.ReaderTMY3." + + parameter Boolean computeWetBulbTemperature = true + "If true, then this model computes the wet bulb temperature" + annotation(Evaluate=true); + + parameter Boolean computeBlackSkyTemperature = true + "If true, then this model computes the black sky temperature" + annotation(Evaluate=true); + //-------------------------------------------------------------- + // Atmospheric pressure + Modelica.Blocks.Interfaces.RealInput pAtm_in( + final quantity="Pressure", + final unit="Pa", + displayUnit="Pa") "Input pressure" + annotation (Placement(transformation(extent={{-340,280},{-300,320}}), + iconTransformation(extent={{-340,280},{-300,320}}))); + //-------------------------------------------------------------- + // Ceiling height + Modelica.Blocks.Interfaces.RealInput ceiHei_in( + final quantity="Height", + final unit="m", + displayUnit="m") "Input ceiling height" + annotation (Placement(transformation(extent={{-340,-20},{-300,20}}), + iconTransformation(extent={{-340,-20},{-300,20}}))); + //-------------------------------------------------------------- + // Total sky cover + Modelica.Blocks.Interfaces.RealInput totSkyCov_in( + min=0, + max=1, + unit="1") "Input total sky cover" + annotation (Placement(transformation(extent={{-340,-80},{-300,-40}}), + iconTransformation(extent={{-340,-80},{-300,-40}}))); + //-------------------------------------------------------------- + // Opaque sky cover + Modelica.Blocks.Interfaces.RealInput opaSkyCov_in( + min=0, + max=1, + unit="1") "Input opaque sky cover" + annotation (Placement(transformation(extent={{-340,40},{-300,80}}), + iconTransformation(extent={{-340,40},{-300,80}}))); + //-------------------------------------------------------------- + // Dry bulb temperature + Modelica.Blocks.Interfaces.RealInput TDryBul_in( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC") "Input dry bulb temperature" + annotation (Placement(transformation(extent={{-340,160},{-300,200}}), + iconTransformation(extent={{-340,160},{-300,200}}))); + + //-------------------------------------------------------------- + // Dew point temperature + Modelica.Blocks.Interfaces.RealInput TDewPoi_in( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC") "Input dew point temperature" + annotation (Placement(transformation(extent={{-340,220},{-300,260}}), + iconTransformation(extent={{-340,220},{-300,260}}))); + + //-------------------------------------------------------------- + // Relative humidity + Modelica.Blocks.Interfaces.RealInput relHum_in( + min=0, + max=1, + unit="1") "Input relative humidity" + annotation (Placement(transformation(extent={{-340,100},{-300,140}}), + iconTransformation(extent={{-340,100},{-300,140}}))); + //-------------------------------------------------------------- + // Wind speed + Modelica.Blocks.Interfaces.RealInput winSpe_in( + final quantity="Velocity", + final unit="m/s", + min=0) "Input wind speed" + annotation (Placement(transformation(extent={{-340,-140},{-300,-100}}), + iconTransformation(extent={{-340,-140},{-300,-100}}))); + //-------------------------------------------------------------- + // Wind direction + Modelica.Blocks.Interfaces.RealInput winDir_in( + final quantity="Angle", + final unit="rad", + displayUnit="deg") "Input wind direction" + annotation (Placement(transformation(extent={{-340,-198},{-300,-158}}), + iconTransformation(extent={{-340,-198},{-300,-158}}))); + //-------------------------------------------------------------- + // Infrared horizontal radiation + Modelica.Blocks.Interfaces.RealInput HInfHor_in( + final quantity="RadiantEnergyFluenceRate", + final unit="W/m2") "Input infrared horizontal radiation" + annotation (Placement(transformation(extent={{-340,-260},{-300,-220}}), + iconTransformation(extent={{-340,-260},{-300,-220}}))); + //-------------------------------------------------------------- + parameter Buildings.BoundaryConditions.Types.RadiationDataSource HSou = Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HDirNor_HGloHor + "Global, diffuse, and direct normal radiation" + annotation (Evaluate=true, Dialog(group="Data source")); + //-------------------------------------------------------------- + // Global horizontal radiation + Modelica.Blocks.Interfaces.RealInput HGloHor_in( + final quantity="RadiantEnergyFluenceRate", + final unit="W/m2") if (HSou == Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HGloHor_HDifHor or HSou == Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HDirNor_HGloHor) + "Input global horizontal radiation" + annotation (Placement(transformation(extent={{-340,-380},{-300,-340}}), + iconTransformation(extent={{-340,-380},{-300,-340}}))); + //-------------------------------------------------------------- + // Diffuse horizontal radiation + Modelica.Blocks.Interfaces.RealInput HDifHor_in( + final quantity="RadiantEnergyFluenceRate", + final unit="W/m2") if (HSou == Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HGloHor_HDifHor or HSou == Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HDirNor_HDifHor) + "Input diffuse horizontal radiation" + annotation (Placement(transformation(extent={{-342,-440},{-302,-400}}), + iconTransformation(extent={{-238,-200},{-198,-160}}))); + //-------------------------------------------------------------- + // Direct normal radiation + Modelica.Blocks.Interfaces.RealInput HDirNor_in(final quantity="RadiantEnergyFluenceRate", + final unit="W/m2") if + (HSou == Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HDirNor_HDifHor or HSou == Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HDirNor_HGloHor) + "Input direct normal radiation" + annotation (Placement(transformation(extent={{-340,-320},{-300,-280}}), + iconTransformation(extent={{-340,-320},{-300,-280}}))); + + //-------------------------------------------------------------- + + parameter Modelica.SIunits.Angle lon(displayUnit="deg")= -122*3.14159/180 + "Longitude"; + parameter Modelica.SIunits.Angle lat(displayUnit="deg")= 38*3.14159/180 + "Latitude"; + parameter Modelica.SIunits.Time timZon(displayUnit="h")= -6*3600 + "Time zone"; + parameter Modelica.SIunits.Time modTimOffset(displayUnit="s") = 0 + "Local time at t = 0"; + Buildings.BoundaryConditions.WeatherData.Bus weaBus "Weather data bus" + annotation (Placement(transformation(extent={{258,-18},{278,2}}), + iconTransformation(extent={{190,-10},{210,10}}))); + + parameter Buildings.BoundaryConditions.Types.SkyTemperatureCalculation + calTSky=Buildings.BoundaryConditions.Types.SkyTemperatureCalculation.TemperaturesAndSkyCover + "Computation of black-body sky temperature if enabled" + annotation ( + choicesAllMatching=true, + Evaluate=true, + Dialog(group="Sky temperature")); + + constant Real epsCos = 1e-6 "Small value to avoid division by 0"; + + protected + Buildings.BoundaryConditions.WeatherData.BaseClasses.CheckTemperature + cheTemDryBul "Check dry bulb temperature " + annotation (Placement(transformation(extent={{128,-208},{148,-188}}))); + Buildings.BoundaryConditions.WeatherData.BaseClasses.CheckTemperature + cheTemDewPoi "Check dew point temperature" + annotation (Placement(transformation(extent={{128,-248},{148,-228}}))); + Buildings.BoundaryConditions.WeatherData.BaseClasses.CheckPressure chePre + "Check the air pressure" + annotation (Placement(transformation(extent={{128,52},{148,72}}))); + Buildings.BoundaryConditions.WeatherData.BaseClasses.CheckSkyCover cheTotSkyCov + "Check the total sky cover" + annotation (Placement(transformation(extent={{128,-48},{148,-28}}))); + Buildings.BoundaryConditions.WeatherData.BaseClasses.CheckSkyCover cheOpaSkyCov + "Check the opaque sky cover" + annotation (Placement(transformation(extent={{128,-168},{148,-148}}))); + Buildings.BoundaryConditions.WeatherData.BaseClasses.CheckRadiation cheGloHorRad + "Check the global horizontal radiation" + annotation (Placement(transformation(extent={{128,152},{148,172}}))); + Buildings.BoundaryConditions.WeatherData.BaseClasses.CheckRadiation cheDifHorRad + "Check the diffuse horizontal radiation" + annotation (Placement(transformation(extent={{128,112},{148,132}}))); + Buildings.BoundaryConditions.WeatherData.BaseClasses.CheckRadiation cheDirNorRad + "Check the direct normal radiation" + annotation (Placement(transformation(extent={{128,192},{148,212}}))); + Buildings.BoundaryConditions.WeatherData.BaseClasses.CheckCeilingHeight cheCeiHei + "Check the ceiling height" + annotation (Placement(transformation(extent={{128,-128},{148,-108}}))); + Buildings.BoundaryConditions.WeatherData.BaseClasses.CheckWindSpeed cheWinSpe + "Check the wind speed" + annotation (Placement(transformation(extent={{128,-88},{148,-68}}))); + Buildings.BoundaryConditions.WeatherData.BaseClasses.CheckIRRadiation cheHorRad + "Check the horizontal infrared irradiation" + annotation (Placement(transformation(extent={{128,232},{148,252}}))); + Buildings.BoundaryConditions.WeatherData.BaseClasses.CheckWindDirection cheWinDir + "Check the wind direction" + annotation (Placement(transformation(extent={{128,-288},{148,-268}}))); + Buildings.BoundaryConditions.SkyTemperature.BlackBody TBlaSkyCom(final + calTSky=calTSky) if computeBlackSkyTemperature + "Computation of the black-body sky temperature" + annotation (Placement(transformation(extent={{208,-228},{228,-208}}))); + DateRefTime modTim(refTime=modTimOffset) "Model time" + annotation (Placement(transformation(extent={{-222,12},{-202,32}}))); + Buildings.BoundaryConditions.WeatherData.BaseClasses.LocalCivilTime locTim( + final lon=lon, final timZon=timZon) "Local civil time" + annotation (Placement(transformation(extent={{-152,-168},{-132,-148}}))); + Buildings.BoundaryConditions.WeatherData.BaseClasses.EquationOfTime eqnTim + "Equation of time" + annotation (Placement(transformation(extent={{-152,-128},{-132,-108}}))); + Buildings.BoundaryConditions.WeatherData.BaseClasses.SolarTime solTim + "Solar time" + annotation (Placement(transformation(extent={{-112,-148},{-92,-128}}))); + // Conditional connectors + Modelica.Blocks.Interfaces.RealInput pAtm_in_internal( + final quantity="Pressure", + final unit="Pa", + displayUnit="bar") "Needed to connect to conditional connector"; + Modelica.Blocks.Interfaces.RealInput ceiHei_in_internal( + final quantity="Height", + final unit="m", + displayUnit="m") "Needed to connect to conditional connector"; + Modelica.Blocks.Interfaces.RealInput totSkyCov_in_internal( + final quantity="1", + min=0, + max=1) "Needed to connect to conditional connector"; + Modelica.Blocks.Interfaces.RealInput opaSkyCov_in_internal( + final quantity="1", + min=0, + max=1) "Needed to connect to conditional connector"; + Modelica.Blocks.Interfaces.RealInput TDryBul_in_internal( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC") "Needed to connect to conditional connector"; + Modelica.Blocks.Interfaces.RealInput TDewPoi_in_internal( + final quantity="ThermodynamicTemperature", + final unit="K", + displayUnit="degC") "Needed to connect to conditional connector"; + Modelica.Blocks.Interfaces.RealInput relHum_in_internal( + final quantity="1", + min=0, + max=1) "Needed to connect to conditional connector"; + Modelica.Blocks.Interfaces.RealInput winSpe_in_internal( + final quantity="Velocity", + final unit="m/s") "Needed to connect to conditional connector"; + Modelica.Blocks.Interfaces.RealInput winDir_in_internal( + final quantity="Angle", + final unit="rad", + displayUnit="deg") "Needed to connect to conditional connector"; + Modelica.Blocks.Interfaces.RealInput HGloHor_in_internal( + final quantity="RadiantEnergyFluenceRate", + final unit="W/m2") "Needed to connect to conditional connector"; + Modelica.Blocks.Interfaces.RealInput HDifHor_in_internal( + final quantity="RadiantEnergyFluenceRate", + final unit="W/m2") "Needed to connect to conditional connector"; + Modelica.Blocks.Interfaces.RealInput HDirNor_in_internal( + final quantity="RadiantEnergyFluenceRate", + final unit="W/m2") "Needed to connect to conditional connector"; + Modelica.Blocks.Interfaces.RealInput HInfHor_in_internal( + final quantity="RadiantEnergyFluenceRate", + final unit="W/m2") "Needed to connect to conditional connector"; + + Buildings.BoundaryConditions.WeatherData.BaseClasses.CheckRelativeHumidity cheRelHum + annotation (Placement(transformation(extent={{128,12},{148,32}}))); + Buildings.BoundaryConditions.SolarGeometry.BaseClasses.AltitudeAngle altAng + "Solar altitude angle" + annotation (Placement(transformation(extent={{-58,-266},{-38,-246}}))); + Buildings.BoundaryConditions.SolarGeometry.BaseClasses.ZenithAngle zenAng(final lat= + lat) "Zenith angle" + annotation (Placement(transformation(extent={{-94,-238},{-74,-218}}))); + Buildings.BoundaryConditions.SolarGeometry.BaseClasses.Declination decAng + "Declination angle" + annotation (Placement(transformation(extent={{-172,-228},{-152,-208}}))); + Buildings.BoundaryConditions.SolarGeometry.BaseClasses.SolarHourAngle solHouAng + annotation (Placement(transformation(extent={{-172,-258},{-152,-238}}))); + Latitude latitude(final latitude=lat) "Latitude" + annotation (Placement(transformation(extent={{-210,-318},{-190,-298}}))); + Longitude longitude(final longitude=lon) "Longitude" + annotation (Placement(transformation(extent={{-172,-288},{-152,-268}}))); + + //--------------------------------------------------------------------------- + // Optional instanciation of a block that computes the wet bulb temperature. + // This block may be needed for evaporative cooling towers. + // By default, it is enabled. This introduces a nonlinear equation, but + // we have not observed an increase in computing time because of this equation. + Buildings.Utilities.Psychrometrics.TWetBul_TDryBulPhi tWetBul_TDryBulXi( + redeclare package Medium = Buildings.Media.Air, TDryBul(displayUnit= + "degC")) if computeWetBulbTemperature + annotation (Placement(transformation(extent={{212,-74},{232,-54}}))); + + //--------------------------------------------------------------------------- + // Conversion blocks for sky cover + Buildings.BoundaryConditions.WeatherData.BaseClasses.CheckBlackBodySkyTemperature + cheTemBlaSky(TMin=0) if + computeBlackSkyTemperature "Check black body sky temperature" + annotation (Placement(transformation(extent={{208,-268},{228,-248}}))); + + // Blocks that are added in order to set the name of the output signal, + // which then is displayed in the GUI of the weather data connector. + block Latitude "Generate constant signal of type Real" + extends Modelica.Blocks.Icons.Block; + + parameter Modelica.SIunits.Angle latitude "Latitude"; + + Modelica.Blocks.Interfaces.RealOutput y( + unit="rad", + displayUnit="deg") "Latitude of the location" + annotation (Placement(transformation(extent={{100,-10},{120,10}}))); + equation + y = latitude; + annotation ( + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Text( + extent={{-81,32},{84,-24}}, + lineColor={0,0,0}, + textString="Latitude")}), + Diagram(coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}})), + Documentation(info=" +

+Block to output the latitude of the location. +This block is added so that the latitude is displayed +with a comment in the GUI of the weather bus connector. +

+

Implementation

+

+If + +Modelica.Blocks.Sources.Constant where used, then +the comment for the latitude would be \"Connector of Real output signal\". +As this documentation string cannot be overwritten, a new block +was implemented. +

+", revisions=" + +")); + end Latitude; + + block Longitude "Generate constant signal of type Real" + extends Modelica.Blocks.Icons.Block; + + parameter Modelica.SIunits.Angle longitude "Longitude"; + + Modelica.Blocks.Interfaces.RealOutput y( + unit="rad", + displayUnit="deg") "Longitude of the location" + annotation (Placement(transformation(extent={{100,-10},{120,10}}))); + equation + y = longitude; + annotation ( + Icon(coordinateSystem( + preserveAspectRatio=true, + extent={{-100,-100},{100,100}}), graphics={ + Text( + extent={{-81,32},{84,-24}}, + lineColor={0,0,0}, + textString="Longitude")}), + Diagram(coordinateSystem( + preserveAspectRatio=false, + extent={{-100,-100},{100,100}})), + Documentation(info=" +

+Block to output the longitude of the location. +This block is added so that the longitude is displayed +with a comment in the GUI of the weather bus connector. +

+

Implementation

+

+If + +Modelica.Blocks.Sources.Constant where used, then +the comment for the longitude would be \"Connector of Real output signal\". +As this documentation string cannot be overwritten, a new block +was implemented. +

+", revisions=" + +")); + end Longitude; + + public + Modelica.Blocks.Interfaces.RealOutput HDifHor + annotation (Placement(transformation(extent={{300,350},{320,370}}))); + equation + //--------------------------------------------------------------------------- + // Select atmospheric pressure connector + connect(pAtm_in, pAtm_in_internal); + connect(pAtm_in_internal, chePre.PIn); + //--------------------------------------------------------------------------- + // Select ceiling height connector + connect(ceiHei_in, ceiHei_in_internal); + connect(ceiHei_in_internal, cheCeiHei.ceiHeiIn); + + //--------------------------------------------------------------------------- + // Select total sky cover connector + connect(totSkyCov_in, totSkyCov_in_internal); + connect(totSkyCov_in_internal, cheTotSkyCov.nIn); + //--------------------------------------------------------------------------- + // Select opaque sky cover connector + connect(opaSkyCov_in, opaSkyCov_in_internal); + connect(opaSkyCov_in_internal, cheOpaSkyCov.nIn); + + //--------------------------------------------------------------------------- + // Select dew point temperature connector + connect(TDewPoi_in, TDewPoi_in_internal); + connect(TDewPoi_in_internal, cheTemDewPoi.TIn); + //--------------------------------------------------------------------------- + // Select dry bulb temperature connector + connect(TDryBul_in, TDryBul_in_internal); + connect(TDryBul_in_internal, cheTemDryBul.TIn); + //--------------------------------------------------------------------------- + // Select relative humidity connector + connect(relHum_in, relHum_in_internal); + connect(relHum_in_internal, cheRelHum.relHumIn); + //--------------------------------------------------------------------------- + // Select wind speed connector + connect(winSpe_in, winSpe_in_internal); + connect(winSpe_in_internal, cheWinSpe.winSpeIn); + //--------------------------------------------------------------------------- + // Select wind direction connector + connect(winDir_in, winDir_in_internal); + connect(winDir_in_internal, cheWinDir.nIn); + //--------------------------------------------------------------------------- + // Select global horizontal radiation connector + if HSou == Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HGloHor_HDifHor or HSou == Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HDirNor_HGloHor then + connect(HGloHor_in, HGloHor_in_internal) + "Get HGloHor using user input file"; + elseif HSou == Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HDirNor_HDifHor then + HDirNor_in_internal*cos(zenAng.zen)+HDifHor_in_internal = HGloHor_in_internal + "Calculate the HGloHor using HDirNor and HDifHor according to (A.4.14) and (A.4.15)"; + end if; + connect(HGloHor_in_internal, cheGloHorRad.HIn); + //--------------------------------------------------------------------------- + // Select diffuse horizontal radiation connector + if HSou == Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HGloHor_HDifHor or HSou == Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HDirNor_HDifHor then + connect(HDifHor_in, HDifHor_in_internal) + "Get HDifHor using user input file"; + elseif HSou == Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HDirNor_HGloHor then + HGloHor_in_internal - HDirNor_in_internal*cos(zenAng.zen) = HDifHor_in_internal + "Calculate the HGloHor using HDirNor and HDifHor according to (A.4.14) and (A.4.15)"; + end if; + connect(HDifHor_in_internal, cheDifHorRad.HIn); + //--------------------------------------------------------------------------- + // Select direct normal radiation connector + if HSou == Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HDirNor_HGloHor or HSou == Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HDirNor_HDifHor then + connect(HDirNor_in, HDirNor_in_internal) + "Get HDirNor using user input file"; + elseif HSou == Buildings.BoundaryConditions.Types.RadiationDataSource.Input_HGloHor_HDifHor then + (HGloHor_in_internal -HDifHor_in_internal)/Buildings.Utilities.Math.Functions.smoothMax(x1=cos(zenAng.zen), x2=epsCos, deltaX=0.1*epsCos) + = HDirNor_in_internal + "Calculate the HDirNor using HGloHor and HDifHor according to (A.4.14) and (A.4.15)"; + end if; + connect(HDirNor_in_internal, cheDirNorRad.HIn); + + //--------------------------------------------------------------------------- + // Select infrared radiation connector + connect(HInfHor_in, HInfHor_in_internal); + connect(HInfHor_in_internal, cheHorRad.HIn); + //--------------------------------------------------------------------------- + connect(chePre.POut, weaBus.pAtm) annotation (Line( + points={{149,62},{188,62},{188,-8},{268,-8}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(cheTotSkyCov.nOut, weaBus.nTot) annotation (Line( + points={{149,-38},{188,-38},{188,-8},{268,-8}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(cheOpaSkyCov.nOut, weaBus.nOpa) annotation (Line( + points={{149,-158},{188,-158},{188,-8},{268,-8}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(cheGloHorRad.HOut, weaBus.HGloHor) annotation (Line( + points={{149,162},{188,162},{188,-8},{268,-8}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(cheDifHorRad.HOut, weaBus.HDifHor) annotation (Line( + points={{149,122},{188,122},{188,-8},{268,-8}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(cheDirNorRad.HOut, weaBus.HDirNor) annotation (Line( + points={{149,202},{188,202},{188,-8},{268,-8}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(cheCeiHei.ceiHeiOut, weaBus.celHei) annotation (Line( + points={{149,-118},{188,-118},{188,-8},{268,-8}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(cheWinSpe.winSpeOut, weaBus.winSpe) annotation (Line( + points={{149,-78},{188,-78},{188,-8},{268,-8}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(cheHorRad.HOut, weaBus.HHorIR) annotation (Line( + points={{149,242},{188,242},{188,-8},{268,-8}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(cheWinDir.nOut, weaBus.winDir) annotation (Line( + points={{149,-278},{248,-278},{248,-8},{268,-8}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + + connect(eqnTim.eqnTim, solTim.equTim) annotation (Line( + points={{-131,-118},{-120,-118},{-120,-132},{-114,-132}}, + color={0,0,127})); + connect(locTim.locTim, solTim.locTim) annotation (Line( + points={{-131,-158},{-120,-158},{-120,-143.4},{-114,-143.4}}, + color={0,0,127})); + + connect(cheTemDewPoi.TOut, weaBus.TDewPoi) annotation (Line( + points={{149,-238},{248,-238},{248,-8},{268,-8}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + + connect(cheRelHum.relHumOut, weaBus.relHum) annotation (Line( + points={{149,22},{248,22},{248,-8},{268,-8}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(cheTemDryBul.TOut, weaBus.TDryBul) annotation (Line( + points={{149,-198},{248,-198},{248,-8},{268,-8}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(decAng.decAng, zenAng.decAng) + annotation (Line( + points={{-151,-218},{-96,-218},{-96,-222.6}}, + color={0,0,127})); + connect(solHouAng.solHouAng, zenAng.solHouAng) annotation (Line( + points={{-151,-248},{-142,-248},{-142,-232.8},{-96,-232.8}}, + color={0,0,127})); + connect(solHouAng.solTim, solTim.solTim) annotation (Line( + points={{-174,-248},{-186,-248},{-186,-180},{-52,-180},{-52,-138},{ + -91,-138}}, + color={0,0,127})); + connect(zenAng.zen, altAng.zen) annotation (Line( + points={{-73,-228},{-72,-228},{-72,-256},{-60,-256}}, + color={0,0,127})); + + // Connectors for wet bulb temperature. + // These are removed if computeWetBulbTemperature = false + connect(chePre.POut, tWetBul_TDryBulXi.p) annotation (Line( + points={{149,62},{188,62},{188,-72},{211,-72}}, + color={0,0,127})); + connect(tWetBul_TDryBulXi.TWetBul, weaBus.TWetBul) annotation (Line( + points={{233,-64},{248,-64},{248,-8},{260,-8},{268,-8}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(cheTemDryBul.TOut, tWetBul_TDryBulXi.TDryBul) annotation (Line( + points={{149,-198},{188,-198},{188,-56},{211,-56}}, + color={0,0,127})); + connect(cheRelHum.relHumOut, tWetBul_TDryBulXi.phi) annotation (Line( + points={{149,22},{176,22},{176,-64},{211,-64}}, + color={0,0,127})); + + // Connectors for black sky temperature. + // These are removed if computeBlackSkyTemperature = false + connect(cheOpaSkyCov.nOut, TBlaSkyCom.nOpa) annotation (Line( + points={{149,-158},{188,-158},{188,-221},{206,-221}}, + color={0,0,127})); + connect(cheHorRad.HOut, TBlaSkyCom.HHorIR) annotation (Line( + points={{149,242},{188,242},{188,-226},{206,-226}}, + color={0,0,127})); + connect(cheTemDryBul.TOut, TBlaSkyCom.TDryBul) annotation (Line( + points={{149,-198},{188,-198},{188,-210},{206,-210}}, + color={0,0,127})); + connect(TBlaSkyCom.TDewPoi, cheTemDewPoi.TOut) annotation (Line( + points={{206,-215},{188,-215},{188,-238},{149,-238}}, + color={0,0,127})); + connect(TBlaSkyCom.TBlaSky, cheTemBlaSky.TIn); + connect(cheTemBlaSky.TOut, weaBus.TBlaSky) annotation (Line(points={{229, + -258},{229,-258},{248,-258},{248,-8},{268,-8}}, + color={0,0,127})); + + connect(altAng.alt, weaBus.solAlt) annotation (Line( + points={{-37,-256},{-24,-256},{-24,-296},{274,-296},{274,-8},{268,-8}}, + color={0,0,127})); + connect(zenAng.zen, weaBus.solZen) annotation (Line( + points={{-73,-228},{-72,-228},{-72,-298},{276,-298},{276,-8},{268,-8}}, + color={0,0,127})); + connect(decAng.decAng, weaBus.solDec) annotation (Line( + points={{-151,-218},{-151,-224},{-108,-224},{-108,-300},{278,-300},{ + 278,-8},{268,-8}}, + color={0,0,127})); + connect(solHouAng.solHouAng, weaBus.solHouAng) annotation (Line( + points={{-151,-248},{-151,-248},{-124,-248},{-124,-302},{280,-302},{ + 280,-144},{280,-8},{268,-8}}, + color={0,0,127})); + connect(longitude.y, weaBus.lon) annotation (Line( + points={{-151,-278},{-138,-278},{-138,-304},{282,-304},{282,-8},{268, + -8}}, + color={0,0,127})); + connect(latitude.y, weaBus.lat) annotation (Line( + points={{-189,-308},{-184,-308},{-184,-306},{284,-306},{284,-8},{268, + -8}}, + color={0,0,127})); + connect(modTim.y, eqnTim.nDay) annotation (Line(points={{-201,22},{-192,22}, + {-178,22},{-178,-118},{-154,-118}}, color={0,0,127})); + connect(modTim.y, locTim.cloTim) annotation (Line(points={{-201,22},{-190, + 22},{-178,22},{-178,-158},{-154,-158}}, color={0,0,127})); + connect(modTim.y, decAng.nDay) annotation (Line(points={{-201,22},{-116,22}, + {-34,22},{-34,-194},{-182,-194},{-182,-218},{-174,-218}}, + color={0,0, + 127})); + connect(modTim.y, weaBus.cloTim) annotation (Line(points={{-201,22},{-116, + 22},{-14,22},{-14,-8},{268,-8}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(solTim.solTim, weaBus.solTim) annotation (Line(points={{-91,-138},{ + -14,-138},{-14,-8},{268,-8}}, + color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + annotation ( + defaultComponentName="weaDat", + Icon(coordinateSystem( + preserveAspectRatio=false, + extent={{-200,-200},{200,200}}, + initialScale=0.05), graphics={ + Rectangle( + extent={{-200,200},{200,-200}}, + lineColor={124,142,255}, + fillColor={39,45,81}, + fillPattern=FillPattern.Solid), + Text( + extent={{-162,270},{138,230}}, + textString="%name", + lineColor={0,0,255}), + Ellipse( + extent={{-146,154},{28,-20}}, + lineColor={255,220,220}, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={215,215,215}), + Ellipse( + extent={{-62,-74},{-58,-78}}, + lineColor={255,220,220}, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,170}), + Ellipse( + extent={{-66,184},{-62,180}}, + lineColor={255,220,220}, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,170}), + Ellipse( + extent={{62,182},{66,178}}, + lineColor={255,220,220}, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,170}), + Ellipse( + extent={{156,190},{160,186}}, + lineColor={255,220,220}, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,170}), + Ellipse( + extent={{56,-56},{60,-60}}, + lineColor={255,220,220}, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,170}), + Ellipse( + extent={{118,-184},{122,-188}}, + lineColor={255,220,220}, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,170}), + Ellipse( + extent={{154,-116},{158,-120}}, + lineColor={255,220,220}, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,170}), + Ellipse( + extent={{-156,-28},{-152,-32}}, + lineColor={255,220,220}, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,170}), + Ellipse( + extent={{148,-20},{152,-24}}, + lineColor={255,220,220}, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,170}), + Ellipse( + extent={{148,116},{152,112}}, + lineColor={255,220,220}, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,170}), + Ellipse( + extent={{-168,136},{-164,132}}, + lineColor={255,220,220}, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,170}), + Ellipse( + extent={{8,-160},{12,-164}}, + lineColor={255,220,220}, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,170}), + Ellipse( + extent={{-146,-152},{-142,-156}}, + lineColor={255,220,220}, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,170}), + Ellipse( + extent={{86,56},{90,52}}, + lineColor={255,220,220}, + lineThickness=1, + fillPattern=FillPattern.Sphere, + fillColor={255,255,170})}), + Documentation(info=" +

+This component reads TMY3 weather data (Wilcox and Marion, 2008) or user specified weather data. +The weather data format is the Typical Meteorological Year (TMY3) +as obtained from the EnergyPlus web site at + +http://energyplus.net/weather. These +data, which are in the EnergyPlus format, need to be converted as described +in the next paragraph. +

+ +

Output to weaBus

+

+The following variables serve as output and are accessible via weaBus: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name + Unit + Description +
+ HDifHor + + W/m2 + + Horizontal diffuse solar radiation. +
+ HDifNor + + W/m2 + + Direct normal radiation. +
+ HGloHor + + W/m2 + + Horizontal global radiation. +
+ HHorIR + + W/m2 + + Horizontal infrared irradiation. +
+ TBlaSky + + K + + Output temperature. +
+ TDewPoi + + K + + Dew point temperature. +
+ TDryBul + + K + + Dry bulb temperature at ground level. +
+ TWetBul + + K + + Wet bulb temperature. +
+ celHei + + m + + Ceiling height. +
+ cloTim + + s + + One-based day number in seconds. +
+ lat + + rad + + Latitude of the location. +
+ lon + + rad + + Longitude of the location. +
+ nOpa + + 1 + + Opaque sky cover [0, 1]. +
+ nTot + + 1 + + Total sky Cover [0, 1]. +
+ pAtm + + Pa + + Atmospheric pressure. +
+ relHum + + 1 + + Relative humidity. +
+ solAlt + + rad + + Altitude angle. +
+ solDec + + rad + + Declination angle. +
+ solHouAng + + rad + + Solar hour angle. +
+ solTim + + s + + Solar time. +
+ solZen + + rad + + Zenith angle. +
+ winDir + + rad + + Wind direction. +
+ winSpe + + m/s + + Wind speed. +
+ +

Adding new weather data

+

+To add new weather data, proceed as follows: +

+
    +
  1. +Download the weather data file with the epw extension from + +http://energyplus.net/weather. +
  2. +
  3. +Add the file to Buildings/Resources/weatherdata (or to any directory +for which you have write permission). +
  4. +
  5. +On a console window, type
    +  cd Buildings/Resources/weatherdata
    +  java -jar ../bin/ConvertWeatherData.jar inputFile.epw
    +
    +This will generate the weather data file inputFile.mos, which can be read +by the model + +Buildings.BoundaryConditions.WeatherData.ReaderTMY3. +
  6. +
+ +

Location data that are read automatically from the weather data file

+

+The following location data are automatically read from the weather file: +

+ + +

Wet bulb temperature

+

+By default, the data bus contains the wet bulb temperature. +This introduces a nonlinear equation. +However, we have not observed an increase in computing time because +of this equation. +To disable the computation of the wet bulb temperature, set +computeWetBulbTemperature=false. +

+ +

Using constant or user-defined input signals for weather data

+

+This model has the option of using a constant value, using the data from the weather file, +or using data from an input connector for the following variables: +

+ +

+By default, all data are obtained from the weather data file, +except for the atmospheric pressure, which is set to the +parameter pAtm=101325 Pascals. +

+

+The parameter *Sou configures the source of the data. +For the atmospheric pressure, temperatures, relative humidity, wind speed and wind direction, +the enumeration + +Buildings.BoundaryConditions.Types.DataSource +is used as follows: +

+ + + + + + + + + + + + + + + + + + + + + +
Parameter *Sou + Data used to compute weather data. +
+ File + + Use data from file. +
+ Parameter + + Use value specified by the parameter. +
+ Input + + Use value from the input connector. +
+

+Because global, diffuse and direct radiation are related to each other, the parameter +HSou is treated differently. +It is set to a value of the enumeration + +Buildings.BoundaryConditions.Types.RadiationDataSource, +and allows the following configurations: +

+ + + + + + + + + + + + + + + + + + + + + + + + +
Parameter HSou + Data used to compute weather data. +
+ File + + Use data from file. +
+ Input_HGloHor_HDifHor + + Use global horizontal and diffuse horizontal radiation from input connector. +
+ Input_HDirNor_HDifHor + + Use direct normal and diffuse horizontal radiation from input connector. +
+ Input_HDirNor_HGloHor + + Use direct normal and global horizontal radiation from input connector. +
+

+Notes +

+
    +
  1. +

    +In HVAC systems, when the fan is off, changes in atmospheric pressure can cause small air flow rates +in the duct system due to change in pressure and hence in the mass of air that is stored +in air volumes (such as in fluid junctions or in the room model). +This may increase computing time. Therefore, the default value for the atmospheric pressure is set to a constant. +Furthermore, if the initial pressure of air volumes are different +from the atmospheric pressure, then fast pressure transients can happen in the first few seconds of the simulation. +This can cause numerical problems for the solver. To avoid this problem, set the atmospheric pressure to the +same value as the medium default pressure, which is typically set to the parameter Medium.p_default. +For medium models for moist air and dry air, the default is +Medium.p_default=101325 Pascals. +

    +
  2. +
  3. +

    +Different units apply depending on whether data are obtained from a file, or +from a parameter or an input connector: +

    + +
  4. +
  5. +The ReaderTMY3 should only be used with TMY3 data. It contains a time shift for solar radiation data +that is explained below. This time shift needs to be removed if the user may want to +use the ReaderTMY3 for other weather data types. +
  6. +
+

Implementation

+
Start and end data for annual weather data files
+

+The TMY3 weather data, as well as the EnergyPlus weather data, start at 1:00 AM +on January 1, and provide hourly data until midnight on December 31. +Thus, the first entry for temperatures, humidity, wind speed etc. are values +at 1:00 AM and not at midnight. Furthermore, the TMY3 weather data files can have +values at midnight of December 31 that may be significantly different from the values +at 1:00 AM on January 1. +Since annual simulations require weather data that start at 0:00 on January 1, +data need to be provided for this hour. Due to the possibly large change in +weatherdata between 1:00 AM on January 1 and midnight at December 31, +the weather data files in the Buildings library do not use the data entry from +midnight at December 31 as the value for t=0. Rather, the +value from 1:00 AM on January 1 is duplicated and used for 0:00 on January 1. +To maintain a data record with 8760 hours, the weather data record from +midnight at December 31 is deleted. +These changes in the weather data file are done in the Java program that converts +EnergyPlus weather data file to Modelica weather data files, and which is described +below. +

+
Time shift for solar radiation data
+

+To read weather data from the TMY3 weather data file, there are +two data readers in this model. One data reader obtains all data +except solar radiation, and the other data reader reads only the +solar radiation data, shifted by 30 minutes. +The reason for this time shift is as follows: +The TMY3 weather data file contains for solar radiation the +\"...radiation received +on a horizontal surface during +the 60-minute period ending at +the timestamp.\" + +Thus, as the figure below shows, a more accurate interpolation is obtained if +time is shifted by 30 minutes prior to reading the weather data. +

+

+\"image\" +

+

References

+ +", revisions=" + +"), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-300,-440},{300,300}}))); + end WeatherCalculator; + + block DateRefTime + "Calculates the time of year with reference to a start time of the year for t = 0 in simulation time." + extends Modelica.Blocks.Interfaces.SO; + parameter Modelica.SIunits.Time refTime = 0; + + equation + y = time + refTime; + annotation (Icon(graphics={ Rectangle( + extent={{-100,-100},{100,100}}, + lineColor={0,0,127}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Ellipse(extent={{-80,80},{80,-80}}, lineColor={160,160,164}, + fillColor={215,215,215}, + fillPattern=FillPattern.Solid), + Line(points={{0,80},{0,60}}, color={160,160,164}), + Line(points={{80,0},{60,0}}, color={160,160,164}), + Line(points={{0,-80},{0,-60}}, color={160,160,164}), + Line(points={{-80,0},{-60,0}}, color={160,160,164}), + Line(points={{37,70},{26,50}}, color={160,160,164}), + Line(points={{70,38},{49,26}}, color={160,160,164}), + Line(points={{71,-37},{52,-27}}, color={160,160,164}), + Line(points={{39,-70},{29,-51}}, color={160,160,164}), + Line(points={{-39,-70},{-29,-52}}, color={160,160,164}), + Line(points={{-71,-37},{-50,-26}}, color={160,160,164}), + Line(points={{-71,37},{-54,28}}, color={160,160,164}), + Line(points={{-38,70},{-28,51}}, color={160,160,164}), + Line( + points={{0,0},{-50,50}}, + thickness=0.5), + Line( + points={{0,0},{40,0}}, + thickness=0.5), + Text( + extent={{-34,-10},{42,-38}}, + lineColor={0,0,0}, + textString="mm/dd")})); + end DateRefTime; + + model WeatherProcessor + parameter Modelica.SIunits.Angle lon(displayUnit="deg")= -122*3.14159/180 + "Longitude"; + parameter Modelica.SIunits.Angle lat(displayUnit="deg")= 38*3.14159/180 + "Latitude"; + parameter Modelica.SIunits.Time timZon(displayUnit="h")= -6*3600 + "Time zone"; + parameter Modelica.SIunits.Time modTimOffset(displayUnit="s") = 0 + "Local time at t = 0"; + WeatherCalculator weaCal( + lon=lon, + lat=lat, + timZon=timZon, + modTimOffset=modTimOffset) + annotation (Placement(transformation(extent={{-10,-8},{10,12}}))); + Modelica.Blocks.Interfaces.RealInput weaPAtm "Input pressure" + annotation (Placement(transformation(extent={{-380,300},{-340,340}}))); + Modelica.Blocks.Interfaces.RealInput weaTDewPoi + "Input dew point temperature" + annotation (Placement(transformation(extent={{-380,240},{-340,280}}))); + Modelica.Blocks.Interfaces.RealInput weaTDryBul + "Input dry bulb temperature" + annotation (Placement(transformation(extent={{-380,178},{-340,218}}))); + Modelica.Blocks.Interfaces.RealInput weaRelHum "Input relative humidity" + annotation (Placement(transformation(extent={{-380,118},{-340,158}}))); + Modelica.Blocks.Interfaces.RealInput weaNOpa "Input opaque sky cover" + annotation (Placement(transformation(extent={{-380,58},{-340,98}}))); + Modelica.Blocks.Interfaces.RealInput weaCelHei "Input ceiling height" + annotation (Placement(transformation(extent={{-380,-2},{-340,38}}))); + Modelica.Blocks.Interfaces.RealInput weaNTot "Input total sky cover" + annotation (Placement(transformation(extent={{-380,-60},{-340,-20}}))); + Modelica.Blocks.Interfaces.RealInput weaWinSpe "Input wind speed" + annotation (Placement(transformation(extent={{-380,-120},{-340,-80}}))); + Modelica.Blocks.Interfaces.RealInput weaWinDir "Input wind direction" + annotation (Placement(transformation(extent={{-380,-184},{-340,-144}}))); + Modelica.Blocks.Interfaces.RealInput weaHHorIR + "Input infrared horizontal radiation" + annotation (Placement(transformation(extent={{-380,-242},{-340,-202}}))); + Modelica.Blocks.Interfaces.RealInput weaHDirNor + "Input direct normal radiation" + annotation (Placement(transformation(extent={{-380,-302},{-340,-262}}))); + Modelica.Blocks.Interfaces.RealInput weaHGloHor + "Input global horizontal radiation" + annotation (Placement(transformation(extent={{-380,-360},{-340,-320}}))); + Modelica.Blocks.Interfaces.RealOutput weaHDifHor + annotation (Placement(transformation(extent={{340,310},{360,330}}))); + Modelica.Blocks.Interfaces.RealOutput weaCloTim + annotation (Placement(transformation(extent={{340,68},{360,88}}))); + Modelica.Blocks.Interfaces.RealOutput weaSolTim + annotation (Placement(transformation(extent={{340,8},{360,28}}))); + Buildings.BoundaryConditions.WeatherData.Bus weaBus "Weather data bus" + annotation (Placement(transformation(extent={{36,-8},{56,12}}))); + Modelica.Blocks.Interfaces.RealOutput weaTBlaSky + annotation (Placement(transformation(extent={{340,250},{360,270}}))); + Modelica.Blocks.Interfaces.RealOutput weaTWetBul + annotation (Placement(transformation(extent={{340,190},{360,210}}))); + Modelica.Blocks.Interfaces.RealOutput weaSolZen + annotation (Placement(transformation(extent={{340,130},{360,150}}))); + equation + connect(weaCal.pAtm_in, weaPAtm) annotation (Line(points={{-16,17},{-60,17}, + {-60,320},{-360,320}}, color={0,0,127})); + connect(weaCal.TDewPoi_in, weaTDewPoi) annotation (Line(points={{-16,14},{-62, + 14},{-62,260},{-360,260}}, color={0,0,127})); + connect(weaCal.TDryBul_in, weaTDryBul) annotation (Line(points={{-16,11},{-64, + 11},{-64,198},{-360,198}}, color={0,0,127})); + connect(weaCal.relHum_in, weaRelHum) annotation (Line(points={{-16,8},{-66, + 8},{-66,138},{-360,138}}, color={0,0,127})); + connect(weaCal.opaSkyCov_in, weaNOpa) annotation (Line(points={{-16,5},{-68, + 5},{-68,78},{-360,78}}, color={0,0,127})); + connect(weaCal.ceiHei_in, weaCelHei) annotation (Line(points={{-16,2},{-70, + 2},{-70,18},{-360,18}}, color={0,0,127})); + connect(weaCal.totSkyCov_in, weaNTot) annotation (Line(points={{-16,-1},{-70, + -1},{-70,-40},{-360,-40}}, color={0,0,127})); + connect(weaCal.winSpe_in, weaWinSpe) annotation (Line(points={{-16,-4},{-68, + -4},{-68,-100},{-360,-100}}, color={0,0,127})); + connect(weaCal.winDir_in, weaWinDir) annotation (Line(points={{-16,-6.9},{-66, + -6.9},{-66,-164},{-360,-164}}, color={0,0,127})); + connect(weaCal.HInfHor_in, weaHHorIR) annotation (Line(points={{-16,-10},{-64, + -10},{-64,-222},{-360,-222}}, color={0,0,127})); + connect(weaCal.HDirNor_in, weaHDirNor) annotation (Line(points={{-16,-13},{ + -36,-13},{-62,-13},{-62,-282},{-360,-282}}, color={0,0,127})); + connect(weaCal.HGloHor_in, weaHGloHor) annotation (Line(points={{-16,-16},{ + -60,-16},{-60,-340},{-360,-340}}, color={0,0,127})); + connect(weaCal.weaBus, weaBus) annotation (Line( + points={{10,2},{46,2}}, + color={255,204,51}, + thickness=0.5), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaBus.HDifHor, weaHDifHor) annotation (Line( + points={{46,2},{46,2},{46,320},{350,320}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.cloTim, weaCloTim) annotation (Line( + points={{46,2},{46,2},{46,78},{350,78}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.solTim, weaSolTim) annotation (Line( + points={{46,2},{46,2},{46,68},{46,18},{350,18}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.TBlaSky, weaTBlaSky) annotation (Line( + points={{46,2},{46,2},{46,146},{46,260},{350,260}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.TWetBul, weaTWetBul) annotation (Line( + points={{46,2},{46,2},{46,126},{46,200},{350,200}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.solZen, weaSolZen) annotation (Line( + points={{46,2},{46,2},{46,140},{350,140}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-340, + -340},{340,340}})), + Diagram(coordinateSystem(preserveAspectRatio=false, + extent={{-340,-340},{340,340}}))); + end WeatherProcessor; + + model Wea2Bus + Modelica.Blocks.Interfaces.RealInput weaPAtm "Input pressure" + annotation (Placement(transformation(extent={{-260,480},{-220,520}}))); + Modelica.Blocks.Interfaces.RealInput weaTDewPoi + "Input dew point temperature" + annotation (Placement(transformation(extent={{-260,420},{-220,460}}))); + Modelica.Blocks.Interfaces.RealInput weaTDryBul + "Input dry bulb temperature" + annotation (Placement(transformation(extent={{-260,360},{-220,400}}))); + Modelica.Blocks.Interfaces.RealInput weaRelHum "Input relative humidity" + annotation (Placement(transformation(extent={{-260,300},{-220,340}}))); + Modelica.Blocks.Interfaces.RealInput weaNOpa "Input opaque sky cover" + annotation (Placement(transformation(extent={{-260,240},{-220,280}}))); + Modelica.Blocks.Interfaces.RealInput weaCelHei "Input ceiling height" + annotation (Placement(transformation(extent={{-260,180},{-220,220}}))); + Modelica.Blocks.Interfaces.RealInput weaNTot "Input total sky cover" + annotation (Placement(transformation(extent={{-260,120},{-220,160}}))); + Modelica.Blocks.Interfaces.RealInput weaWinSpe "Input wind speed" + annotation (Placement(transformation(extent={{-260,60},{-220,100}}))); + Modelica.Blocks.Interfaces.RealInput weaWinDir "Input wind direction" + annotation (Placement(transformation(extent={{-260,0},{-220,40}}))); + Modelica.Blocks.Interfaces.RealInput weaHHorIR + "Input diffuse horizontal radiation" + annotation (Placement(transformation(extent={{-260,-60},{-220,-20}}))); + Modelica.Blocks.Interfaces.RealInput weaHDirNor + "Input infrared horizontal radiation" + annotation (Placement(transformation(extent={{-260,-120},{-220,-80}}))); + Modelica.Blocks.Interfaces.RealInput weaHGloHor + "Input direct normal radiation" + annotation (Placement(transformation(extent={{-260,-180},{-220,-140}}))); + Modelica.Blocks.Interfaces.RealInput weaHDifHor + "Input global horizontal radiation" + annotation (Placement(transformation(extent={{-260,-240},{-220,-200}}))); + Modelica.Blocks.Interfaces.RealInput weaTBlaSky + "Input global horizontal radiation" + annotation (Placement(transformation(extent={{-260,-298},{-220,-258}}))); + Modelica.Blocks.Interfaces.RealInput weaTWetBul + "Input global horizontal radiation" + annotation (Placement(transformation(extent={{-260,-360},{-220,-320}}))); + Modelica.Blocks.Interfaces.RealInput weaCloTim + "Input global horizontal radiation" + annotation (Placement(transformation(extent={{-260,-480},{-220,-440}}))); + Modelica.Blocks.Interfaces.RealInput weaSolTim + "Input global horizontal radiation" + annotation (Placement(transformation(extent={{-260,-540},{-220,-500}}))); + Modelica.Blocks.Interfaces.RealInput weaSolZen + "Input global horizontal radiation" + annotation (Placement(transformation(extent={{-260,-422},{-220,-382}}))); + Buildings.BoundaryConditions.WeatherData.Bus weaBus "Weather data bus" + annotation (Placement(transformation(extent={{210,-10},{230,10}}))); + equation + connect(weaPAtm, weaBus.pAtm) annotation (Line(points={{-240,500},{-240,500}, + {-194,500},{-194,0},{220,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaTDewPoi, weaBus.TDewPoi) annotation (Line(points={{-240,440},{ + -198,440},{-198,0},{220,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaTDryBul, weaBus.TDryBul) annotation (Line(points={{-240,380},{ + -202,380},{-202,0},{220,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaRelHum, weaBus.relHum) annotation (Line(points={{-240,320},{-190, + 320},{-190,0},{220,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaNOpa, weaBus.nOpa) annotation (Line(points={{-240,260},{-188,260}, + {-188,0},{220,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaCelHei, weaBus.celHei) annotation (Line(points={{-240,200},{-184, + 200},{-184,0},{220,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaNTot, weaBus.nTot) annotation (Line(points={{-240,140},{-180,140}, + {-180,0},{220,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaWinSpe, weaBus.winSpe) annotation (Line(points={{-240,80},{-176, + 80},{-176,0},{220,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaWinDir, weaBus.winDir) annotation (Line(points={{-240,20},{-240, + 22},{-172,22},{-172,0},{220,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaHHorIR, weaBus.HHorIR) annotation (Line(points={{-240,-40},{-168, + -40},{-168,0},{220,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaHDirNor, weaBus.HDirNor) annotation (Line(points={{-240,-100},{ + -164,-100},{-164,0},{220,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaHGloHor, weaBus.HGloHor) annotation (Line(points={{-240,-160},{ + -202,-160},{-160,-160},{-160,0},{220,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaHDifHor, weaBus.HDifHor) annotation (Line(points={{-240,-220},{ + -156,-220},{-156,0},{220,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaTBlaSky, weaBus.TBlaSky) annotation (Line(points={{-240,-278},{ + -152,-278},{-152,0},{220,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaTWetBul, weaBus.TWetBul) annotation (Line(points={{-240,-340},{ + -148,-340},{-148,0},{220,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaSolZen, weaBus.solZen) annotation (Line(points={{-240,-402},{ + -144,-402},{-144,0},{220,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaCloTim, weaBus.cloTim) annotation (Line(points={{-240,-460},{ + -138,-460},{-138,0},{220,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaSolTim, weaBus.solTim) annotation (Line(points={{-240,-520},{ + -134,-520},{-134,0},{220,0}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false, extent={{-220, + -520},{220,520}}), graphics={ + Rectangle( + extent={{-220,520},{220,-520}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), + Line( + points={{-198,-2},{2,-2}}, + color={0,0,126}, + thickness=0.5), + Line( + points={{0,-2},{200,-2}}, + color={255,204,0}, + thickness=0.5)}), Diagram(coordinateSystem(preserveAspectRatio= + false, extent={{-220,-520},{220,520}}))); + end Wea2Bus; + + package Examples + + model WeatherProcessor + import RapidMPC; + RapidMPC.BoundaryConditions.WeatherProcessor weatherProcessor( + lon(displayUnit="deg") = -1.5344934783534, + modTimOffset=0, + lat=0.73268921998722, + timZon=-21600) + annotation (Placement(transformation(extent={{-10,-20},{10,18}}))); + Buildings.BoundaryConditions.WeatherData.ReaderTMY3 EPW( + filNam= + "modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos", + pAtmSou=Buildings.BoundaryConditions.Types.DataSource.File, + ceiHeiSou=Buildings.BoundaryConditions.Types.DataSource.File, + TDryBulSou=Buildings.BoundaryConditions.Types.DataSource.File, + HSou=Buildings.BoundaryConditions.Types.RadiationDataSource.File) + "Weather data" + annotation (Placement(transformation(extent={{-98,0},{-62,34}}))); + + Buildings.BoundaryConditions.WeatherData.Bus weaBus "Weather data bus" + annotation (Placement(transformation(extent={{-48,8},{-28,28}}))); + equation + connect(EPW.weaBus, weaBus) annotation (Line( + points={{-62,17},{-54,17},{-54,18},{-38,18}}, + color={255,204,51}, + thickness=0.5), Text( + string="%second", + index=1, + extent={{6,3},{6,3}})); + connect(weaBus.pAtm, weatherProcessor.weaPAtm) annotation (Line( + points={{-38,18},{-10.5882,18},{-10.5882,16.8824}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.TDewPoi, weatherProcessor.weaTDewPoi) annotation (Line( + points={{-38,18},{-28,18},{-28,13.5294},{-10.5882,13.5294}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.TDryBul, weatherProcessor.weaTDryBul) annotation (Line( + points={{-38,18},{-28,18},{-28,10.0647},{-10.5882,10.0647}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.relHum, weatherProcessor.weaRelHum) annotation (Line( + points={{-38,18},{-28,18},{-28,6.71176},{-10.5882,6.71176}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.nOpa, weatherProcessor.weaNOpa) annotation (Line( + points={{-38,18},{-28,18},{-28,3.35882},{-10.5882,3.35882}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.celHei, weatherProcessor.weaCelHei) annotation (Line( + points={{-38,18},{-28,18},{-28,0.00588235},{-10.5882,0.00588235}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.nTot, weatherProcessor.weaNTot) annotation (Line( + points={{-38,18},{-28,18},{-28,-3.23529},{-10.5882,-3.23529}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.winSpe, weatherProcessor.weaWinSpe) annotation (Line( + points={{-38,18},{-34,18},{-28,18},{-28,-6.58824},{-10.5882,-6.58824}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + + connect(weaBus.winDir, weatherProcessor.weaWinDir) annotation (Line( + points={{-38,18},{-28,18},{-28,-10.1647},{-10.5882,-10.1647}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.HHorIR, weatherProcessor.weaHHorIR) annotation (Line( + points={{-38,18},{-28,18},{-28,-13.4059},{-10.5882,-13.4059}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.HDirNor, weatherProcessor.weaHDirNor) annotation (Line( + points={{-38,18},{-28,18},{-28,-16.7588},{-10.5882,-16.7588}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + connect(weaBus.HGloHor, weatherProcessor.weaHGloHor) annotation (Line( + points={{-38,18},{-28,18},{-28,-20},{-10.5882,-20}}, + color={255,204,51}, + thickness=0.5), Text( + string="%first", + index=-1, + extent={{-6,3},{-6,3}})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false))); + end WeatherProcessor; + annotation (Icon(graphics={ + Rectangle( + lineColor={200,200,200}, + fillColor={248,248,248}, + fillPattern=FillPattern.HorizontalCylinder, + extent={{-100,-100},{100,100}}, + radius=25.0), + Rectangle( + lineColor={128,128,128}, + fillPattern=FillPattern.None, + extent={{-100,-100},{100,100}}, + radius=25.0), + Polygon( + origin={8,14}, + lineColor={78,138,73}, + fillColor={78,138,73}, + pattern=LinePattern.None, + fillPattern=FillPattern.Solid, + points={{-58.0,46.0},{42.0,-14.0},{-58.0,-74.0},{-58.0,46.0}})})); + end Examples; + + end BoundaryConditions; + + package HVAC "HVAC components" + model ConvectiveHeater + parameter Real q_max(unit = "W") "Max heater output"; + parameter Real eff(unit = "1") "Efficiency of heater"; + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow prescribedHeatFlow + annotation (Placement(transformation(extent={{22,-10},{42,10}}))); + Modelica.Blocks.Math.Gain gain1(k=q_max) + annotation (Placement(transformation(extent={{-38,-10},{-18,10}}))); + Modelica.Blocks.Interfaces.RealInput u "Input signal connector" + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_b HeatOutput + annotation (Placement(transformation(extent={{94,-10},{114,10}}))); + Modelica.Blocks.Interfaces.RealOutput P_e(unit="W") + annotation (Placement(transformation(extent={{100,-70},{120,-50}}))); + Modelica.Blocks.Math.Gain gain2(k=eff) + annotation (Placement(transformation(extent={{20,-70},{40,-50}}))); + equation + connect(gain1.y, prescribedHeatFlow.Q_flow) + annotation (Line(points={{-17,0},{2.5,0},{22,0}}, color={0,0,127})); + connect(gain1.u, u) + annotation (Line(points={{-40,0},{-120,0}}, color={0,0,127})); + connect(prescribedHeatFlow.port, HeatOutput) + annotation (Line(points={{42,0},{104,0}}, color={191,0,0})); + connect(gain1.y, gain2.u) annotation (Line(points={{-17,0},{0,0},{0,-60}, + {18,-60}}, color={0,0,127})); + connect(gain2.y, P_e) + annotation (Line(points={{41,-60},{110,-60}}, color={0,0,127})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), Text( + extent={{-58,24},{68,-14}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="ConvectiveHeater")}), Diagram( + coordinateSystem(preserveAspectRatio=false))); + end ConvectiveHeater; + end HVAC; + + package Controllers "Controller components" + package HeaterPI + + model PI + Modelica.Blocks.Interfaces.RealInput Setpoint + annotation (Placement(transformation(extent={{-140,30},{-100,70}}))); + Modelica.Blocks.Interfaces.RealInput Measurement annotation (Placement( + transformation(extent={{-140,-70},{-100,-30}}))); + Buildings.Controls.Continuous.LimPID conPID( + Td=0, + k=0.0001, + Ti=0.1) + annotation (Placement(transformation(extent={{-16,6},{4,26}}))); + Modelica.Blocks.Interfaces.RealOutput y + "Connector of actuator output signal" + annotation (Placement(transformation(extent={{100,-10},{120,10}}))); + equation + connect(Setpoint, conPID.u_s) annotation (Line(points={{-120,50},{-52, + 50},{-52,16},{-18,16}}, color={0,0,127})); + connect(Measurement, conPID.u_m) annotation (Line(points={{-120,-50},{ + -6,-50},{-6,4}}, color={0,0,127})); + connect(conPID.y, y) annotation (Line(points={{5,16},{40,16},{40,0},{74, + 0},{110,0}}, color={0,0,127})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram( + coordinateSystem(preserveAspectRatio=false))); + end PI; + end HeaterPI; + + model SingleSetpoint + parameter Real Setpoint "Temperature setpoint for HVAC"; + parameter Boolean OnStatus "On-Off Status for HVAC"; + Modelica.Blocks.Sources.Constant const(k=Setpoint) + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + HeaterPI.PI wes + annotation (Placement(transformation(extent={{0,30},{20,50}}))); + HeaterPI.PI hal + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + HeaterPI.PI eas + annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); + Modelica.Blocks.Interfaces.RealOutput y_wes + "Connector of actuator output signal" + annotation (Placement(transformation(extent={{100,30},{120,50}}))); + Modelica.Blocks.Interfaces.RealOutput y_hal + "Connector of actuator output signal" + annotation (Placement(transformation(extent={{100,-10},{120,10}}))); + Modelica.Blocks.Interfaces.RealOutput y_eas + "Connector of actuator output signal" + annotation (Placement(transformation(extent={{100,-50},{120,-30}}))); + Modelica.Blocks.Interfaces.RealInput meaTDryBul_wes + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + Modelica.Blocks.Interfaces.RealInput meaTDryBul_hal + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + Modelica.Blocks.Interfaces.RealInput meaTDryBul_eas + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + Modelica.Blocks.Logical.Switch switch1 + annotation (Placement(transformation(extent={{-60,66},{-40,86}}))); + Modelica.Blocks.Sources.BooleanConstant OnOffStatus(k=OnStatus) + annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); + Modelica.Blocks.Logical.Switch switch2 + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + Modelica.Blocks.Logical.Switch switch3 + annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); + Modelica.Blocks.Logical.Switch switch4 + annotation (Placement(transformation(extent={{40,50},{60,70}}))); + Modelica.Blocks.Logical.Switch switch5 + annotation (Placement(transformation(extent={{40,10},{60,30}}))); + Modelica.Blocks.Logical.Switch switch6 + annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); + Modelica.Blocks.Sources.Constant const1(k=0) + annotation (Placement(transformation(extent={{0,80},{20,100}}))); + equation + connect(wes.Measurement, meaTDryBul_wes) annotation (Line(points={{-2,35},{-10,35}, + {-10,34},{-18,34},{-18,60},{-120,60}}, color={0,0,127})); + connect(hal.Measurement, meaTDryBul_hal) annotation (Line(points={{-2,-5}, + {-52,-5},{-52,0},{-120,0}}, color={0,0,127})); + connect(eas.Measurement, meaTDryBul_eas) annotation (Line(points={{-2,-45}, + {-50,-45},{-50,-60},{-120,-60}}, color={0,0,127})); + connect(const.y, switch1.u1) annotation (Line(points={{-79,90},{-66,90},{-66,84}, + {-62,84}}, color={0,0,127})); + connect(meaTDryBul_wes, switch1.u3) annotation (Line(points={{-120,60},{-120,60}, + {-66,60},{-66,68},{-62,68}}, color={0,0,127})); + connect(const.y, switch2.u1) annotation (Line(points={{-79,90},{-74,90},{-74,38}, + {-62,38}}, color={0,0,127})); + connect(OnOffStatus.y, switch2.u2) + annotation (Line(points={{-79,30},{-62,30}}, color={255,0,255})); + connect(OnOffStatus.y, switch1.u2) annotation (Line(points={{-79,30},{-70,30}, + {-70,76},{-62,76}}, color={255,0,255})); + connect(const.y, switch3.u1) annotation (Line(points={{-79,90},{-74,90},{-74,-22}, + {-62,-22}}, color={0,0,127})); + connect(OnOffStatus.y, switch3.u2) annotation (Line(points={{-79,30},{-70,30}, + {-70,-30},{-62,-30}}, color={255,0,255})); + connect(meaTDryBul_hal, switch2.u3) annotation (Line(points={{-120,0},{-66,0}, + {-66,22},{-62,22}}, color={0,0,127})); + connect(meaTDryBul_eas, switch3.u3) annotation (Line(points={{-120,-60},{-96,-60}, + {-66,-60},{-66,-38},{-62,-38}}, color={0,0,127})); + connect(switch1.y, wes.Setpoint) annotation (Line(points={{-39,76},{-22,76},{-22, + 45},{-2,45}}, color={0,0,127})); + connect(switch2.y, hal.Setpoint) annotation (Line(points={{-39,30},{-22,30},{-22, + 5},{-2,5}}, color={0,0,127})); + connect(switch3.y, eas.Setpoint) annotation (Line(points={{-39,-30},{-22,-30}, + {-22,-35},{-2,-35}}, color={0,0,127})); + connect(const1.y, switch4.u3) annotation (Line(points={{21,90},{30,90},{30,52}, + {38,52}}, color={0,0,127})); + connect(const1.y, switch5.u3) annotation (Line(points={{21,90},{30,90},{30,12}, + {38,12}}, color={0,0,127})); + connect(const1.y, switch6.u3) annotation (Line(points={{21,90},{30,90},{30,-28}, + {38,-28}}, color={0,0,127})); + connect(OnOffStatus.y, switch5.u2) annotation (Line(points={{-79,30},{-70,30}, + {-70,16},{16,16},{16,20},{38,20}}, color={255,0,255})); + connect(OnOffStatus.y, switch4.u2) annotation (Line(points={{-79,30},{-70,30}, + {-70,16},{16,16},{16,20},{26,20},{26,60},{38,60}}, color={255,0,255})); + connect(OnOffStatus.y, switch6.u2) annotation (Line(points={{-79,30},{-70,30}, + {-70,16},{16,16},{16,20},{26,20},{26,-20},{38,-20}}, color={255,0,255})); + connect(wes.y, switch4.u1) annotation (Line(points={{21,40},{24,40},{24,68},{38, + 68}}, color={0,0,127})); + connect(hal.y, switch5.u1) + annotation (Line(points={{21,0},{24,0},{24,28},{38,28}}, color={0,0,127})); + connect(eas.y, switch6.u1) annotation (Line(points={{21,-40},{24,-40},{24,-12}, + {38,-12}}, color={0,0,127})); + connect(switch4.y, y_wes) annotation (Line(points={{61,60},{80,60},{80,40},{110, + 40}}, color={0,0,127})); + connect(switch5.y, y_hal) annotation (Line(points={{61,20},{80,20},{80,0},{110, + 0}}, color={0,0,127})); + connect(switch6.y, y_eas) annotation (Line(points={{61,-20},{80,-20},{80,-40}, + {110,-40}}, color={0,0,127})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), Text( + extent={{-54,54},{66,-32}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="Single Setpoint")}), Diagram( + coordinateSystem(preserveAspectRatio=false))); + end SingleSetpoint; + + model DualSetpoint + parameter Real Setpoint "Temperature setpoint for HVAC"; + parameter Real Setback "Temperature setback for HVAC"; + parameter Boolean OnStatus "On-Off Status for HVAC"; + Modelica.Blocks.Sources.Pulse const( + amplitude=Setback, + period=24*3600, + offset=Setpoint - Setback, + width=11/24*100, + startTime=6*3600) + annotation (Placement(transformation(extent={{-100,80},{-80,100}}))); + HeaterPI.PI wes + annotation (Placement(transformation(extent={{0,30},{20,50}}))); + HeaterPI.PI hal + annotation (Placement(transformation(extent={{0,-10},{20,10}}))); + HeaterPI.PI eas + annotation (Placement(transformation(extent={{0,-50},{20,-30}}))); + Modelica.Blocks.Interfaces.RealOutput y_wes + "Connector of actuator output signal" + annotation (Placement(transformation(extent={{100,30},{120,50}}))); + Modelica.Blocks.Interfaces.RealOutput y_hal + "Connector of actuator output signal" + annotation (Placement(transformation(extent={{100,-10},{120,10}}))); + Modelica.Blocks.Interfaces.RealOutput y_eas + "Connector of actuator output signal" + annotation (Placement(transformation(extent={{100,-50},{120,-30}}))); + Modelica.Blocks.Interfaces.RealInput meaTDryBul_wes + annotation (Placement(transformation(extent={{-140,40},{-100,80}}))); + Modelica.Blocks.Interfaces.RealInput meaTDryBul_hal + annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); + Modelica.Blocks.Interfaces.RealInput meaTDryBul_eas + annotation (Placement(transformation(extent={{-140,-80},{-100,-40}}))); + Modelica.Blocks.Logical.Switch switch1 + annotation (Placement(transformation(extent={{-60,66},{-40,86}}))); + Modelica.Blocks.Sources.BooleanConstant OnOffStatus(k=OnStatus) + annotation (Placement(transformation(extent={{-100,20},{-80,40}}))); + Modelica.Blocks.Logical.Switch switch2 + annotation (Placement(transformation(extent={{-60,20},{-40,40}}))); + Modelica.Blocks.Logical.Switch switch3 + annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}))); + Modelica.Blocks.Logical.Switch switch4 + annotation (Placement(transformation(extent={{40,50},{60,70}}))); + Modelica.Blocks.Logical.Switch switch5 + annotation (Placement(transformation(extent={{40,10},{60,30}}))); + Modelica.Blocks.Logical.Switch switch6 + annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); + Modelica.Blocks.Sources.Constant const1(k=0) + annotation (Placement(transformation(extent={{0,80},{20,100}}))); + equation + connect(wes.Measurement, meaTDryBul_wes) annotation (Line(points={{-2,35},{-10,35}, + {-10,34},{-18,34},{-18,60},{-120,60}}, color={0,0,127})); + connect(hal.Measurement, meaTDryBul_hal) annotation (Line(points={{-2,-5}, + {-52,-5},{-52,0},{-120,0}}, color={0,0,127})); + connect(eas.Measurement, meaTDryBul_eas) annotation (Line(points={{-2,-45}, + {-50,-45},{-50,-60},{-120,-60}}, color={0,0,127})); + connect(const.y, switch1.u1) annotation (Line(points={{-79,90},{-66,90},{-66,84}, + {-62,84}}, color={0,0,127})); + connect(meaTDryBul_wes, switch1.u3) annotation (Line(points={{-120,60},{-120,60}, + {-66,60},{-66,68},{-62,68}}, color={0,0,127})); + connect(const.y, switch2.u1) annotation (Line(points={{-79,90},{-74,90},{-74,38}, + {-62,38}}, color={0,0,127})); + connect(OnOffStatus.y, switch2.u2) + annotation (Line(points={{-79,30},{-62,30}}, color={255,0,255})); + connect(OnOffStatus.y, switch1.u2) annotation (Line(points={{-79,30},{-70,30}, + {-70,76},{-62,76}}, color={255,0,255})); + connect(const.y, switch3.u1) annotation (Line(points={{-79,90},{-74,90},{-74,-22}, + {-62,-22}}, color={0,0,127})); + connect(OnOffStatus.y, switch3.u2) annotation (Line(points={{-79,30},{-70,30}, + {-70,-30},{-62,-30}}, color={255,0,255})); + connect(meaTDryBul_hal, switch2.u3) annotation (Line(points={{-120,0},{-66,0}, + {-66,22},{-62,22}}, color={0,0,127})); + connect(meaTDryBul_eas, switch3.u3) annotation (Line(points={{-120,-60},{-96,-60}, + {-66,-60},{-66,-38},{-62,-38}}, color={0,0,127})); + connect(switch1.y, wes.Setpoint) annotation (Line(points={{-39,76},{-22,76},{-22, + 45},{-2,45}}, color={0,0,127})); + connect(switch2.y, hal.Setpoint) annotation (Line(points={{-39,30},{-22,30},{-22, + 5},{-2,5}}, color={0,0,127})); + connect(switch3.y, eas.Setpoint) annotation (Line(points={{-39,-30},{-22,-30}, + {-22,-35},{-2,-35}}, color={0,0,127})); + connect(const1.y, switch4.u3) annotation (Line(points={{21,90},{30,90},{30,52}, + {38,52}}, color={0,0,127})); + connect(const1.y, switch5.u3) annotation (Line(points={{21,90},{30,90},{30,12}, + {38,12}}, color={0,0,127})); + connect(const1.y, switch6.u3) annotation (Line(points={{21,90},{30,90},{30,-28}, + {38,-28}}, color={0,0,127})); + connect(OnOffStatus.y, switch5.u2) annotation (Line(points={{-79,30},{-70,30}, + {-70,16},{16,16},{16,20},{38,20}}, color={255,0,255})); + connect(OnOffStatus.y, switch4.u2) annotation (Line(points={{-79,30},{-70,30}, + {-70,16},{16,16},{16,20},{26,20},{26,60},{38,60}}, color={255,0,255})); + connect(OnOffStatus.y, switch6.u2) annotation (Line(points={{-79,30},{-70,30}, + {-70,16},{16,16},{16,20},{26,20},{26,-20},{38,-20}}, color={255,0,255})); + connect(wes.y, switch4.u1) annotation (Line(points={{21,40},{24,40},{24,68},{38, + 68}}, color={0,0,127})); + connect(hal.y, switch5.u1) + annotation (Line(points={{21,0},{24,0},{24,28},{38,28}}, color={0,0,127})); + connect(eas.y, switch6.u1) annotation (Line(points={{21,-40},{24,-40},{24,-12}, + {38,-12}}, color={0,0,127})); + connect(switch4.y, y_wes) annotation (Line(points={{61,60},{80,60},{80,40},{110, + 40}}, color={0,0,127})); + connect(switch5.y, y_hal) annotation (Line(points={{61,20},{80,20},{80,0},{110, + 0}}, color={0,0,127})); + connect(switch6.y, y_eas) annotation (Line(points={{61,-20},{80,-20},{80,-40}, + {110,-40}}, color={0,0,127})); + annotation (Icon(coordinateSystem(preserveAspectRatio=false), graphics={ + Rectangle( + extent={{-100,100},{100,-100}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid), Text( + extent={{-54,54},{66,-32}}, + lineColor={0,0,0}, + fillColor={255,255,255}, + fillPattern=FillPattern.Solid, + textString="Dual Setpoint")}), Diagram( + coordinateSystem(preserveAspectRatio=false))); + end DualSetpoint; + end Controllers; + + package Units + type HeatCapacityCoefficient = Real (final quantity="HeatCapacityCoefficient", final unit="J/(m2.K)"); + type HeatResistanceCoefficient = Real (final quantity="HeatResistanceCoefficient", final unit="(m2.K)/W"); + end Units; + + model MPC_initialize + MPC mpc_model( + exteas.r_out=0.3, + exteas.r_zon=2.99999863004, + eas.r_int=0.104288735058, + eas.c_zon=2999.99933775, + wes.c_zon=2999.99943887, + winwes.g=0.15684379921, + extwes.abs=0.999997445163, + hal.c_zon=2000.00039662, + hal.c_int=50000.0, + wineas.g=0.333611340388, + extwes.r_zon=2.99999970483, + extwes.r_out=0.299999999913, + adjeas.r_adj=0.180944874275, + adjwes.c_bou=8707.05430515, + wes.r_int=0.115356613889, + wes.c_int=93704.3606751, + exteas.c_bou=40000.0, + exteas.abs=0.999999921006, + adjeas.r_zon=0.05, + extwes.c_bou=40000.0, + eas.c_int=104280.645348, + hal.r_int=0.0500000041872, + wineas.r_win=0.494813454981, + lat=0.732689219987, + adjeas.c_bou=24999.9937606, + adjwes.r_adj=0.899999980905, + adjwes.r_zon=0.899999975367, + winwes.r_win=0.666672546176); + input Real conHeat_eas= mpc_model.conHeat_eas; + input Real conHeat_hal= mpc_model.conHeat_hal; + input Real conHeat_wes= mpc_model.conHeat_wes; + input Real intCon_eas= mpc_model.intCon_eas; + input Real intCon_hal= mpc_model.intCon_hal; + input Real intCon_wes= mpc_model.intCon_wes; + input Real intLat_eas= mpc_model.intLat_eas; + input Real intLat_hal= mpc_model.intLat_hal; + input Real intLat_wes= mpc_model.intLat_wes; + input Real intRad_eas= mpc_model.intRad_eas; + input Real intRad_hal= mpc_model.intRad_hal; + input Real intRad_wes= mpc_model.intRad_wes; + input Real weaCelHei= mpc_model.weaCelHei; + input Real weaCloTim= mpc_model.weaCloTim; + input Real weaHDifHor= mpc_model.weaHDifHor; + input Real weaHDirNor= mpc_model.weaHDirNor; + input Real weaHGloHor= mpc_model.weaHGloHor; + input Real weaHHorIR= mpc_model.weaHHorIR; + input Real weaNOpa= mpc_model.weaNOpa; + input Real weaNTot= mpc_model.weaNTot; + input Real weaPAtm= mpc_model.weaPAtm; + input Real weaRelHum= mpc_model.weaRelHum; + input Real weaSolTim= mpc_model.weaSolTim; + input Real weaSolZen= mpc_model.weaSolZen; + input Real weaTBlaSky= mpc_model.weaTBlaSky; + input Real weaTDewPoi= mpc_model.weaTDewPoi; + input Real weaTDryBul= mpc_model.weaTDryBul; + input Real weaTWetBul= mpc_model.weaTWetBul; + input Real weaWinDir= mpc_model.weaWinDir; + input Real weaWinSpe= mpc_model.weaWinSpe; + Real J(start = 0, fixed=true); + equation + der(J) = mpc_model.Ptot; + end MPC_initialize; + + optimization MPC_optimize (objective = (J(finalTime)), startTime=start_time, finalTime=final_time) + extends MPC_initialize; + parameter Real start_time = 0; + parameter Real final_time = 86400; + input Real conHeat_wes_GTE; + input Real conHeat_wes_LTE; + input Real wesTdb_LTE; + input Real wesTdb_GTE; + input Real wesTdb_dGTE; + input Real wesTdb_dLTE; + input Real easTdb_dGTE; + input Real easTdb_dLTE; + input Real easTdb_LTE; + input Real easTdb_GTE; + input Real halTdb_dGTE; + input Real halTdb_dLTE; + input Real halTdb_LTE; + input Real halTdb_GTE; + input Real conHeat_eas_GTE; + input Real conHeat_eas_LTE; + input Real conHeat_hal_GTE; + input Real conHeat_hal_LTE; + constraint + mpc_model.conHeat_wes >= conHeat_wes_GTE; + mpc_model.conHeat_wes <= conHeat_wes_LTE; + mpc_model.wesTdb(startTime)=mpc_model.wesTdb(finalTime); + mpc_model.wesTdb <= wesTdb_LTE; + mpc_model.wesTdb >= wesTdb_GTE; + der(mpc_model.wesTdb) >= wesTdb_dGTE; + der(mpc_model.wesTdb) <= wesTdb_dLTE; + der(mpc_model.easTdb) >= easTdb_dGTE; + mpc_model.easTdb(startTime)=mpc_model.easTdb(finalTime); + der(mpc_model.easTdb) <= easTdb_dLTE; + mpc_model.easTdb <= easTdb_LTE; + mpc_model.easTdb >= easTdb_GTE; + der(mpc_model.halTdb) >= halTdb_dGTE; + mpc_model.halTdb(startTime)=mpc_model.halTdb(finalTime); + der(mpc_model.halTdb) <= halTdb_dLTE; + mpc_model.halTdb <= halTdb_LTE; + mpc_model.halTdb >= halTdb_GTE; + mpc_model.conHeat_eas >= conHeat_eas_GTE; + mpc_model.conHeat_eas <= conHeat_eas_LTE; + mpc_model.conHeat_hal >= conHeat_hal_GTE; + mpc_model.conHeat_hal <= conHeat_hal_LTE; + end MPC_optimize; +end LBNL71T_MPC; diff --git a/resources/model/LBNL71T_Parameters.csv b/unittests/resources/model/LBNL71T_Parameters.csv similarity index 100% rename from resources/model/LBNL71T_Parameters.csv rename to unittests/resources/model/LBNL71T_Parameters.csv diff --git a/resources/model/Simple.mo b/unittests/resources/model/Simple.mo similarity index 100% rename from resources/model/Simple.mo rename to unittests/resources/model/Simple.mo diff --git a/unittests/resources/model/Simple.mop b/unittests/resources/model/Simple.mop new file mode 100644 index 0000000..ffc3bc3 --- /dev/null +++ b/unittests/resources/model/Simple.mop @@ -0,0 +1,152 @@ +package Simple "A package containing simple examples" + model RC "A simple RC network for example purposes" + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature + prescribedTemperature + annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temperatureSensor + annotation (Placement(transformation(extent={{70,0},{90,20}}))); + Modelica.Blocks.Sources.Sine Tamb( + amplitude=10, + offset=278.15, + freqHz=1/(24*3600)) + annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow prescribedHeatFlow + annotation (Placement(transformation(extent={{-18,-40},{2,-20}}))); + Modelica.Blocks.Interfaces.RealOutput T_db + "Absolute temperature as output signal" + annotation (Placement(transformation(extent={{100,0},{120,20}}))); + Modelica.Blocks.Interfaces.RealInput q_flow(unit="W") + annotation (Placement(transformation(extent={{-140,-50},{-100,-10}}))); + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heatCapacitor(C=1e5) + annotation (Placement(transformation(extent={{20,10},{40,30}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalResistor thermalResistor(R= + 0.01) annotation (Placement(transformation(extent={{-10,0},{10,20}}))); + equation + connect(temperatureSensor.T,T_db) + annotation (Line(points={{90,10},{110,10}}, color={0,0,127})); + connect(Tamb.y,prescribedTemperature. T) + annotation (Line(points={{-59,10},{-42,10}}, + color={0,0,127})); + connect(prescribedHeatFlow.Q_flow,q_flow) + annotation (Line(points={{-18,-30},{-120,-30}}, color={0,0,127})); + connect(heatCapacitor.port, temperatureSensor.port) + annotation (Line(points={{30,10},{50,10},{70,10}}, color={191,0,0})); + connect(heatCapacitor.port, prescribedHeatFlow.port) + annotation (Line(points={{30,10},{30,-30},{2,-30}}, color={191,0,0})); + connect(prescribedTemperature.port, thermalResistor.port_a) + annotation (Line(points={{-20,10},{-16,10},{-10,10}}, color={191,0,0})); + connect(thermalResistor.port_b, heatCapacitor.port) + annotation (Line(points={{10,10},{20,10},{30,10}}, color={191,0,0})); + annotation (); + end RC; + + model RC_noinputs "A simple RC network for example purposes with no inputs" + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature + prescribedTemperature + annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temperatureSensor + annotation (Placement(transformation(extent={{70,0},{90,20}}))); + Modelica.Blocks.Sources.Sine Tamb( + amplitude=10, + offset=278.15, + freqHz=1/(24*3600)) + annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow prescribedHeatFlow + annotation (Placement(transformation(extent={{-18,-40},{2,-20}}))); + Modelica.Blocks.Interfaces.RealOutput T_db + "Absolute temperature as output signal" + annotation (Placement(transformation(extent={{100,0},{120,20}}))); + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heatCapacitor(C=1e5) + annotation (Placement(transformation(extent={{20,10},{40,30}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalResistor thermalResistor(R= + 0.01) annotation (Placement(transformation(extent={{-10,0},{10,20}}))); + Modelica.Blocks.Sources.Step q_flow( + height=10, + offset=0, + startTime=7200) + annotation (Placement(transformation(extent={{-80,-40},{-60,-20}}))); + equation + connect(temperatureSensor.T,T_db) + annotation (Line(points={{90,10},{110,10}}, color={0,0,127})); + connect(Tamb.y,prescribedTemperature. T) + annotation (Line(points={{-59,10},{-42,10}}, + color={0,0,127})); + connect(heatCapacitor.port, temperatureSensor.port) + annotation (Line(points={{30,10},{50,10},{70,10}}, color={191,0,0})); + connect(heatCapacitor.port, prescribedHeatFlow.port) + annotation (Line(points={{30,10},{30,-30},{2,-30}}, color={191,0,0})); + connect(prescribedTemperature.port, thermalResistor.port_a) + annotation (Line(points={{-20,10},{-16,10},{-10,10}}, color={191,0,0})); + connect(thermalResistor.port_b, heatCapacitor.port) + annotation (Line(points={{10,10},{20,10},{30,10}}, color={191,0,0})); + connect(prescribedHeatFlow.Q_flow, q_flow.y) + annotation (Line(points={{-18,-30},{-59,-30}}, color={0,0,127})); + end RC_noinputs; + + package SubPackage + model RC "A simple RC network for example purposes" + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature + prescribedTemperature + annotation (Placement(transformation(extent={{-40,0},{-20,20}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temperatureSensor + annotation (Placement(transformation(extent={{70,0},{90,20}}))); + Modelica.Blocks.Sources.Sine Tamb( + amplitude=10, + offset=278.15, + freqHz=1/(24*3600)) + annotation (Placement(transformation(extent={{-80,0},{-60,20}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow prescribedHeatFlow + annotation (Placement(transformation(extent={{-18,-40},{2,-20}}))); + Modelica.Blocks.Interfaces.RealOutput T_db + "Absolute temperature as output signal" + annotation (Placement(transformation(extent={{100,0},{120,20}}))); + Modelica.Blocks.Interfaces.RealInput q_flow(unit="W") + annotation (Placement(transformation(extent={{-140,-50},{-100,-10}}))); + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heatCapacitor(C=1e5) + annotation (Placement(transformation(extent={{20,10},{40,30}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalResistor thermalResistor(R= + 0.01) annotation (Placement(transformation(extent={{-10,0},{10,20}}))); + equation + connect(temperatureSensor.T,T_db) + annotation (Line(points={{90,10},{110,10}}, color={0,0,127})); + connect(Tamb.y,prescribedTemperature. T) + annotation (Line(points={{-59,10},{-42,10}}, + color={0,0,127})); + connect(prescribedHeatFlow.Q_flow,q_flow) + annotation (Line(points={{-18,-30},{-120,-30}}, color={0,0,127})); + connect(heatCapacitor.port, temperatureSensor.port) + annotation (Line(points={{30,10},{50,10},{70,10}}, color={191,0,0})); + connect(heatCapacitor.port, prescribedHeatFlow.port) + annotation (Line(points={{30,10},{30,-30},{2,-30}}, color={191,0,0})); + connect(prescribedTemperature.port, thermalResistor.port_a) + annotation (Line(points={{-20,10},{-16,10},{-10,10}}, color={191,0,0})); + connect(thermalResistor.port_b, heatCapacitor.port) + annotation (Line(points={{10,10},{20,10},{30,10}}, color={191,0,0})); + annotation (); + end RC; + end SubPackage; + + model RC_initialize + RC mpc_model( + heatCapacitor.C=3000000); + input Real q_flow= mpc_model.q_flow; + input Real pi_e; + Real J(start = 0, fixed=true); + equation + der(J) = mpc_model.q_flow*pi_e; + end RC_initialize; + + optimization RC_optimize (objective = (J(finalTime)), startTime=start_time, finalTime=final_time) + extends RC_initialize; + parameter Real start_time = 0; + parameter Real final_time = 86400; + input Real T_db_GTE; + input Real T_db_LTE; + input Real q_flow_GTE; + constraint + mpc_model.T_db(startTime)=295.0; + mpc_model.T_db >= T_db_GTE; + mpc_model.T_db <= T_db_LTE; + mpc_model.q_flow >= q_flow_GTE; + end RC_optimize; +end Simple; diff --git a/resources/model/SimpleRC_Input.csv b/unittests/resources/model/SimpleRC_Input.csv similarity index 100% rename from resources/model/SimpleRC_Input.csv rename to unittests/resources/model/SimpleRC_Input.csv diff --git a/resources/model/SimpleRC_Parameters.csv b/unittests/resources/model/SimpleRC_Parameters.csv similarity index 100% rename from resources/model/SimpleRC_Parameters.csv rename to unittests/resources/model/SimpleRC_Parameters.csv diff --git a/resources/optimization/ControlCSV.csv b/unittests/resources/optimization/ControlCSV.csv similarity index 100% rename from resources/optimization/ControlCSV.csv rename to unittests/resources/optimization/ControlCSV.csv diff --git a/resources/optimization/PriceCSV.csv b/unittests/resources/optimization/PriceCSV.csv similarity index 100% rename from resources/optimization/PriceCSV.csv rename to unittests/resources/optimization/PriceCSV.csv diff --git a/resources/optimization/SimpleRC_Constraints.csv b/unittests/resources/optimization/SimpleRC_Constraints.csv similarity index 100% rename from resources/optimization/SimpleRC_Constraints.csv rename to unittests/resources/optimization/SimpleRC_Constraints.csv diff --git a/resources/optimization/SimpleRC_Prices.csv b/unittests/resources/optimization/SimpleRC_Prices.csv similarity index 100% rename from resources/optimization/SimpleRC_Prices.csv rename to unittests/resources/optimization/SimpleRC_Prices.csv diff --git a/resources/optimization/sampleConstraintCSV_Constant.csv b/unittests/resources/optimization/sampleConstraintCSV_Constant.csv similarity index 100% rename from resources/optimization/sampleConstraintCSV_Constant.csv rename to unittests/resources/optimization/sampleConstraintCSV_Constant.csv diff --git a/resources/optimization/sampleConstraintCSV_Setback.csv b/unittests/resources/optimization/sampleConstraintCSV_Setback.csv similarity index 100% rename from resources/optimization/sampleConstraintCSV_Setback.csv rename to unittests/resources/optimization/sampleConstraintCSV_Setback.csv diff --git a/resources/weather/BerkeleyCSV.csv b/unittests/resources/weather/BerkeleyCSV.csv similarity index 100% rename from resources/weather/BerkeleyCSV.csv rename to unittests/resources/weather/BerkeleyCSV.csv diff --git a/resources/weather/Tamb.csv b/unittests/resources/weather/Tamb.csv similarity index 100% rename from resources/weather/Tamb.csv rename to unittests/resources/weather/Tamb.csv diff --git a/resources/weather/USA_CA_San.Francisco.Intl.AP.724940_TMY3.epw b/unittests/resources/weather/USA_CA_San.Francisco.Intl.AP.724940_TMY3.epw similarity index 100% rename from resources/weather/USA_CA_San.Francisco.Intl.AP.724940_TMY3.epw rename to unittests/resources/weather/USA_CA_San.Francisco.Intl.AP.724940_TMY3.epw diff --git a/resources/weather/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw b/unittests/resources/weather/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw similarity index 100% rename from resources/weather/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw rename to unittests/resources/weather/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw diff --git a/unittests/test_exodata.py b/unittests/test_exodata.py index 97aef0f..f32d949 100755 --- a/unittests/test_exodata.py +++ b/unittests/test_exodata.py @@ -22,7 +22,7 @@ class WeatherFromEPW(TestCaseMPCPy): ''' def setUp(self): - self.epw_filepath = os.path.join(utility.get_MPCPy_path(), 'resources', 'weather', \ + self.epw_filepath = os.path.join(self.get_unittest_path(), 'resources', 'weather', \ 'USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw'); self.weather = exodata.WeatherFromEPW(self.epw_filepath); @@ -57,7 +57,7 @@ class WeatherFromCSV(TestCaseMPCPy): ''' def setUp(self): - self.csv_filepath = os.path.join(utility.get_MPCPy_path(), 'resources', 'weather', 'BerkeleyCSV.csv'); + self.csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'weather', 'BerkeleyCSV.csv'); self.geography = [37.8716, -122.2727]; self.variable_map = {'TemperatureF' : ('weaTDryBul', units.degF), \ 'Dew PointF' : ('weaTDewPoi', units.degF), \ @@ -153,7 +153,7 @@ class InternalFromCSV(TestCaseMPCPy): ''' def setUp(self): - self.csv_filepath = os.path.join(utility.get_MPCPy_path(), 'resources', 'internal', 'sampleCSV.csv'); + self.csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'internal', 'sampleCSV.csv'); self.variable_map = {'intRad_wes' : ('wes', 'intRad', units.W_m2), \ 'intCon_wes' : ('wes', 'intCon', units.W_m2), \ 'intLat_wes' : ('wes', 'intLat', units.W_m2), \ @@ -220,7 +220,7 @@ class ControlFromCSV(TestCaseMPCPy): ''' def setUp(self): - csv_filepath = os.path.join(utility.get_MPCPy_path(), 'resources', 'building', 'ControlCSV_0.csv'); + csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'building', 'ControlCSV_0.csv'); variable_map = {'conHeat_wes' : ('conHeat_wes', units.unit1), \ 'conHeat_hal' : ('conHeat_hal', units.unit1), \ 'conHeat_eas' : ('conHeat_eas', units.unit1)}; @@ -244,7 +244,7 @@ class OtherInputFromCSV(TestCaseMPCPy): ''' def setUp(self): - csv_filepath = os.path.join(utility.get_MPCPy_path(), 'resources', 'weather', 'Tamb.csv'); + csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'weather', 'Tamb.csv'); variable_map = {'T' : ('Tamb', units.degC)}; # Instantiate other input object self.otherinput = exodata.OtherInputFromCSV(csv_filepath, \ @@ -266,7 +266,7 @@ class ParameterFromCSV(TestCaseMPCPy): ''' def setUp(self): - csv_filepath = os.path.join(utility.get_MPCPy_path(), 'resources', 'model', 'LBNL71T_Parameters.csv'); + csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'model', 'LBNL71T_Parameters.csv'); # Instantiate weather object self.parameters = exodata.ParameterFromCSV(csv_filepath); @@ -284,7 +284,7 @@ class ConstraintFromCSV(TestCaseMPCPy): ''' def setUp(self): - csv_filepath = os.path.join(utility.get_MPCPy_path(), 'resources', 'optimization', 'sampleConstraintCSV_Setback.csv'); + csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'optimization', 'sampleConstraintCSV_Setback.csv'); variable_map = {'wesTdb_min' : ('wesTdb', 'GTE', units.degC), \ 'wesTdb_max' : ('wesTdb', 'LTE', units.degC), \ 'easTdb_min' : ('easTdb', 'GTE', units.degC), \ @@ -320,7 +320,7 @@ def setUp(self): start_time_occupancy = '3/1/2012'; final_time_occupancy = '3/7/2012 23:55:00'; # Load occupancy models - with open(os.path.join(utility.get_MPCPy_path(), 'unittests', 'references', 'test_models',\ + with open(os.path.join(self.get_unittest_path(), 'references', 'test_models',\ 'OccupancyFromQueueing', 'occupancy_model_estimated.txt'), 'r') as f: occupancy_model = pickle.load(f); # Define state variables and values @@ -352,7 +352,7 @@ class PriceFromCSV(TestCaseMPCPy): ''' def setUp(self): - csv_filepath = os.path.join(utility.get_MPCPy_path(), 'resources', 'optimization', 'PriceCSV.csv'); + csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'optimization', 'PriceCSV.csv'); variable_map = {'pi_e' : ('pi_e', units.unit1)}; # Instantiate weather object self.prices = exodata.PriceFromCSV(csv_filepath, \ @@ -374,7 +374,7 @@ class Type(TestCaseMPCPy): ''' def setUp(self): - self.epw_filepath = utility.get_MPCPy_path()+os.sep + 'resources' + os.sep + 'weather' + os.sep + 'USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw'; + self.epw_filepath = os.path.join(self.get_unittest_path(), 'resources', 'weather', 'USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw'); self.weather = exodata.WeatherFromEPW(self.epw_filepath); def test_set_time_interval(self): '''Test this method sets the time metrics properly in the exodata source.''' diff --git a/unittests/test_models.py b/unittests/test_models.py index b5f56d9..be17306 100755 --- a/unittests/test_models.py +++ b/unittests/test_models.py @@ -26,7 +26,6 @@ class SimpleRC(TestCaseMPCPy): def setUp(self): self.start_time = '1/1/2017'; self.final_time = '1/2/2017'; - self.MPCPyPath = utility.get_MPCPy_path(); # Set measurements self.measurements = {}; self.measurements['T_db'] = {'Sample' : variables.Static('T_db_sample', 1800, units.s)}; @@ -34,10 +33,10 @@ def setUp(self): def test_simulate(self): '''Test simulation of a model.''' # Set model paths - mopath = os.path.join(self.MPCPyPath, 'resources', 'model', 'Simple.mo'); + mopath = os.path.join(self.get_unittest_path(), 'resources', 'model', 'Simple.mo'); modelpath = 'Simple.RC'; # Gather control inputs - control_csv_filepath = os.path.join(self.MPCPyPath, 'resources', 'model', 'SimpleRC_Input.csv'); + control_csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'model', 'SimpleRC_Input.csv'); variable_map = {'q_flow_csv' : ('q_flow', units.W)}; controls = exodata.ControlFromCSV(control_csv_filepath, variable_map); controls.collect_data(self.start_time, self.final_time); @@ -58,7 +57,7 @@ def test_simulate(self): def test_simulate_noinputs(self): '''Test simulation of a model with no external inputs.''' # Set model paths - mopath = os.path.join(self.MPCPyPath, 'resources', 'model', 'Simple.mo'); + mopath = os.path.join(self.get_unittest_path(), 'resources', 'model', 'Simple.mo'); modelpath = 'Simple.RC_noinputs'; # Instantiate model self.model = models.Modelica(models.JModelica, \ @@ -74,7 +73,7 @@ def test_simulate_noinputs(self): def test_estimate_error_nofreeparameters(self): '''Test error raised if no free parameters passed.''' # Set model paths - mopath = os.path.join(self.MPCPyPath, 'resources', 'model', 'Simple.mo'); + mopath = os.path.join(self.get_unittest_path(), 'resources', 'model', 'Simple.mo'); modelpath = 'Simple.RC_noinputs'; # Instantiate model self.model_no_params = models.Modelica(models.JModelica, \ @@ -108,12 +107,11 @@ class EstimateFromJModelica(TestCaseMPCPy): ''' def setUp(self): - self.MPCPyPath = utility.get_MPCPy_path(); ## Setup building fmu emulation - self.building_source_file_path = self.MPCPyPath + os.sep + 'resources' + os.sep + 'building' + os.sep + 'LBNL71T_Emulation_JModelica_v2.fmu'; + self.building_source_file_path = os.path.join(self.get_unittest_path(), 'resources', 'building', 'LBNL71T_Emulation_JModelica_v2.fmu'); self.zone_names = ['wes', 'hal', 'eas']; - self.weather_path = self.MPCPyPath + os.sep + 'resources' + os.sep + 'weather' + os.sep + 'USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw'; - self.internal_path = self.MPCPyPath + os.sep + 'resources' + os.sep + 'internal' + os.sep + 'sampleCSV.csv'; + self.weather_path = os.path.join(self.get_unittest_path(), 'resources', 'weather', 'USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw'); + self.internal_path = os.path.join(self.get_unittest_path(), 'resources', 'internal', 'sampleCSV.csv'); self.internal_variable_map = {'intRad_wes' : ('wes', 'intRad', units.W_m2), \ 'intCon_wes' : ('wes', 'intCon', units.W_m2), \ 'intLat_wes' : ('wes', 'intLat', units.W_m2), \ @@ -123,7 +121,7 @@ def setUp(self): 'intRad_eas' : ('eas', 'intRad', units.W_m2), \ 'intCon_eas' : ('eas', 'intCon', units.W_m2), \ 'intLat_eas' : ('eas', 'intLat', units.W_m2)}; - self.control_path = self.MPCPyPath + os.sep + 'resources' + os.sep + 'building' + os.sep + 'ControlCSV_0.csv'; + self.control_path = os.path.join(self.get_unittest_path(), 'resources', 'building', 'ControlCSV_0.csv'); self.control_variable_map = {'conHeat_wes' : ('conHeat_wes', units.unit1), \ 'conHeat_hal' : ('conHeat_hal', units.unit1), \ 'conHeat_eas' : ('conHeat_eas', units.unit1)}; @@ -137,7 +135,7 @@ def setUp(self): self.measurements['easPhvac'] = {'Sample' : variables.Static('easTdb_sample', 1800, units.s)}; self.measurements['Ptot'] = {'Sample' : variables.Static('easTdb_sample', 1800, units.s)}; ## Setup model - self.mopath = self.MPCPyPath + os.sep + 'resources' + os.sep + 'model' + os.sep + 'LBNL71T_MPC.mo'; + self.mopath = os.path.join(self.get_unittest_path(), 'resources', 'model', 'LBNL71T_MPC.mo'); self.modelpath = 'LBNL71T_MPC.MPC'; self.libraries = os.environ.get('MODELICAPATH'); self.estimate_method = models.JModelica; @@ -146,8 +144,8 @@ def setUp(self): self.weather = exodata.WeatherFromEPW(self.weather_path); self.internal = exodata.InternalFromCSV(self.internal_path, self.internal_variable_map, tz_name = self.weather.tz_name); self.control = exodata.ControlFromCSV(self.control_path, self.control_variable_map, tz_name = self.weather.tz_name); - # Parameters - self.parameters = exodata.ParameterFromCSV(self.MPCPyPath + os.sep + 'resources' + os.sep + 'model' + os.sep + 'LBNL71T_Parameters.csv'); + # Parameters + self.parameters = exodata.ParameterFromCSV(os.path.join(self.get_unittest_path(), 'resources', 'model', 'LBNL71T_Parameters.csv')); self.parameters.collect_data(); self.parameters.data['lat'] = {}; self.parameters.data['lat']['Value'] = self.weather.lat; @@ -242,7 +240,7 @@ def test_estimate_and_validate(self): self.building.collect_measurements(self.start_time_validation, self.final_time_validation); self.model.measurements = self.building.measurements; self.model.validate(self.start_time_validation, self.final_time_validation, \ - os.path.join(self.MPCPyPath, 'unittests', 'outputs', 'model_validation')); + os.path.join(self.get_unittest_path(), 'outputs', 'model_validation')); # Check references RMSE = {}; for key in self.model.RMSE.keys(): @@ -260,20 +258,19 @@ class EstimateFromUKF(TestCaseMPCPy): def setUp(self): self.start_time = '1/1/2017'; self.final_time = '1/10/2017'; - self.MPCPyPath = utility.get_MPCPy_path(); # Set measurements self.measurements = {}; self.measurements['T_db'] = {'Sample' : variables.Static('T_db_sample', 1800, units.s)}; # Set model paths - mopath = os.path.join(self.MPCPyPath, 'resources', 'model', 'Simple.mo'); + mopath = os.path.join(self.get_unittest_path(), 'resources', 'model', 'Simple.mo'); modelpath = 'Simple.RC'; self.moinfo = (mopath, modelpath, {}) # Gather parameters - parameter_csv_filepath = os.path.join(self.MPCPyPath, 'resources', 'model', 'SimpleRC_Parameters.csv'); + parameter_csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'model', 'SimpleRC_Parameters.csv'); self.parameters = exodata.ParameterFromCSV(parameter_csv_filepath); self.parameters.collect_data(); # Gather control inputs - control_csv_filepath = os.path.join(self.MPCPyPath, 'resources', 'model', 'SimpleRC_Input.csv'); + control_csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'model', 'SimpleRC_Input.csv'); variable_map = {'q_flow_csv' : ('q_flow', units.W)}; self.controls = exodata.ControlFromCSV(control_csv_filepath, variable_map); self.controls.collect_data(self.start_time, self.final_time); @@ -329,10 +326,8 @@ def setUp(self): # Testing time self.start_time = '3/8/2013'; self.final_time = '3/15/2013 23:59'; - # Set path variable(s) - self.MPCPyPath = utility.get_MPCPy_path(); # Setup building measurement collection from csv - self.csv_filepath = self.MPCPyPath+os.sep + 'resources' + os.sep + 'building' + os.sep + 'OccData.csv'; + self.csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'building', 'OccData.csv'); # Measurements self.measurements = {}; self.measurements['occupancy'] = {'Sample' : variables.Static('occupancy_sample', 300, units.s)}; @@ -401,7 +396,7 @@ def test_validate(self): self.occupancy.set_simulate_options(simulate_options); np.random.seed(1); self.occupancy.validate(self.start_time, self.final_time, \ - os.path.join(self.MPCPyPath, 'unittests', 'outputs', \ + os.path.join(self.get_unittest_path(), 'outputs', \ 'occupancy_model_validate')); # Check references RMSE = {}; diff --git a/unittests/test_optimization.py b/unittests/test_optimization.py index 13b488f..180d282 100755 --- a/unittests/test_optimization.py +++ b/unittests/test_optimization.py @@ -24,9 +24,9 @@ def setUp(self): self.start_time = '1/1/2017'; self.final_time = '1/2/2017'; # Set .mo path - self.mopath = os.path.join(utility.get_MPCPy_path(), 'resources', 'model', 'Simple.mo'); + self.mopath = os.path.join(self.get_unittest_path(), 'resources', 'model', 'Simple.mo'); # Gather inputs - control_csv_filepath = utility.get_MPCPy_path()+os.sep + 'resources' + os.sep + 'model' + os.sep + 'SimpleRC_Input.csv'; + control_csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'model', 'SimpleRC_Input.csv'); control_variable_map = {'q_flow_csv' : ('q_flow', units.W)}; self.controls = exodata.ControlFromCSV(control_csv_filepath, control_variable_map); self.controls.collect_data(self.start_time, self.final_time); @@ -35,7 +35,7 @@ def setUp(self): self.measurements['T_db'] = {'Sample' : variables.Static('T_db_sample', 1800, units.s)}; self.measurements['q_flow'] = {'Sample' : variables.Static('q_flow_sample', 1800, units.s)}; # Gather constraints - constraint_csv_filepath = utility.get_MPCPy_path()+os.sep + 'resources' + os.sep + 'optimization' + os.sep + 'SimpleRC_Constraints.csv'; + constraint_csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'optimization', 'SimpleRC_Constraints.csv'); constraint_variable_map = {'q_flow_min' : ('q_flow', 'GTE', units.W), \ 'T_db_min' : ('T_db', 'GTE', units.K), \ 'T_db_max' : ('T_db', 'LTE', units.K)}; @@ -102,7 +102,7 @@ def test_set_problem_type(self): # Set new problem type opt_problem.set_problem_type(optimization.EnergyCostMin); # Gather prices - price_csv_filepath = os.path.join(utility.get_MPCPy_path(), 'resources', 'optimization', 'SimpleRC_Prices.csv'); + price_csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'optimization', 'SimpleRC_Prices.csv'); price_variable_map = {'energy' : ('pi_e', units.unit1)}; price = exodata.PriceFromCSV(price_csv_filepath, price_variable_map); price.collect_data(self.start_time, self.final_time); @@ -262,9 +262,8 @@ class OptimizeAdvancedFromJModelica(TestCaseMPCPy): ''' def setUp(self): - self.MPCPyPath = utility.get_MPCPy_path(); ## Setup model - self.mopath = self.MPCPyPath + os.sep + 'resources' + os.sep + 'model' + os.sep + 'LBNL71T_MPC.mo'; + self.mopath = os.path.join(self.get_unittest_path(), 'resources', 'model', 'LBNL71T_MPC.mo'); self.modelpath = 'LBNL71T_MPC.MPC'; self.libraries = os.environ.get('MODELICAPATH'); self.estimate_method = models.JModelica; @@ -288,11 +287,11 @@ def setUp(self): self.start_time_optimization = '1/2/2015'; self.final_time_optimization = '1/3/2015'; # Weather - self.weather_path = self.MPCPyPath + os.sep + 'resources' + os.sep + 'weather' + os.sep + 'USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw'; + self.weather_path = os.path.join(self.get_unittest_path(), 'resources', 'weather', 'USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw'); self.weather = exodata.WeatherFromEPW(self.weather_path); self.weather.collect_data(self.start_time_exodata, self.final_time_exodata); # Internal - self.internal_path = self.MPCPyPath + os.sep + 'resources' + os.sep + 'internal' + os.sep + 'sampleCSV.csv'; + self.internal_path = os.path.join(self.get_unittest_path(), 'resources', 'internal', 'sampleCSV.csv'); self.internal_variable_map = {'intRad_wes' : ('wes', 'intRad', units.W_m2), \ 'intCon_wes' : ('wes', 'intCon', units.W_m2), \ 'intLat_wes' : ('wes', 'intLat', units.W_m2), \ @@ -305,18 +304,18 @@ def setUp(self): self.internal = exodata.InternalFromCSV(self.internal_path, self.internal_variable_map, tz_name = self.weather.tz_name); self.internal.collect_data(self.start_time_exodata, self.final_time_exodata); # Control (as initialization) - self.control_path = self.MPCPyPath + os.sep + 'resources' + os.sep + 'optimization' + os.sep + 'ControlCSV.csv'; + self.control_path = os.path.join(self.get_unittest_path(), 'resources', 'optimization', 'ControlCSV.csv'); self.control_variable_map = {'conHeat_wes' : ('conHeat_wes', units.unit1), \ 'conHeat_hal' : ('conHeat_hal', units.unit1), \ 'conHeat_eas' : ('conHeat_eas', units.unit1)}; self.control = exodata.ControlFromCSV(self.control_path, self.control_variable_map, tz_name = self.weather.tz_name); self.control.collect_data(self.start_time_exodata, self.final_time_exodata); # Parameters - self.parameters_path = self.MPCPyPath + os.sep + 'unittests' + os.sep + 'outputs' + os.sep + 'model_parameters.txt'; + self.parameters_path = os.path.join(self.get_unittest_path(), 'outputs', 'model_parameters.txt'); self.parameters = exodata.ParameterFromCSV(self.parameters_path); self.parameters.collect_data(); # Constraints - self.constraints_path = self.MPCPyPath + os.sep + 'resources' + os.sep + 'optimization' + os.sep + 'sampleConstraintCSV_Constant.csv'; + self.constraints_path = os.path.join(self.get_unittest_path(), 'resources', 'optimization', 'sampleConstraintCSV_Constant.csv'); self.constraints_variable_map = {'wesTdb_min' : ('wesTdb', 'GTE', units.degC), \ 'wesTdb_max' : ('wesTdb', 'LTE', units.degC), \ 'easTdb_min' : ('easTdb', 'GTE', units.degC), \ @@ -341,7 +340,7 @@ def setUp(self): self.constraints.data['easTdb']['Cyclic'] = variables.Static('easTdb_cyclic', 1, units.boolean_integer); self.constraints.data['halTdb']['Cyclic'] = variables.Static('halTdb_cyclic', 1, units.boolean_integer); # Prices - self.prices_path = self.MPCPyPath + os.sep + 'resources' + os.sep + 'optimization' + os.sep + 'PriceCSV.csv'; + self.prices_path = os.path.join(self.get_unittest_path(), 'resources', 'optimization', 'PriceCSV.csv'); self.price_variable_map = {'pi_e' : ('pi_e', units.unit1)}; self.prices = exodata.PriceFromCSV(self.prices_path, self.price_variable_map, tz_name = self.weather.tz_name); self.prices.collect_data(self.start_time_exodata, self.final_time_exodata); diff --git a/unittests/test_systems.py b/unittests/test_systems.py index 1ac8e60..8b97a5f 100755 --- a/unittests/test_systems.py +++ b/unittests/test_systems.py @@ -9,7 +9,6 @@ from mpcpy import systems from mpcpy import variables from mpcpy import units -from mpcpy import utility from testing import TestCaseMPCPy from matplotlib import pyplot as plt import os @@ -18,15 +17,13 @@ class EmulationFromFMU(TestCaseMPCPy): #%% FMU def setUp(self): - # Set path variable(s) - MPCPyPath = utility.get_MPCPy_path(); # Setup building - self.building_source_file_path = os.path.join(MPCPyPath, 'resources', 'building', \ + self.building_source_file_path = os.path.join(self.get_unittest_path(), 'resources', 'building', \ 'LBNL71T_Emulation_JModelica_v2.fmu'); self.zone_names = ['wes', 'hal', 'eas']; - weather_path = os.path.join(MPCPyPath, 'resources', 'weather', \ + weather_path = os.path.join(self.get_unittest_path(), 'resources', 'weather', \ 'USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw'); - internal_path = os.path.join(MPCPyPath, 'resources', 'internal', 'sampleCSV.csv'); + internal_path = os.path.join(self.get_unittest_path(), 'resources', 'internal', 'sampleCSV.csv'); internal_variable_map = {'intRad_wes' : ('wes', 'intRad', units.W_m2), \ 'intCon_wes' : ('wes', 'intCon', units.W_m2), \ 'intLat_wes' : ('wes', 'intLat', units.W_m2), \ @@ -36,7 +33,7 @@ def setUp(self): 'intRad_eas' : ('eas', 'intRad', units.W_m2), \ 'intCon_eas' : ('eas', 'intCon', units.W_m2), \ 'intLat_eas' : ('eas', 'intLat', units.W_m2)}; - control_path = os.path.join(MPCPyPath, 'resources', 'building', 'ControlCSV_0.csv'); + control_path = os.path.join(self.get_unittest_path(), 'resources', 'building', 'ControlCSV_0.csv'); control_variable_map = {'conHeat_wes' : ('conHeat_wes', units.unit1), \ 'conHeat_hal' : ('conHeat_hal', units.unit1), \ 'conHeat_eas' : ('conHeat_eas', units.unit1)}; @@ -130,16 +127,14 @@ def plot_measurements(self, name): plt.legend(loc='upper center', bbox_to_anchor=(0.5, 1.1), ncol=4, prop={'size':12}); plt.ylabel(variable.quantity_name + ' [' + variable.display_unit.name + ']'); plt.rcParams.update({'font.size': 16}); - plt.savefig(self.MPCPyPath + os.sep + 'unittests' + os.sep + 'resources' + os.sep + name + '.png'); + plt.savefig(os.path.join(self.get_unittest_path(), 'outputs', name + '.png')); plt.close(); class RealfromCSV(TestCaseMPCPy): #%% CSV def setUp(self): - # Set path variable(s) - MPCPyPath = utility.get_MPCPy_path(); # Setup building measurement collection from csv - self.csv_filepath = os.path.join(MPCPyPath, 'resources', 'building', 'OccData.csv'); + self.csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'building', 'OccData.csv'); # Measurements self.measurements = {}; self.measurements['occupancy'] = {'Sample' : variables.Static('occupancy_sample', 300, units.s)}; diff --git a/unittests/test_utility.py b/unittests/test_utility.py index 64e4b60..ac2724b 100755 --- a/unittests/test_utility.py +++ b/unittests/test_utility.py @@ -10,17 +10,20 @@ from mpcpy import units from mpcpy import systems from mpcpy import models +from testing import TestCaseMPCPy #%% General methods test -class TestEmulationFromFMU(unittest.TestCase): +class TestEmulationFromFMU(TestCaseMPCPy): def setUp(self): self.parameter_data = {}; self.parameter_data['par'] = {}; self.parameter_data['par']['Value'] = 1; # instantiate building fmu v1.0 - self.building_1 = systems.EmulationFromFMU({}, fmupath = utility.get_MPCPy_path()+os.sep + 'resources' + os.sep + 'building' + os.sep + 'LBNL71T_Emulation_JModelica_v1.fmu', parameter_data = self.parameter_data); + fmupath_1 = os.path.join(self.get_unittest_path(), 'resources', 'building', 'LBNL71T_Emulation_JModelica_v1.fmu'); + self.building_1 = systems.EmulationFromFMU({}, fmupath = fmupath_1, parameter_data = self.parameter_data); # instantiate building fmu v2.0 - self.building_2 = systems.EmulationFromFMU({}, fmupath = utility.get_MPCPy_path()+os.sep + 'resources' + os.sep + 'building' + os.sep + 'LBNL71T_Emulation_JModelica_v2.fmu', parameter_data = self.parameter_data); + fmupath_2 = os.path.join(self.get_unittest_path(), 'resources', 'building', 'LBNL71T_Emulation_JModelica_v2.fmu'); + self.building_2 = systems.EmulationFromFMU({}, fmupath = fmupath_2, parameter_data = self.parameter_data); def test_fmu_version(self): # fmu 1.0 self.assertEqual(self.building_1.fmu_version, '1.0'); @@ -45,9 +48,9 @@ def test_get_unit_class_from_unit_string(self): def test_free_parameter_check(self): self.assertEqual(self.building_1.parameter_data['par']['Free'].get_base_data(), 0); -class TestFMIVersionDefault(unittest.TestCase): +class TestFMIVersionDefault(TestCaseMPCPy): def setUp(self): - self.mopath = utility.get_MPCPy_path()+os.sep + 'resources' + os.sep + 'model' + os.sep + 'Simple.mo'; + self.mopath = os.path.join(self.get_unittest_path(), 'resources', 'model', 'Simple.mo'); self.modelpath = 'Simple.RC'; def test_fmi_default(self): @@ -56,9 +59,9 @@ def test_fmi_default(self): model = models.Modelica(models.JModelica, models.RMSE, {}, moinfo = (self.mopath, self.modelpath, {})); self.assertEqual(model.fmu_version, '2.0'); -class TestGetInputNames(unittest.TestCase): +class TestGetInputNames(TestCaseMPCPy): def setUp(self): - self.mopath = utility.get_MPCPy_path()+os.sep + 'resources' + os.sep + 'model' + os.sep + 'Simple.mo'; + self.mopath = os.path.join(self.get_unittest_path(), 'resources', 'model', 'Simple.mo'); self.modelpath = 'Simple.RC'; def test_fmi_version(self): diff --git a/unittests/testing.py b/unittests/testing.py index 23fd28a..f1307cf 100644 --- a/unittests/testing.py +++ b/unittests/testing.py @@ -18,6 +18,15 @@ class TestCaseMPCPy(unittest.TestCase): __metaclass__ = ABCMeta; + def get_unittest_path(self): + '''Returns the path to the unittest directory. + + ''' + + unittest_path = os.path.join(utility.get_MPCPy_path(), 'unittests'); + + return unittest_path; + def get_ref_path(self): '''Returns the path to the test data reference file.