Commit 9c077890 authored by Radim Vavřík's avatar Radim Vavřík
Browse files

Initial commit.

parents
###############################################################################
# The MpiUncertainty Application
################################################################################
# Define CMake compatibility version
cmake_minimum_required (VERSION 2.6 FATAL_ERROR)
# The name of this project.
project (MpiUncertainty)
include (${CONFIGPATH})
################################################################################
# Installation items
################################################################################
set (MPIUNCERTAINTY_PATH_BINS "usr/bin")
set (MPIUNCERTAINTY_PATH_CONFIG "etc/bbque")
set (MPIUNCERTAINTY_PATH_RECIPES "etc/bbque/recipes")
set (MPIUNCERTAINTY_PATH_DOCS "usr/share/bbque/mpiuncertainty")
set (CMAKE_INSTALL_RPATH "${CONFIG_BOSP_RUNTIME_PATH}/lib/bbque:${CONFIG_BOSP_RUNTIME_PATH}/lib")
set (CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
################################################################################
# Common initialization settings
################################################################################
# Load additional CMake modules
list (APPEND CMAKE_MODULE_PATH
"${BOSP_CMAKE_MODULES}")
list (APPEND CMAKE_MODULE_PATH
"${PROJECT_SOURCE_DIR}/.cmake")
# Make sure the compiler can find include files
include_directories (
${PROJECT_BINARY_DIR}/include
${PROJECT_SOURCE_DIR}/include
)
message ( STATUS )
message ( STATUS "Checking dependencies..." )
# Setup the source tree versioning number
include (GetGitRevisionDescription)
git_describe(GIT_SHA1)
set (VERSION "${GIT_SHA1}")
# Check if running un UNIX like systems
if (UNIX)
add_definitions(-DUNIX)
endif(UNIX)
################################################################################
# Build version specific configurations
################################################################################
# Choose the type of build, options are:
# None Debug Release RelWithDebInfo MinSizeRel
# Set default release version to RELEASE
if (NOT CMAKE_BUILD_TYPE)
set (CMAKE_BUILD_TYPE RelWithDebInfo)
endif (NOT CMAKE_BUILD_TYPE)
# Add flags common to all builds
set (BOSP_CPP11 "0x")
if (GCC_TAG GREATER "46")
set (BOSP_CPP11 "11")
endif (GCC_TAG GREATER "46")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++${BOSP_CPP11} -Wall")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-local-typedefs")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGCC_VERSION=${GCC_VERSION}")
# These are used to clean-up unreferenced libraries symbols
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--gc-sections")
# Add "Generic-Linux" specific flags
if (CONFIG_TARGET_LINUX_NATIVE)
set (BBQUE_TARGET_OS "Native-Linux")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
endif (CONFIG_TARGET_LINUX_NATIVE)
# Add "ARM-Linux" specific flags
if (CONFIG_TARGET_LINUX_ARM)
set (BBQUE_TARGET_OS "ARM-Linux")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
endif (CONFIG_TARGET_LINUX_ARM)
# Add "Android-Linux" specific flags
if (CONFIG_TARGET_ANDROID)
set (BBQUE_TARGET_OS "Android-Linux")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I../../../out/include -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -D__STDINT_LIMITS -D_GLIBCXX_USE_C99_STDINT_TR1 -D__BIONIC__ -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -fexceptions -frtti -mthumb -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -DANDROID -Wa,--noexecstack")
# -ffunction-sections -fdata-sections -Wl,--gc-sections - REMOVED becaus of missing symbols
endif (CONFIG_TARGET_ANDROID)
# Check target bitness
set (BBQUE_TARGET_ARCH 32)
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
set (BBQUE_TARGET_ARCH 64)
endif (CMAKE_SIZEOF_VOID_P EQUAL 8)
set (BBQUE_BUILD_FLAVOR
"${BBQUE_TARGET_OS} (${BBQUE_TARGET_ARCH}bit - ${CMAKE_BUILD_TYPE})")
# Options for build version: DEBUG
set (CMAKE_CXX_FLAGS_DEBUG "-O0 -g -Wextra -pedantic -DBBQUE_DEBUG -DDEBUG")
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set (BBQUE_DEBUG ON)
endif (CMAKE_BUILD_TYPE STREQUAL "Debug")
# Options for build version: DESKTOP RELEASE
set (CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
# Options for build version: EMBEDDED RELEASE
set (CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG")
################################################################################
# Installation locations
################################################################################
# set default install prefix to project root directory
if (CMAKE_INSTALL_PREFIX STREQUAL "/usr/local")
set (CMAKE_INSTALL_PREFIX "${PROJECT_SOURCE_DIR}/out" )
endif (CMAKE_INSTALL_PREFIX STREQUAL "/usr/local")
################################################################################
# Lookup for library dependencies
################################################################################
# Force usage of BOSP provided BOOST installation
set (Boost_NO_SYSTEM_PATHS ON)
set (BOOST_ROOT ${CMAKE_INSTALL_PREFIX})
set (BOOST_INCLUDEDIR ${CMAKE_INSTALL_PREFIX})
# Check for required libs and packages (headers + lib)
find_package(Boost 1.45.0 REQUIRED program_options)
# Add compilation dependencies
include_directories(
${Boost_INCLUDE_DIRS}
)
# Add linking dependencies
link_directories(
${Boost_LIBRARY_DIRS}
)
################################################################################
# Subdirectories analysis
################################################################################
## Add package version definition
configure_file (
"${PROJECT_SOURCE_DIR}/src/version.cc.in"
"${PROJECT_BINARY_DIR}/src/version.cc" @ONLY
)
# Recurse into project subfolders
add_subdirectory (src)
install(DIRECTORY "${PROJECT_SOURCE_DIR}/recipes/"
DESTINATION "${MPIUNCERTAINTY_PATH_RECIPES}"
FILES_MATCHING PATTERN "*.recipe")
################################################################################
# Doxygen Documentation
################################################################################
# check if doxygen is even installed
find_package(Doxygen)
if (DOXYGEN_FOUND STREQUAL "NO")
message(FATAL_ERROR "Doxygen not found. "
"Please get a copy http://www.doxygen.org")
endif (DOXYGEN_FOUND STREQUAL "NO")
# prepare doxygen configuration file
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
# add doxygen as target
add_custom_target (doxygen ${DOXYGEN_EXECUTABLE}
${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
# cleanup $build/api-doc on "make clean"
set_property(DIRECTORY APPEND PROPERTY
ADDITIONAL_MAKE_CLEAN_FILES api-doc)
# add doxygen as dependency to doc-target
get_target_property (DOC_TARGET doc TYPE)
if (NOT DOC_TARGET)
add_custom_target(doc)
endif ()
add_dependencies (doc doxygen)
# install HTML API documentation and manual pages
set (DOC_PATH "${RTLIB_TUTORIAL_PATH_DOCS}")
install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/api-doc/html
DESTINATION ${MPIUNCERTAINTY_PATH_DOCS} OPTIONAL)
# install man pages into packages, scope is now project root..
install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/api-doc/man/man3
DESTINATION ${MPIUNCERTAINTY_PATH_DOCS} OPTIONAL)
################################################################################
# Configuration resume
################################################################################
# display status message for important variables
message ( STATUS )
message ( STATUS "===================[ MpiUncertainty - Building System Configuration ]"
"====================" )
message ( STATUS "Version............... ${VERSION}" )
message ( STATUS "Build Flavor.......... ${BBQUE_BUILD_FLAVOR}" )
message ( STATUS " Target............. ${CONFIG_TARGET_NAME} ${CONFIG_TARGET_DESCRIPTION}" )
message ( STATUS " CFLAGS............. ${CMAKE_C_FLAGS}")
message ( STATUS " CXXFLAGS............. ${CMAKE_CXX_FLAGS}")
message ( STATUS "Installation prefix... ${CMAKE_INSTALL_PREFIX}" )
message ( STATUS " Binary............. <prefix>/${MPIUNCERTAINTY_PATH_BINS}" )
message ( STATUS " Recipes............ <prefix>/${MPIUNCERTAINTY_PATH_RECIPES}" )
message ( STATUS " Documentation...... <prefix>/${MPIUNCERTAINTY_PATH_DOCS}" )
message ( STATUS "Using RTLib........... ${BBQUE_RTLIB_LIBRARY}" )
message ( STATUS "Boost library......... ${Boost_LIBRARY_DIRS}" )
message ( STATUS )
message ( STATUS "Default values could be changes at command line, with:")
message ( STATUS " cmake -D<Variable>=<Value>" )
message ( STATUS "or use the '-i' cmake flag to run in interactive mode" )
message ( STATUS "======================================================"
"==========================" )
message(STATUS)
This diff is collapsed.
config CONTRIB_MPIUNCERTAINTY
bool "MpiUncertainty"
select CONTRIBS
default n
---help---
Build the MpiUncertainty application.
Insert here a description of this application.
If unsure, say No to this option.
################################################################################
# MpiUncertainty Configuration
################################################################################
# Add here application specific configuration option
################################################################################
# Log4CPP Logger Configuration
################################################################################
[log4cpp]
################################################################################
# By default, all applications logs everything on a console
#rootCategory = ERROR, raFile
rootCategory = DEBUG, raConsole
################################################################################
# RTLib defined loglevels
category.rtl = NOTICE
category.rpc = NOTICE
category.exc = NOTICE
################################################################################
# Console Appender
appender.raConsole = org.apache.log4j.ConsoleAppender
appender.raConsole.layout = org.apache.log4j.PatternLayout
appender.raConsole.layout.ConversionPattern = %d{%H:%M:%S,%l} - %-6p %-15c : %m%n
################################################################################
# File Appender
appender.raFile = org.apache.log4j.FileAppender
appender.raFile.fileName = ${CONFIG_BOSP_RUNTIME_PATH}/apps.log
appender.raFile.layout = org.apache.log4j.PatternLayout
appender.raFile.layout.ConversionPattern = %d{%Y-%m-%d %H:%M:%S,%l} - %-6p %-15c : %m%n
Uncertainty modelling for BOSP
------------------------------
This software provides uncertainty modelling of rainfall-runoff model Math1D
adapted for execution as a managed application under the BOSP.
Prerequisities
--------------
- Properly installed and configured BOSP framework
(http://bosp.dei.polimi.it/doku.php?id=how-to)
Installation
------------
1) Place root folder of the application (MpiUncertainty) to the user
contribution folder of the BOSP installation
(e.g. /home/%user%/BOSP/contrib/user).
2) Start a BOSP shell by sourcing the environment configuration script
bosp_init.env:
$ . ~/BOSP/out/etc/bbque/bosp_init.env
3) Move to the BOSP working directory and install the newly added application:
$ cd path/to/BOSP
$ make bootstrap
4) Start a BOSP configuration menu:
$ make menuconfig
5) In the menuconfig, enable the newly added application (e.g. MpiUncertainty):
Applications -> [*] MpiUncertainty (NEW)
6) Edit AWMs resources requirements in recipes located under the application
recipes folder (e.g. /home/%user%/BOSP/contrib/user/MpiUncertainty/recipes)
to fit the hardware platform possibilities. For more details about recipes see
http://bosp.dei.polimi.it/doku.php?id=docs:rtlib:recipes
7) Recompile BOSP including all enabled applications:
$ make
or compile only newly added application (e.g. MpiUncertainty):
$ make mpiuncertainty
Running application
-------------------
1) Start a BOSP shell by sourcing the environment configuration script
bosp_init.env:
$ . ~/BOSP/out/etc/bbque/bosp_init.env
2) Move to the BOSP working directory:
$ cd path/to/BOSP
3) Start a BBQUE deamon (requires root privileges):
$ bbque-startd
4) Run the application:
Usage: mpiuncertainty [options]
MpiUncertainty Configuration Options:
-h [ --help ] print help message
-v [ --version ] print program version
-C [ --conf ] arg (=/home/%user%/BOSP/out/etc/bbque/MpiUncertainty.conf)
MpiUncertainty BBQUE configuration file
-u [ --unconf ] arg (=/home/%user%/BOSP/contrib/user/MpiUncertainty/data/config.xml)
Uncertainty configuration file
-r [ --recipe ] arg (=MpiUncertainty) recipe name (for all EXCs)
Enabling additional BBQUE recipes
---------------------------------
By default, usage of two independent recipes is supported. To enable additional
recipes follow the steps below:
1) Create a new receipe (XML file with filename terminated by .recipe extension)
under the application recipes folder
(e.g. /home/%user%/BOSP/contrib/user/MpiUncertainty/recipes). If any parameters
and/or system metrics are used, continue with following steps.
2) Add the opList genertion target to the CMakeLists.txt file located
in the application src folder
(e.g. /home/%user%/BOSP/contrib/user/MpiUncertainty/src):
add_custom_command(
OUTPUT oplist3.cc
DEPENDS ${PROJECT_SOURCE_DIR}/recipes/MpiUncertainty3.recipe
COMMAND bbque-oplb -v OUTF=oplist3.cc -v BBQUE_RTLIB_OPLIST=opList3 ${PROJECT_SOURCE_DIR}/recipes/MpiUncertainty3.recipe
COMMENT "Generating OPList3..."
)
Where oplist3.cc is any unique filename of the generated source file,
opList3 is an appropriate variable name and MpiUncertainty3.recipe is filename
of the newly created recipe.
3) Add the filename (without the .cc extension) of the generated oplist
source file from the previous step to the sources list in the same
CMakeLists.txt file located in the application src folder
(e.g. /home/%user%/BOSP/contrib/user/MpiUncertainty/src).
4) Declare the oplist variable (e.g. opList3) at the beginning
of the MpiUncertainty_exc.cc source file:
extern ba::OperatingPointsList opList3;
5) Use the oplist variable in the MpiUncertainty::onConfigure method, e.g.:
if(rpc_name == "MpiUncertainty3")
m_threadsNumber = opList3[awm_id].parameters["threads"];
Where MpiUncertainty3 is the filename of the newly created receipe,
m_threadsNumber is the member variable, opList3 is a vector of AWM parameters
(e.g. threads) and system metrics, and awm_id is the ID of the current AWM. For
more details about advanced receipe creation see
http://bosp.dei.polimi.it/doku.php?id=docs:rtlib:advancedrecipes
6) Build the application:
$ make mpiuncertainty
7) Run the application with the -r flag, e.g.:
$ mpiuncertainty -r MpiUncertainty3
\ No newline at end of file
ifdef CONFIG_CONTRIB_MPIUNCERTAINTY
# Targets provided by this project
.PHONY: mpiuncertainty clean_mpiuncertainty
# Add this to the "contrib_testing" target
testing: mpiuncertainty
clean_testing: clean_mpiuncertainty
MODULE_CONTRIB_USER_MPIUNCERTAINTY=contrib/user/MpiUncertainty
mpiuncertainty: external
@echo
@echo "==== Building MpiUncertainty ($(BUILD_TYPE)) ===="
@echo " Using GCC : $(CC)"
@echo " Target flags : $(TARGET_FLAGS)"
@echo " Sysroot : $(PLATFORM_SYSROOT)"
@echo " BOSP Options : $(CMAKE_COMMON_OPTIONS)"
@[ -d $(MODULE_CONTRIB_USER_MPIUNCERTAINTY)/build/$(BUILD_TYPE) ] || \
mkdir -p $(MODULE_CONTRIB_USER_MPIUNCERTAINTY)/build/$(BUILD_TYPE) || \
exit 1
@cd $(MODULE_CONTRIB_USER_MPIUNCERTAINTY)/build/$(BUILD_TYPE) && \
CC=$(CC) CFLAGS=$(TARGET_FLAGS) \
CXX=$(CXX) CXXFLAGS=$(TARGET_FLAGS) \
cmake $(CMAKE_COMMON_OPTIONS) ../.. || \
exit 1
@cd $(MODULE_CONTRIB_USER_MPIUNCERTAINTY)/build/$(BUILD_TYPE) && \
make -j$(CPUS) install || \
exit 1
clean_mpiuncertainty:
@echo
@echo "==== Clean-up MpiUncertainty Application ===="
@[ ! -f $(BUILD_DIR)/usr/bin/mpiuncertainty ] || \
rm -f $(BUILD_DIR)/etc/bbque/recipes/MpiUncertainty*; \
rm -f $(BUILD_DIR)/usr/bin/mpiuncertainty*
@rm -rf $(MODULE_CONTRIB_USER_MPIUNCERTAINTY)/build
@echo
else # CONFIG_CONTRIB_MPIUNCERTAINTY
mpiuncertainty:
$(warning contib module MpiUncertainty disabled by BOSP configuration)
$(error BOSP compilation failed)
endif # CONFIG_CONTRIB_MPIUNCERTAINTY
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<?xml version="1.0"?>
<conf>
<resourcesPath>contrib/user/MpiUncertainty/data/standard_5plus2</resourcesPath>
<math1D>
<logTarget>1</logTarget> <!-- Target: 0 - disable logging, 1 - stdout, 2 - stdout and file -->
<logFilePath>Math1D.log</logFilePath>
<logLevel>DEBUG</logLevel> <!-- Levels: INFO,DEBUG,WARN,ERROR,FATAL -->
<matDataXmlFileName>Ostravice_23.xml</matDataXmlFileName>
<params>
<minuteStep>60</minuteStep>
</params>
</math1D>
<calibration>
<params>
<cnLimitLower>30</cnLimitLower>
<cnLimitUpper>100</cnLimitUpper>
<nLimitLower>0.005</nLimitLower>
<nLimitUpper>0.1</nLimitUpper>
<stepCn>3.0</stepCn>
<stepN>0.01</stepN>
<pCn>0.01</pCn>
<pN>0.0001</pN>
</params>
</calibration>
<uncertainity>
<params>
<mcCount>1000</mcCount>
<timeframe>3600</timeframe>
<mcCount1>10000</mcCount1>
<timeframe1>360</timeframe1>
<mcCount2>10000</mcCount2>
<timeframe2>600</timeframe2>
<mcCount3>1000000</mcCount3>
<timeframe3>600</timeframe3>
<quantiles>
<value>5.0</value>
<value>15.0</value>
<value>25.0</value>
<value>75.0</value>
<value>85.0</value>
<value>95.0</value>
</quantiles>
<precRandType>KERNEL_DENSITY</precRandType>
<daysMeasured>0</daysMeasured>
<daysPredicted>7</daysPredicted>
<valuesPerDay>24</valuesPerDay>
<precEnabled>true</precEnabled>
<precLimits>
<limit>
<value>3.0</value>
<file>contrib/user/MpiUncertainty/data/cdf/Kernel_estimate_CDF_limit_2.csv</file>
</limit>
<limit>
<value>40.0</value>
<file>contrib/user/MpiUncertainty/data/cdf/Kernel_estimate_CDF_limit_4.csv</file>
</limit>
<limit>
<value>8.0</value>
<file>contrib/user/MpiUncertainty/data/cdf/Kernel_estimate_CDF_limit_3.csv</file>
</limit>
</precLimits>
<precDeviation>0.1</precDeviation>
<cnEnabled>false</cnEnabled>
<cnLimitLower>30</cnLimitLower>
<cnLimitUpper>100</cnLimitUpper>
<cnDeviation>0.4</cnDeviation>
<nEnabled>false</nEnabled>
<nLimitLower>0.005</nLimitLower>
<nLimitUpper>0.1</nLimitUpper>
<nDeviation>0.4</nDeviation>
</params>
</uncertainity>
</conf>
This diff is collapsed.
Time;221;222
2010-05-12 00:00;13.8;28.2
2010-05-12 01:00;13.4;27.6
2010-05-12 02:00;13.4;27.1
2010-05-12 03:00;13.4;27.1
2010-05-12 04:00;12.9;27.1
2010-05-12 05:00;12.9;27.1
2010-05-12 06:00;12.9;27.1
2010-05-12 07:00;12.9;27.1
2010-05-12 08:00;12.9;26.5
2010-05-12 09:00;12.1;27.1
2010-05-12 10:00;11.7;26.5
2010-05-12 11:00;11;26.5
2010-05-12 12:00;11;26.5
2010-05-12 13:00;11;26
2010-05-12 14:00;10.7;25
2010-05-12 15:00;11.7;24.5
2010-05-12 16:00;11.7;24.5
2010-05-12 17:00;11.7;24.5
2010-05-12 18:00;11.7;24.5
2010-05-12 19:00;11.7;24.5
2010-05-12 20:00;11.4;24.5
2010-05-12 21:00;11.4;27.1
2010-05-12 22:00;11.7;26.5
2010-05-12 23:00;11.4;26.5
2010-05-13 00:00;11.7;26.5
2010-05-13 01:00;11.4;26.5
2010-05-13 02:00;11.4;27.1
2010-05-13 03:00;11.4;31
2010-05-13 04:00;11.4;33.5
2010-05-13 05:00;11.4;32.1
2010-05-13 06:00;11.4;33.5
2010-05-13 07:00;11.4;32.8
2010-05-13 08:00;11.7;31.5
2010-05-13 09:00;11;32.8
2010-05-13 10:00;9.67;35.5
2010-05-13 11:00;9.67;38.3
2010-05-13 12:00;9.67;39
2010-05-13 13:00;9.99;38.3
2010-05-13 14:00;9.99;35.5
2010-05-13 15:00;9.99;33.5
2010-05-13 16:00;11.7;32.1
2010-05-13 17:00;11.4;31
2010-05-13 18:00;11.4;29.8
2010-05-13 19:00;11.7;29.8
2010-05-13 20:00;11.4;29.8
2010-05-13 21:00;11.4;29.8
2010-05-13 22:00;12.1;28.7
2010-05-13 23:00;12.1;28.7
2010-05-14 00:00;13.4;28.7
2010-05-14 01:00;16.2;29.3
2010-05-14 02:00;18.3;32.8
2010-05-14 03:00;20.1;35.5
2010-05-14 04:00;20.1;40.5
2010-05-14 05:00;19.5;44.8
2010-05-14 06:00;21.1;48.5
2010-05-14 07:00;22.8;54.7
2010-05-14 08:00;30.1;58.6
2010-05-14 09:00;43.8;65.9
2010-05-14 10:00;47.9;75.2
2010-05-14 11:00;50.6;96
2010-05-14 12:00;51.4;113
2010-05-14 13:00;49.9;119
2010-05-14 14:00;48.5;121
2010-05-14 15:00;45.2;121
2010-05-14 16:00;43.8;118
2010-05-14 17:00;45.2;114
2010-05-14 18:00;43.8;110
2010-05-14 19:00;43.2;108
2010-05-14 20:00;42.6;105
2010-05-14 21:00;41.1;101
2010-05-14 22:00;39.6;98.8
2010-05-14 23:00;38.2;95.1
2010-05-15 00:00;36.8;90.4
2010-05-15 01:00;36.1;87.6
2010-05-15 02:00;36.1;84
2010-05-15 03:00;34;81.4
2010-05-15 04:00;34;78.7
2010-05-15 05:00;34.7;77
2010-05-15 06:00;33.3;75.2
2010-05-15 07:00;32.7;74.3
2010-05-15 08:00;32.7;72.6
2010-05-15 09:00;29.4;71.8
2010-05-15 10:00;28.8;70.1
2010-05-15 11:00;28.8;66.7
2010-05-15 12:00;28.2;64.3
2010-05-15 13:00;28.8;62.6
2010-05-15 14:00;27.5;61