diff --git a/README.md b/README.md index c593b616..e2524441 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,49 @@ This is a repository for WaterTAP development and analysis for the NAWI 3.25 project. -To install this environment, open command prompt or terminal and from the location of this repo execute the following command: +## Installation -`conda env create -f flex_desal_analysis_setup.yml` +### 1. Create the conda environment + +Open command prompt or terminal and from the location of this repo execute: + +```bash +conda env create -f flex_desal_analysis_setup.yml +conda activate flex_desal_analysis +``` + +### 2. Install WaterTAP (development version) + +This project requires the development version of WaterTAP installed in editable mode: + +```bash +# Clone watertap repository (if not already done) +git clone https://github.com/watertap-org/watertap.git +cd watertap + +# Install in editable mode without dependencies to avoid version conflicts +pip install --no-deps -e . +cd .. +``` + +### 3. Install idaes-pse 2.10 + +Force install the required version: + +```bash +pip install --upgrade --force-reinstall idaes-pse==2.10.0 +``` + +### 4. Install this package + +Return to the flex_desal directory and install in editable mode: + +```bash +pip install --no-deps -e . +``` + +### Notes + +- This project requires Python 3.11 +- WaterTAP 1.5.dev0+ is required for compatibility +- idaes-pse 2.10.0 is required (WaterTAP may try to downgrade this) +- After installation, you may see dependency warnings from pip - these can typically be ignored diff --git a/dummy_result.csv b/dummy_result.csv new file mode 100644 index 00000000..72d92f26 --- /dev/null +++ b/dummy_result.csv @@ -0,0 +1,11 @@ +,Day,Time,LMP,bypass_pretreatment_flow,power_from_grid,intake.op_mode,intake.startup,intake.shutdown,intake.energy_intensity,intake.power_consumption,intake.recovery,intake.feed_flowrate,intake.product_flowrate,intake.reject_flowrate,pretreatment.op_mode,pretreatment.startup,pretreatment.shutdown,pretreatment.energy_intensity,pretreatment.power_consumption,pretreatment.recovery,pretreatment.feed_flowrate,pretreatment.product_flowrate,pretreatment.reject_flowrate,reverse_osmosis.op_mode,reverse_osmosis.startup,reverse_osmosis.shutdown,reverse_osmosis.power_consumption,reverse_osmosis.feed_flowrate,reverse_osmosis.product_flowrate,reverse_osmosis.reject_flowrate,reverse_osmosis.inlet_flowrate,reverse_osmosis.leftover_flow,reverse_osmosis.ro_skid[1].op_mode,reverse_osmosis.ro_skid[1].startup,reverse_osmosis.ro_skid[1].shutdown,reverse_osmosis.ro_skid[1].energy_intensity,reverse_osmosis.ro_skid[1].power_consumption,reverse_osmosis.ro_skid[1].recovery,reverse_osmosis.ro_skid[1].feed_flowrate,reverse_osmosis.ro_skid[1].product_flowrate,reverse_osmosis.ro_skid[1].reject_flowrate,reverse_osmosis.ro_skid[2].op_mode,reverse_osmosis.ro_skid[2].startup,reverse_osmosis.ro_skid[2].shutdown,reverse_osmosis.ro_skid[2].energy_intensity,reverse_osmosis.ro_skid[2].power_consumption,reverse_osmosis.ro_skid[2].recovery,reverse_osmosis.ro_skid[2].feed_flowrate,reverse_osmosis.ro_skid[2].product_flowrate,reverse_osmosis.ro_skid[2].reject_flowrate,reverse_osmosis.ro_skid[3].op_mode,reverse_osmosis.ro_skid[3].startup,reverse_osmosis.ro_skid[3].shutdown,reverse_osmosis.ro_skid[3].energy_intensity,reverse_osmosis.ro_skid[3].power_consumption,reverse_osmosis.ro_skid[3].recovery,reverse_osmosis.ro_skid[3].feed_flowrate,reverse_osmosis.ro_skid[3].product_flowrate,reverse_osmosis.ro_skid[3].reject_flowrate,posttreatment.op_mode,posttreatment.startup,posttreatment.shutdown,posttreatment.energy_intensity,posttreatment.power_consumption,posttreatment.feed_flowrate,posttreatment.product_flowrate,posttreatment.reject_flowrate,brine_discharge.op_mode,brine_discharge.startup,brine_discharge.shutdown,brine_discharge.feed_flowrate,brine_discharge.power_consumption,num_skids_online,net_power_consumption,water_revenue,demand_response_revenue,emissions_cost,energy_cost +0,1,1,0.12955,7.154440539027692e-12,1796.670281616262,,,,0.157121734,167.098964109,1,1063.5,1063.5,0.0,1,,,0.01,10.634999999999929,1,1063.499999999993,1063.499999999993,0.0,,,,1441.9791216291196,1063.499999999993,431.6029166298917,581.4070833701084,1013.01,50.489999999992875,1.0,0.0,0.0,3.3409855820451884,480.6597072097066,0.4260598776220292,337.67,143.8676388766306,193.80236112336942,1.0,0.0,0.0,3.3409855820451893,480.65970720970665,0.42605987762202907,337.67,143.86763887663056,193.80236112336945,1.0,0.0,0.0,3.340985582045188,480.65970720970654,0.4260598776220291,337.67,143.86763887663056,193.80236112336945,1.0,,,0.41,176.9571958182556,431.6029166298917,431.6029166324336,0.0,0.0,,,631.8970833675664,5.988665493589163e-08,3.0,1796.6702816162617,0.0,-0.0,0.0,58.189658745846685 +1,1,2,0.12955,7.154440539028204e-12,1796.670281616262,,,,0.157121734,167.098964109,1,1063.5,1063.5,0.0,1,,,0.01,10.634999999999929,1,1063.499999999993,1063.499999999993,8.829685626331071e-44,,,,1441.9791216291196,1063.499999999993,431.6029166298917,581.4070833701084,1013.01,50.4899999999929,1.0,0.0,0.0,3.340985582045189,480.6597072097066,0.42605987762202907,337.67,143.86763887663056,193.80236112336945,1.0,0.0,0.0,3.340985582045189,480.6597072097066,0.42605987762202907,337.67,143.86763887663056,193.80236112336945,1.0,0.0,0.0,3.340985582045189,480.6597072097066,0.42605987762202907,337.67,143.86763887663056,193.80236112336945,1.0,,,0.41,176.95719581825557,431.6029166298917,431.6029166324336,0.0,0.0,,,631.8970833675664,5.988665493589161e-08,3.0,1796.6702816162617,0.0,-0.0,0.0,58.189658745846685 +2,1,3,0.12955,7.154440539026487e-12,1796.670281616262,,,,0.157121734,167.098964109,1,1063.5,1063.5,0.0,1,,,0.01,10.634999999999929,1,1063.499999999993,1063.499999999993,4.3941107118622926e-44,,,,1441.9791216291196,1063.499999999993,431.60291662989175,581.4070833701084,1013.01,50.489999999992904,1.0,0.0,0.0,3.340985582045189,480.6597072097066,0.42605987762202907,337.67,143.86763887663056,193.80236112336945,1.0,0.0,0.0,3.340985582045189,480.65970720970665,0.4260598776220291,337.67,143.8676388766306,193.80236112336942,1.0,0.0,0.0,3.340985582045188,480.6597072097065,0.4260598776220292,337.67,143.86763887663056,193.80236112336945,1.0,,,0.41,176.9571958182556,431.60291662989175,431.6029166324336,0.0,0.0,,,631.8970833675664,5.988665493589163e-08,3.0,1796.6702816162617,0.0,-0.0,0.0,58.189658745846685 +3,1,4,0.12955,7.1544405390276086e-12,1796.670281616262,,,,0.157121734,167.098964109,1,1063.5,1063.5,0.0,1,,,0.01,10.634999999999929,1,1063.499999999993,1063.499999999993,4.495102730091952e-44,,,,1441.9791216291196,1063.499999999993,431.6029166298917,581.4070833701084,1013.01,50.489999999992875,1.0,0.0,0.0,3.340985582045189,480.6597072097066,0.4260598776220291,337.67,143.86763887663056,193.80236112336945,1.0,0.0,0.0,3.340985582045189,480.6597072097066,0.42605987762202907,337.67,143.86763887663056,193.80236112336945,1.0,0.0,0.0,3.3409855820451884,480.65970720970654,0.4260598776220291,337.67,143.86763887663056,193.80236112336945,1.0,,,0.41,176.9571958182556,431.6029166298917,431.6029166324336,0.0,0.0,,,631.8970833675664,5.988665493589161e-08,3.0,1796.6702816162617,0.0,-0.0,0.0,58.189658745846685 +4,1,5,0.12955,7.154440539026553e-12,1796.670281616262,,,,0.157121734,167.098964109,1,1063.5,1063.5,0.0,1,,,0.01,10.634999999999929,1,1063.499999999993,1063.499999999993,0.0,,,,1441.9791216291196,1063.499999999993,431.60291662989175,581.4070833701084,1013.01,50.489999999992875,1.0,0.0,0.0,3.340985582045189,480.65970720970665,0.4260598776220291,337.67,143.86763887663056,193.80236112336945,1.0,0.0,0.0,3.340985582045189,480.65970720970665,0.4260598776220291,337.67,143.86763887663056,193.80236112336945,1.0,0.0,0.0,3.340985582045188,480.6597072097065,0.4260598776220291,337.67,143.86763887663056,193.80236112336945,1.0,,,0.41,176.9571958182556,431.60291662989175,431.6029166324336,0.0,0.0,,,631.8970833675664,5.988665493589163e-08,3.0,1796.6702816162617,0.0,-0.0,0.0,58.189658745846685 +5,1,6,0.12955,7.154440539027364e-12,1796.670281616262,,,,0.157121734,167.098964109,1,1063.5,1063.5,0.0,1,,,0.01,10.634999999999929,1,1063.499999999993,1063.499999999993,6.7601703259419886e-46,,,,1441.9791216291196,1063.499999999993,431.6029166298917,581.4070833701084,1013.01,50.489999999992875,1.0,0.0,0.0,3.340985582045189,480.6597072097066,0.42605987762202907,337.67,143.86763887663056,193.80236112336945,1.0,0.0,0.0,3.3409855820451884,480.6597072097066,0.4260598776220291,337.67,143.86763887663056,193.80236112336945,1.0,0.0,0.0,3.340985582045189,480.6597072097066,0.42605987762202907,337.67,143.86763887663056,193.80236112336945,1.0,,,0.41,176.95719581825557,431.6029166298917,431.6029166324336,0.0,0.0,,,631.8970833675664,5.98866549358916e-08,3.0,1796.6702816162617,0.0,-0.0,0.0,58.189658745846685 +6,1,7,0.12955,7.15444053902837e-12,1796.670281616262,,,,0.157121734,167.098964109,1,1063.5,1063.5,0.0,1,,,0.01,10.634999999999929,1,1063.499999999993,1063.499999999993,0.0,,,,1441.9791216291196,1063.499999999993,431.6029166298917,581.4070833701084,1013.01,50.489999999992875,1.0,0.0,0.0,3.3409855820451884,480.65970720970654,0.4260598776220291,337.67,143.86763887663056,193.80236112336945,1.0,0.0,0.0,3.340985582045189,480.6597072097066,0.42605987762202907,337.67,143.86763887663056,193.80236112336945,1.0,0.0,0.0,3.3409855820451884,480.6597072097066,0.42605987762202907,337.67,143.86763887663056,193.80236112336945,1.0,,,0.41,176.9571958182556,431.6029166298917,431.6029166324336,0.0,0.0,,,631.8970833675664,5.988665493589161e-08,3.0,1796.6702816162617,0.0,-0.0,0.0,58.189658745846685 +7,1,8,0.12955,6.462239583664445e-12,1351.4388464356916,,,,0.157121734,167.098964109,1,1063.5,1063.5,0.0,1,,,0.01,10.634999999999936,1,1063.4999999999936,1063.4999999999936,0.0,,,,1045.373418782598,1063.4999999999936,313.00356945541756,362.33643054458247,675.34,388.1599999999935,1.0,0.0,0.0,3.339813090954207,522.686709391299,0.4634755374410187,337.67,156.50178472770878,181.16821527229123,1.0,0.0,0.0,3.339813090954207,522.686709391299,0.4634755374410187,337.67,156.50178472770878,181.16821527229123,0.0,0.0,1.0,3.3580698795641535,7.531979245745892e-44,0.48957107422033336,0.0,2.2420775429197073e-44,0.0,1.0,,,0.41,128.33146347672118,313.00356945541756,313.0035694579595,0.0,0.0,,,750.4964305420405,6.737255316331029e-08,2.0,1351.4388464356919,0.0,-0.0,0.0,43.76972563893596 +8,1,9,0.12955,6.462239583663725e-12,1351.4388464356916,,,,0.157121734,167.098964109,1,1063.5,1063.5,0.0,1,,,0.01,10.634999999999936,1,1063.4999999999936,1063.4999999999936,3.1389085600875902e-43,,,,1045.373418782598,1063.4999999999936,313.00356945541756,362.33643054458247,675.34,388.1599999999935,1.0,0.0,0.0,3.3398130909542076,522.686709391299,0.4634755374410186,337.67,156.50178472770875,181.16821527229126,1.0,0.0,0.0,3.339813090954207,522.6867093912991,0.46347553744101866,337.67,156.50178472770878,181.16821527229123,0.0,0.0,0.0,3.358069879564154,0.0,0.48957107422033236,2.5817282058546874e-44,0.0,7.066156982800415e-44,1.0,,,0.41,128.33146347672118,313.00356945541756,313.0035694579595,0.0,0.0,,,750.4964305420406,6.73725531633103e-08,2.0,1351.4388464356919,0.0,-0.0,0.0,43.76972563893596 +9,1,10,0.12955,6.46223958366386e-12,1351.4388464356916,,,,0.157121734,167.098964109,1,1063.5,1063.5,0.0,1,,,0.01,10.634999999999936,1,1063.4999999999936,1063.4999999999936,0.0,,,,1045.373418782598,1063.4999999999936,313.0035694554175,362.3364305445825,675.34,388.1599999999935,1.0,0.0,0.0,3.3398130909542076,522.686709391299,0.4634755374410186,337.67,156.50178472770875,181.16821527229126,1.0,0.0,0.0,3.3398130909542076,522.6867093912989,0.46347553744101855,337.67,156.50178472770872,181.1682152722913,0.0,0.0,0.0,3.3580698795641535,3.0121348396432044e-43,0.4895710742203331,1.793662034335766e-43,8.96831017167883e-44,8.96831017167883e-44,1.0,,,0.41,128.33146347672115,313.0035694554175,313.00356945795943,0.0,0.0,,,750.4964305420406,6.737255316331029e-08,2.0,1351.4388464356919,0.0,-0.0,0.0,43.76972563893596 diff --git a/flex_desal_analysis_setup.yml b/flex_desal_analysis_setup.yml index 3eecc124..06bc7910 100644 --- a/flex_desal_analysis_setup.yml +++ b/flex_desal_analysis_setup.yml @@ -3,7 +3,7 @@ channels: - conda-forge - defaults dependencies: - - python=3.10 + - python=3.11 - git - pytest - pip diff --git a/operation_profile.png b/operation_profile.png new file mode 100644 index 00000000..2066099c Binary files /dev/null and b/operation_profile.png differ diff --git a/pyproject.toml b/pyproject.toml index 61407b98..c7a5cf11 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,9 +7,16 @@ name = "flex_desal_analysis" readme = "README.md" version = "0.1.0" description = "Python package for conducting analysis for NAWI 3.25" -requires-python = ">=3.10,<3.11" +requires-python = ">=3.11,<3.12" dependencies = [ - "watertap-reflo>=0.2" + "idaes-pse>=2.10", + "pyomo>=6.9.3", + "pint>=0.24", + "pyyaml", + "pandas", + "numpy", + "matplotlib", + "scipy" ] [tool.setuptools] diff --git a/src/pricetaker/__init__.py b/src/pricetaker/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/pricetaker/flowsheets/__init__.py b/src/pricetaker/flowsheets/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/pricetaker/flowsheets/flowsheet.py b/src/pricetaker/flowsheets/flowsheet.py new file mode 100644 index 00000000..ac4e48f0 --- /dev/null +++ b/src/pricetaker/flowsheets/flowsheet.py @@ -0,0 +1,324 @@ +################################################################################# +# WaterTAP Copyright (c) 2020-2024, The Regents of the University of California, +# through Lawrence Berkeley National Laboratory, Oak Ridge National Laboratory, +# National Renewable Energy Laboratory, and National Energy Technology +# Laboratory (subject to receipt of any required approvals from the U.S. Dept. +# of Energy). All rights reserved. +# +# Please see the files COPYRIGHT.md and LICENSE.md for full copyright and license +# information, respectively. These files are also available online at the URL +# "https://github.com/watertap-org/watertap/" +################################################################################# + +""" +This module contains the functions needed for the construction of flexible +desalination flowsheet +""" + +from idaes.apps.grid_integration import OperationModel +from pyomo.environ import ( + Constraint, + Expression, + NonNegativeReals, + Param, + Var, + units as pyunits, +) +from watertap.flowsheets.flex_desal import params as um_params +from watertap.flowsheets.flex_desal import unit_models as um + + +def add_operational_cost_expressions(blk, params: um_params.FlexDesalParams): + """ + Adds cost expressions to the flowsheet + """ + # Water revenue + blk.water_revenue = Expression( + expr=( + params.product_water_price + * blk.posttreatment.product_flowrate + * params.timestep_hours + ), + doc="Revenue generated from product water", + ) + + # Customer cost + blk.customer_cost = Param( + initialize=0, + mutable=True, + doc="Fixed customer cost", + ) + + # Demand response revenue + blk.demand_response_price = Param( + initialize=0, mutable=True, doc="Demand-response prices" + ) + blk.baseline_power = Param( + initialize=100, mutable=True, doc="Baseline power requirement" + ) + blk.demand_response_revenue = Expression( + expr=blk.demand_response_price + * (blk.baseline_power - blk.power_from_grid) + * params.timestep_hours, + doc="Revenue generated from demand response", + ) + + # Cost of emissions + blk.emissions_intensity = Param( + initialize=0, mutable=True, units=pyunits.kg / pyunits.kWh + ) + blk.emissions_cost = Expression( + expr=( + blk.emissions_intensity + * blk.power_from_grid + * params.timestep_hours + * params.emissions_cost + / 907.185 # Conversion factor: $/ton to $/kg + ), + doc="Cost associated with carbon emissions", + ) + + # Cost of energy + blk.LMP = Param( + initialize=0, + mutable=True, + doc="Locational marginal price of electricity [$/kWh]", + ) + blk.energy_cost = Expression( + expr=blk.LMP * blk.power_from_grid * params.timestep_hours, + doc="Cost of electricity purchased from the grid", + ) + + # Demand cost parameters + blk.fixed_demand_rate = Param( + initialize=0, + mutable=True, + doc="Constant demand tariff", + ) + blk.variable_demand_rate = Param( + initialize=0, + mutable=True, + doc="Variable demand tariff", + ) + + +def build_desal_flowsheet(blk, params: um_params.FlexDesalParams): + """ + Builds a flowsheet instance of the entire desalination process + + Parameters + ---------- + blk : Block + Pyomo Block instance + + params : object + Object containing model parameters + """ + # Build units + blk.intake = OperationModel( + model_func=um.intake_operation_model, + model_args={"params": params.intake}, + ) + blk.bypass_pretreatment_flow = Var( + within=NonNegativeReals, + doc="Flowrate bypassed to brine discharge due to pretreatment shutdown", + ) + blk.pretreatment = OperationModel( + model_func=um.pretreatment_operation_model, + model_args={"params": params.pretreatment}, + ) + blk.reverse_osmosis = OperationModel( + model_func=um.reverse_osmosis_operation_model, + model_args={"params": params.ro}, + ) + blk.posttreatment = OperationModel( + model_func=um.posttreatment_operation_model, + model_args={"params": params}, + ) + blk.brine_discharge = OperationModel( + model_func=um.brine_discharge_operation_model, + model_args={"params": params}, + ) + + # Flowsheet connections + blk.arc_intake_pretreatment = Constraint( + expr=blk.intake.product_flowrate + == blk.pretreatment.feed_flowrate + blk.bypass_pretreatment_flow, + doc="intake-pretreatment mass balance", + ) + blk.suppress_pretreatment_bypass = Constraint( + expr=blk.bypass_pretreatment_flow + <= (1 - blk.pretreatment.op_mode) * params.intake.nominal_flowrate + ) + blk.arc_pretreatment_ro = Constraint( + expr=blk.pretreatment.product_flowrate == blk.reverse_osmosis.feed_flowrate, + doc="pretreatment-reverse_osmosis mass balance", + ) + blk.arc_ro_posttreatment = Constraint( + expr=blk.reverse_osmosis.product_flowrate == blk.posttreatment.feed_flowrate, + doc="reverse_osmosis-posttreatment mass balance", + ) + blk.calculate_brine_discharge = Constraint( + expr=blk.brine_discharge.feed_flowrate + == ( + blk.intake.reject_flowrate + + blk.bypass_pretreatment_flow + + blk.pretreatment.reject_flowrate + + blk.reverse_osmosis.reject_flowrate + + blk.reverse_osmosis.leftover_flow + + blk.posttreatment.reject_flowrate + ), + doc="Computes the total inflow to brine discharge", + ) + + blk.num_skids_online = Expression( + expr=sum(blk.reverse_osmosis.ro_skid[:].op_mode), + doc="Calculates the number of skids operating at time t", + ) + + blk.net_power_consumption = Expression( + expr=blk.intake.power_consumption + + blk.pretreatment.power_consumption + + blk.reverse_osmosis.power_consumption + + blk.posttreatment.power_consumption + + blk.brine_discharge.power_consumption, + doc="Net power consumed from the grid", + ) + + if params.include_onsite_solar: + blk.power_generation = OperationModel( + model_func=um.power_generation_operation_model, + model_args={"params": params}, + ) + blk.net_power_consumption += -blk.power_generation.power_utilized + + if params.include_battery: + blk.battery = OperationModel() + blk.net_power_consumption += blk.battery.power_charge - blk.battery.discharge + + # Power purchased from the grid + blk.power_from_grid = Var( + within=NonNegativeReals, + units=pyunits.kW, + doc="Total power purchased from the grid", + ) + blk.overall_power_balance = Constraint( + expr=blk.power_from_grid == blk.net_power_consumption, + doc="Computes the total power purchased from the grid", + ) + + # Add cost expressions + add_operational_cost_expressions(blk, params) + + +def add_delayed_startup_constraints(m): + """Adds the delayed startup constraints to the model""" + params: um_params.FlexDesalParams = m.params + + # "Shutdown" post-treatment unit if RO startup is initiated + @m.Constraint(m.period.index_set()) + def posttreatment_unit_commitment(blk, d, t): + indices = [(d, t - i) for i in range(params.ro.startup_delay) if t - i > 0] + return (1 - blk.period[d, t].posttreatment.op_mode) == sum( + blk.period[p].reverse_osmosis.ro_skid[1].startup for p in indices + ) + + # Brine pump must operate if RO startup is initiated + @m.Constraint(m.period.index_set()) + def brine_pump_unit_commitment(blk, d, t): + indices = [(d, t - i) for i in range(params.ro.startup_delay) if t - i > 0] + return blk.period[d, t].brine_discharge.op_mode == sum( + blk.period[p].reverse_osmosis.ro_skid[1].startup for p in indices + ) + + +def add_demand_and_fixed_costs(m): + """Adds variables and expressions/constraints for demand and fixed costs""" + + params: um_params.FlexDesalParams = m.params + m.fixed_demand_cost = Var( + within=NonNegativeReals, + doc="Total fixed demand charge value for the entire horizon", + ) + m.variable_demand_cost = Var( + within=NonNegativeReals, + doc="Total variable demand charge value for the entire time horizon", + ) + m.fixed_monthly_cost = Var( + within=NonNegativeReals, + doc="Total customer cost for the entire time horizon", + ) + + @m.Constraint(m.period.index_set()) + def calculate_fixed_demand_cost(blk, d, t): + return ( + blk.fixed_demand_cost + >= blk.period[d, t].fixed_demand_rate + * blk.period[d, t].power_from_grid + * params.num_months + ) + + @m.Constraint(m.period.index_set()) + def calculate_variable_demand_cost(blk, d, t): + return ( + blk.variable_demand_cost + >= blk.period[d, t].variable_demand_rate + * blk.period[d, t].power_from_grid + * params.num_months + ) + + m.calculate_fixed_monthly_cost = Constraint( + expr=m.fixed_monthly_cost == params.fixed_monthly_cost * params.num_months + ) + + +def add_useful_expressions(m): + """Defines useful expressions for custom objective functions""" + + m.total_water_revenue = Expression(expr=sum(m.period[:, :].water_revenue)) + m.total_demand_response_revenue = Expression( + expr=sum(m.period[:, :].demand_response_revenue) + ) + m.total_emissions_cost = Expression(expr=sum(m.period[:, :].emissions_cost)) + + +def constrain_water_production(m, baseline_production: float = None): + """Constrains the total water production rate""" + + params: um_params.FlexDesalParams = m.params + if baseline_production is not None: + m.curtailment_fraction = Param( + initialize=params.curtailment_fraction, + mutable=True, + units=pyunits.dimensionless, + doc="Fraction of water production that is curtailed", + ) + + m.baseline_production = Param( + initialize=baseline_production, + mutable=True, + units=pyunits.m**3, + doc="Baseline water production", + ) + + m.water_production_target = Constraint( + expr=m.total_water_production + >= m.baseline_production * (1 - m.curtailment_fraction) + ) + + elif params.annual_production_AF is not None: + # Convert production rate from acre-ft/year to m^3/year + annual_production_m3 = params.annual_production_AF * 1233.48 + m.production_target_abs = Param( + initialize=annual_production_m3 / 365 * params.num_days, + mutable=True, + units=pyunits.m**3, + doc="Absolute water production target", + ) + + m.water_production_target = Constraint( + expr=m.total_water_production >= m.production_target_abs + ) + + else: + raise ValueError("Water production targets not specified in params") diff --git a/src/pricetaker/flowsheets/params.py b/src/pricetaker/flowsheets/params.py new file mode 100644 index 00000000..3366e3dd --- /dev/null +++ b/src/pricetaker/flowsheets/params.py @@ -0,0 +1,432 @@ +################################################################################# +# WaterTAP Copyright (c) 2020-2024, The Regents of the University of California, +# through Lawrence Berkeley National Laboratory, Oak Ridge National Laboratory, +# National Renewable Energy Laboratory, and National Energy Technology +# Laboratory (subject to receipt of any required approvals from the U.S. Dept. +# of Energy). All rights reserved. +# +# Please see the files COPYRIGHT.md and LICENSE.md for full copyright and license +# information, respectively. These files are also available online at the URL +# "https://github.com/watertap-org/watertap/" +################################################################################# + +""" +This module contains the default values of all the required +parameters. +""" + +from dataclasses import dataclass +from datetime import datetime, timedelta +from typing import Optional + +import numpy as np +from pyomo.environ import exp +from scipy import optimize + + +@dataclass +class UnitParams: + """Abstract dataclass for parameters of all units""" + + energy_intensity: Optional[float] = None + allow_shutdown: bool = False + leakage_fraction: Optional[float] = None + minimum_flowrate: Optional[float] = None + nominal_flowrate: Optional[float] = None + maximum_flowrate: Optional[float] = None + nominal_recovery: Optional[float] = None + minimum_recovery: Optional[float] = None + maximum_recovery: Optional[float] = None + minimum_uptime: Optional[int] = None + minimum_downtime: Optional[int] = None + startup_delay: Optional[int] = None + + @property + def get_leakage_fraction(self): + """Returns the leakage fraction value""" + if self.leakage_fraction is not None: + return self.leakage_fraction + + if self.recovery is not None: + return 1 - self.recovery + + raise ValueError("leakage_fraction is not specified") + + @property + def get_recovery(self): + """Returns the recovery value""" + if self.nominal_recovery is not None: + return self.nominal_recovery + + if self.leakage_fraction is not None: + return 1 - self.leakage_fraction + + raise ValueError("recovery is not specified") + + def update(self, value_map: dict): + """Updates the values of the specified attributes""" + # Raise an error if an unrecognized attribute is provided + new_values = value_map.copy() + for key in value_map: + if key not in self.__dict__: + if "_" + key in self.__dict__: + # This is a property + setattr(self, key, value_map[key]) + # Remove this element + new_values.pop(key) + + else: + raise KeyError(f"Unrecognized attribute {key}") + + self.__dict__.update(new_values) + + +@dataclass +class IntakeParams(UnitParams): + """Parameters for the intake unit""" + + energy_intensity: float = 0.157121734 + leakage_fraction: float = 0 + minimum_flowrate: float = 1063.5 + nominal_flowrate: float = 1063.5 + maximum_flowrate: float = 1063.5 + + +@dataclass +class PretreatmentParams(UnitParams): + """Parameters for the pretreatment unit""" + + allow_shutdown: bool = False + energy_intensity: float = 0.01 + leakage_fraction: float = 0 + minimum_downtime: int = 0 + startup_delay: int = 0 + + +@dataclass +class ROParams(UnitParams): + """Parameters for the RO unit""" + + num_ro_skids: int = 3 + minimum_operating_skids: int = 2 + allow_shutdown: bool = True + nominal_flowrate: float = 337.670 + minimum_recovery: float = 0.4 + nominal_recovery: float = 0.465 + maximum_recovery: float = 0.55 + minimum_uptime: int = 1 + minimum_downtime: int = 4 + startup_delay: int = 8 + allow_variable_recovery: bool = False + + def __post_init__(self): + self._surrogate_type = "exponential_quadratic" + self.surrogate_a = 6.180228375549232 + self.surrogate_b = 2.3684824891480476 + self.surrogate_c = 6.474944185881354 + self.surrogate_d = 1.9065595663669615e-05 + + @property + def surrogate_type(self): + """Returns the surrogate type for RO energy intensity""" + return self._surrogate_type + + @surrogate_type.setter + def surrogate_type(self, value: str): + if value in ["exponential_quadratic", "quadratic_surrogate"]: + self._surrogate_type = value + + else: + raise ValueError("Unrecognized surrogate type") + + @property + def surrogate_coeffs(self): + """Returs the coefficients of the surrogate model as a dictionary""" + return { + "a": self.surrogate_a, + "b": self.surrogate_b, + "c": self.surrogate_c, + "d": self.surrogate_d, + } + + def get_energy_intensity(self, recovery): + """Returns the energy intensity for a given recovery""" + coeffs = self.surrogate_coeffs + if self.surrogate_type == "exponential_quadratic": + return ( + coeffs["a"] * exp(-coeffs["b"] * recovery) + + coeffs["c"] * recovery**2 + + coeffs["d"] + ) + + if self.surrogate_type == "quadratic_surrogate": + return coeffs["a"] * recovery**2 + coeffs["b"] * recovery + coeffs["c"] + + return None + + def get_optimum_energy_intensity(self, recovery_lb, recovery_ub): + """ + Returns the optimum energy intensity if it exists inside the + interval. Returns None is the optimum is at the bounds. + """ + # Optimum exists inside the interval, and it is unique. + coeffs = self.surrogate_coeffs + if self.surrogate_type == "exponenetial_quadratic": + + def _first_der(rec): + return ( + -coeffs["a"] * coeffs["b"] * exp(-coeffs["b"] * rec) + + 2 * coeffs["c"] * rec + ) + + # First derivative is a monotonically increasing function. + # Therefore, if the first derivative has the same sign at both + # ends of the interval, then there is no point in the interval + # at which the derivative vanishes. So, the optimum is at its bounds + if _first_der(recovery_lb) * _first_der(recovery_ub) > 0: + # Optimum does not exist, so return + return None + + root = optimize.bisect(_first_der, recovery_lb, recovery_ub, maxiter=1000) + + else: + # This is "quadratic_surrogate": + root = -coeffs["b"] / (2 * coeffs["a"]) + + return self.get_energy_intensity(root) + + def get_energy_intensity_bounds(self, recovery_lb=None, recovery_ub=None): + """ + Returns the bounds on energy intensity based on the bounds of + recovery + """ + if recovery_lb is None: + recovery_lb = self.minimum_recovery + if recovery_ub is None: + recovery_ub = self.maximum_recovery + + ei_values = [ + self.get_energy_intensity(recovery=self.minimum_recovery), + self.get_energy_intensity(recovery=self.maximum_recovery), + self.get_optimum_energy_intensity(recovery_lb, recovery_ub), + ] + + ei_values = list(filter(None, ei_values)) # remove None, if it exists + return min(ei_values), max(ei_values) + + +@dataclass +class PosttreatmentParams(UnitParams): + """Parameters for the posttreatment unit""" + + energy_intensity: float = 0.41 + leakage_fraction: float = 0 + + +@dataclass +class BrineDischargeParams(UnitParams): + """Parameters for the brine discharge unit""" + + energy_intensity: float = 0.1 + leakage_fraction: float = 0 + + +@dataclass +class Battery: + """Parameters for the battery""" + + energy_capacity: float = 0 + power_capacity: float = 50 + efficiency: float = 0.86 + initial_soc: float = 0.5 + minimum_soc: float = 0.2 + maximum_soc: float = 0.95 + + +@dataclass +class FlexDesalParams: + """Parameters for fleible desalination""" + + start_date: str = "2022-07-05 00:00:00" + end_date: str = "2022-07-06 00:00:00" + timestep_hours: float = 0.25 + + product_water_price: float = 0 + fixed_monthly_cost: float = 766000 + customer_rate: float = 100 + constrain_to_baseline_production: bool = False + curtailment_fraction: float = 0.0 + annual_production_AF: float = 3125 # in acre-ft / year + production_constraint_to_objective: bool = False + production_constraint_penalty: float = 0.6 + emissions_cost: float = 0 # Cost of emissions in $/kg + + include_demand_response: bool = False + include_battery: bool = False + include_onsite_solar: bool = False + onsite_capacity: float = 0 + + def __post_init__(self): + self.intake = IntakeParams() + self.pretreatment = PretreatmentParams() + self.wrd_uf = WRD_UFParams() ### ADDED + self.wrd_ro = WRD_ROParams() ### ADDED + self.ro = ROParams() + self.posttreatment = PosttreatmentParams() + self.brinedischarge = BrineDischargeParams() + self.battery = Battery() + + # datetime array + t = np.arange( + datetime.fromisoformat(self.start_date), + datetime.fromisoformat(self.end_date), + timedelta(hours=self.timestep_hours), + ).astype(datetime) + + # length of time step in seconds + dt_seconds = self.timestep_hours * 3600 + total_num_seconds = (t[-1] - t[0]).total_seconds() + dt_seconds + + self.num_hours = total_num_seconds / 3600 + self.num_days = self.num_hours / 24 + self.num_months = self.num_days / 31 + + +@dataclass +class WRD_ROParams(UnitParams): + """Parameters for the RO unit""" + + num_ro_skids: int = 4 + minimum_operating_skids: int = 2 + allow_shutdown: bool = True + minimum_flowrate: float = 0 + nominal_flowrate: float = 337.670 + maximum_flowrate: float = 400 + minimum_recovery: float = 0.4 # Not used + nominal_recovery: float = 0.465 + maximum_recovery: float = 0.55 # Not used + minimum_uptime: int = 1 + minimum_downtime: int = 4 + startup_delay: int = 8 + allow_variable_recovery: bool = False + + def __post_init__(self): + # self._surrogate = # load the surrogate model here. + self.surrogate_type: str = "constant_energy_intensity" + self.surrogate_a = ( + 1 # Not sure this input is being passed from the main script... + ) + self.surrogate_b = 1 + + @property + def surrogate_coeffs(self): + """Returs the coefficients of the surrogate model as a dictionary""" + return { + "a": self.surrogate_a, + "b": self.surrogate_b, + } + + def get_energy_intensity(self, flowrate): + """Returns the energy intensity for a given flowrate""" + # Placeholder implementation + coeffs = self.surrogate_coeffs + if self.surrogate_type == "constant_energy_intensity": + return coeffs["a"] + coeffs["b"] * flowrate + + return None + + def get_optimum_energy_intensity(self, flowrate_lb, flowrate_ub): + """ + Returns the optimum energy intensity if it exists inside the + interval. Returns None is the optimum is at the bounds. + """ + # No optimum exists inside the interval, because energy is constant. + return None + + def get_energy_intensity_bounds(self, flowrate_lb=None, flowrate_ub=None): + """ + Returns the bounds on energy intensity based on the bounds of + flowrate + """ + if flowrate_lb is None: + flowrate_lb = self.minimum_flowrate + if flowrate_ub is None: + flowrate_ub = self.maximum_flowrate + + ei_values = [ + self.get_energy_intensity(flowrate=self.minimum_flowrate), + self.get_energy_intensity(flowrate=self.maximum_flowrate), + self.get_optimum_energy_intensity(flowrate_lb, flowrate_ub), + ] + + ei_values = list(filter(None, ei_values)) # remove None, if it exists + return min(ei_values), max(ei_values) + + +@dataclass +class WRD_UFParams(UnitParams): + """Parameters for the UF unit""" + + num_uf_pumps: int = 4 + minimum_operating_pumps: int = 1 + allow_shutdown: bool = True + minimum_flowrate: float = 0 + nominal_flowrate: float = 337.670 + maximum_flowrate: float = 1000 + nominal_recovery: float = 1 + minimum_uptime: int = 1 + minimum_downtime: int = 4 + startup_delay: int = 8 + allow_variable_recovery: bool = False + + def __post_init__(self): + # self._surrogate = # load the surrogate model here. + self.surrogate_type: str = "constant_energy_intensity" + self.surrogate_a = ( + 1 # Not sure this input is being passed from the main script... + ) + self.surrogate_b = 1 + + @property + def surrogate_coeffs(self): + """Returs the coefficients of the surrogate model as a dictionary""" + return { + "a": self.surrogate_a, + "b": self.surrogate_b, + } + + def get_energy_intensity(self, flowrate): + """Returns the energy intensity for a given flowrate""" + # Placeholder implementation + coeffs = self.surrogate_coeffs + if self.surrogate_type == "constant_energy_intensity": + return coeffs["a"] + coeffs["b"] * flowrate + + return None + + def get_optimum_energy_intensity(self, flowrate_lb, flowrate_ub): + """ + Returns the optimum energy intensity if it exists inside the + interval. Returns None is the optimum is at the bounds. + """ + # No optimum exists inside the interval, because energy is constant. + return None + + def get_energy_intensity_bounds(self, flowrate_lb=None, flowrate_ub=None): + """ + Returns the bounds on energy intensity based on the bounds of + flowrate + """ + if flowrate_lb is None: + flowrate_lb = self.minimum_flowrate + if flowrate_ub is None: + flowrate_ub = self.maximum_flowrate + + ei_values = [ + self.get_energy_intensity(flowrate=self.minimum_flowrate), + self.get_energy_intensity(flowrate=self.maximum_flowrate), + self.get_optimum_energy_intensity(flowrate_lb, flowrate_ub), + ] + + ei_values = list(filter(None, ei_values)) # remove None, if it exists + return min(ei_values), max(ei_values) diff --git a/src/pricetaker/flowsheets/sbce_pricesignal.csv b/src/pricetaker/flowsheets/sbce_pricesignal.csv new file mode 100644 index 00000000..6b655ef5 --- /dev/null +++ b/src/pricetaker/flowsheets/sbce_pricesignal.csv @@ -0,0 +1,961 @@ +DateTime,electric_customer_0_2022-07-05_2022-07-14_0,electric_energy_0_2022-07-05_2022-07-14_0,electric_energy_1_2022-07-05_2022-07-14_0,electric_energy_2_2022-07-05_2022-07-14_0,electric_energy_3_2022-07-05_2022-07-14_0,electric_demand_peak-summer_2022-07-05_2022-07-14_0,electric_demand_maximum_2022-07-05_2022-07-14_0 +2022-07-05 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 16:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 16:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 16:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 16:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 17:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 17:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 17:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 17:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 18:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 18:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 18:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 18:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 19:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 19:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 19:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 19:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 20:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 20:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 20:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 20:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 16:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 16:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 16:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 16:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 17:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 17:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 17:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 17:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 18:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 18:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 18:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 18:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 19:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 19:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 19:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 19:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 20:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 20:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 20:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 20:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 16:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 16:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 16:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 16:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 17:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 17:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 17:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 17:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 18:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 18:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 18:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 18:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 19:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 19:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 19:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 19:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 20:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 20:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 20:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 20:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 16:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 16:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 16:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 16:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 17:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 17:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 17:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 17:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 18:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 18:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 18:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 18:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 19:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 19:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 19:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 19:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 20:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 20:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 20:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 20:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 16:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 16:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 16:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 16:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 17:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 17:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 17:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 17:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 18:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 18:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 18:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 18:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 19:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 19:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 19:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 19:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 20:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 20:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 20:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 20:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 16:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 16:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 16:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 16:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 17:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 17:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 17:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 17:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 18:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 18:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 18:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 18:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 19:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 19:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 19:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 19:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 20:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 20:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 20:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 20:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 16:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 16:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 16:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 16:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 17:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 17:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 17:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 17:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 18:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 18:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 18:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 18:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 19:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 19:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 19:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 19:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 20:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 20:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 20:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 20:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 16:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 16:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 16:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 16:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 17:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 17:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 17:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 17:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 18:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 18:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 18:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 18:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 19:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 19:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 19:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 19:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 20:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 20:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 20:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 20:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 16:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 16:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 16:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 16:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 17:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 17:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 17:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 17:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 18:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 18:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 18:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 18:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 19:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 19:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 19:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 19:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 20:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 20:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 20:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 20:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 16:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 16:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 16:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 16:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 17:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 17:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 17:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 17:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 18:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 18:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 18:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 18:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 19:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 19:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 19:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 19:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 20:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 20:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 20:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 20:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 diff --git a/src/pricetaker/flowsheets/tests/__init__.py b/src/pricetaker/flowsheets/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/pricetaker/flowsheets/tests/test_pricetaker_workflow.py b/src/pricetaker/flowsheets/tests/test_pricetaker_workflow.py new file mode 100644 index 00000000..b9cb7191 --- /dev/null +++ b/src/pricetaker/flowsheets/tests/test_pricetaker_workflow.py @@ -0,0 +1,257 @@ +################################################################################# +# WaterTAP Copyright (c) 2020-2024, The Regents of the University of California, +# through Lawrence Berkeley National Laboratory, Oak Ridge National Laboratory, +# National Renewable Energy Laboratory, and National Energy Technology +# Laboratory (subject to receipt of any required approvals from the U.S. Dept. +# of Energy). All rights reserved. +# +# Please see the files COPYRIGHT.md and LICENSE.md for full copyright and license +# information, respectively. These files are also available online at the URL +# "https://github.com/watertap-org/watertap/" +################################################################################# +import os + +import pyomo.environ as pyo +import pytest +import pandas as pd + +from idaes.apps.grid_integration import PriceTakerModel + +from watertap.flowsheets.flex_desal import flowsheet as fs +from watertap.flowsheets.flex_desal import utils +from watertap.flowsheets.flex_desal.params import FlexDesalParams +from watertap.core.solvers import get_solver + +solver = get_solver() + + +@pytest.mark.requires_idaes_solver +class TestPriceTakerWorkflow: + @pytest.fixture(scope="class") + def system_frame(self): + price_data_path = os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "..", + "sbce_pricesignal.csv", + ) + price_data = pd.read_csv(price_data_path) + price_data["Energy Rate"] = ( + price_data["electric_energy_0_2022-07-05_2022-07-14_0"] + + price_data["electric_energy_1_2022-07-05_2022-07-14_0"] + + price_data["electric_energy_2_2022-07-05_2022-07-14_0"] + + price_data["electric_energy_3_2022-07-05_2022-07-14_0"] + ) + price_data["Fixed Demand Rate"] = price_data[ + "electric_demand_maximum_2022-07-05_2022-07-14_0" + ] + price_data["Var Demand Rate"] = price_data[ + "electric_demand_peak-summer_2022-07-05_2022-07-14_0" + ] + price_data["Emissions Intensity"] = 0 + price_data["Customer Cost"] = price_data[ + "electric_customer_0_2022-07-05_2022-07-14_0" + ] + + m = PriceTakerModel() + + m.params = FlexDesalParams( + start_date="2022-07-05 00:00:00", + end_date="2022-07-15 00:00:00", + annual_production_AF=3125, # acrft/yr + ) + m.params.intake.nominal_flowrate = 1063.5 # m3/hr + m.params.ro.update( + { + "startup_delay": 8, # hours + "minimum_downtime": 4, # hours + "nominal_flowrate": 337.670, # m3/hr + "surrogate_type": "quadratic_surrogate", + "surrogate_a": 11.509, + "surrogate_b": -10.269, + "surrogate_c": 5.627, + "surrogate_d": 0, + "minimum_recovery": 0.4, + "nominal_recovery": 0.465, + "maximum_recovery": 0.52, + "allow_variable_recovery": True, + } + ) + + # Append LMP data to the model + m.append_lmp_data(lmp_data=price_data["Energy Rate"]) + + m.build_multiperiod_model( + flowsheet_func=fs.build_desal_flowsheet, + flowsheet_options={"params": m.params}, + ) + + # Update the time-varying parameters other than the LMP, such as + # demand costs and emissions intensity. LMP value is updated by default + m.update_operation_params( + { + "fixed_demand_rate": price_data["Fixed Demand Rate"], + "variable_demand_rate": price_data["Var Demand Rate"], + "emissions_intensity": price_data["Emissions Intensity"], + "customer_cost": price_data["Customer Cost"], + } + ) + + return m, price_data + + @pytest.mark.unit + def test_price_data_structure(self, system_frame): + m, price_data = system_frame + + assert "Energy Rate" in price_data.columns + assert "Fixed Demand Rate" in price_data.columns + assert "Var Demand Rate" in price_data.columns + assert "Emissions Intensity" in price_data.columns + assert "Customer Cost" in price_data.columns + assert "electric_energy_0_2022-07-05_2022-07-14_0" in price_data.columns + assert "electric_energy_1_2022-07-05_2022-07-14_0" in price_data.columns + assert "electric_energy_2_2022-07-05_2022-07-14_0" in price_data.columns + assert "electric_energy_3_2022-07-05_2022-07-14_0" in price_data.columns + assert "electric_demand_maximum_2022-07-05_2022-07-14_0" in price_data.columns + assert ( + "electric_demand_peak-summer_2022-07-05_2022-07-14_0" in price_data.columns + ) + assert "electric_customer_0_2022-07-05_2022-07-14_0" in price_data.columns + + assert hasattr(m.params.intake, "nominal_flowrate") + assert hasattr(m.params.ro, "startup_delay") + assert hasattr(m.params.ro, "minimum_downtime") + assert hasattr(m.params.ro, "nominal_flowrate") + assert hasattr(m.params.ro, "surrogate_type") + assert hasattr(m.params.ro, "surrogate_a") + assert hasattr(m.params.ro, "surrogate_b") + assert hasattr(m.params.ro, "surrogate_c") + assert hasattr(m.params.ro, "surrogate_d") + assert hasattr(m.params.ro, "minimum_recovery") + assert hasattr(m.params.ro, "nominal_recovery") + assert hasattr(m.params.ro, "maximum_recovery") + assert hasattr(m.params.ro, "allow_variable_recovery") + + @pytest.mark.unit + def test_add_constraints(self, system_frame): + m, price_data = system_frame + + # Add demand cost and fixed cost calculation constraints + fs.add_demand_and_fixed_costs(m) + + assert isinstance(m.fixed_demand_cost, pyo.Var) + assert isinstance(m.variable_demand_cost, pyo.Var) + assert isinstance(m.fixed_monthly_cost, pyo.Var) + assert isinstance(m.calculate_fixed_demand_cost, pyo.Constraint) + assert isinstance(m.calculate_variable_demand_cost, pyo.Constraint) + assert isinstance(m.calculate_fixed_monthly_cost, pyo.Constraint) + + # Add the startup delay constraints + fs.add_delayed_startup_constraints(m) + assert isinstance(m.posttreatment_unit_commitment, pyo.Constraint) + assert isinstance(m.brine_pump_unit_commitment, pyo.Constraint) + + @pytest.mark.unit + def test_add_useful_expressions(self, system_frame): + m, price_data = system_frame + + fs.add_useful_expressions(m) + + assert isinstance(m.total_water_revenue, pyo.Expression) + assert isinstance(m.total_demand_response_revenue, pyo.Expression) + assert isinstance(m.total_emissions_cost, pyo.Expression) + + @pytest.mark.unit + def test_add_capacity_limits(self, system_frame): + m, price_data = system_frame + + for skid in range(1, m.params.ro.num_ro_skids + 1): + m.add_capacity_limits( + # Name of the operation model block + op_block_name=f"reverse_osmosis.ro_skid[{skid}]", + # Name of the commodity on the operation model that capacity constraints will be applied to + commodity="feed_flowrate", + # Maximum capacity on the commodity + capacity=m.params.ro.nominal_flowrate, + # Ratio of the capacity at minimum stable operation to the maximum capacity. Must be between [0, 1] + op_range_lb=1, + ) + + @pytest.mark.unit + def test_constrain_water_production(self, system_frame): + m, price_data = system_frame + + m.total_water_production = pyo.Expression( + expr=m.params.timestep_hours + * sum(m.period[:, :].posttreatment.product_flowrate) + ) + m.total_energy_cost = pyo.Expression(expr=sum(m.period[:, :].energy_cost)) + m.total_demand_cost = pyo.Expression( + expr=m.fixed_demand_cost + m.variable_demand_cost + ) + m.total_customer_cost = pyo.Expression( + expr=sum(m.period[:, :].customer_cost) * m.params.num_months + ) + m.total_electricity_cost = pyo.Expression( + expr=m.total_energy_cost + m.total_demand_cost + m.total_customer_cost + ) + + # Feed flow to the intake does not vary with time + m.fix_operation_var("intake.feed_flowrate", m.params.intake.nominal_flowrate) + # Pretreatment is either active (1) or inactive (0) for the entire run + m.fix_operation_var("pretreatment.op_mode", 1) + + fs.constrain_water_production(m) + + # If water recovery is static, it must be fixed + if not m.params.ro.allow_variable_recovery: + utils.fix_recovery(m, recovery=m.params.ro.nominal_recovery) + + @pytest.mark.unit + def test_update_recovery_bounds(self, system_frame): + m, price_data = system_frame + utils.update_recovery_bounds(m, lb=0.4, ub=0.5) + + # @pytest.mark.unit + # def test_get_baseline_model(self, system_frame): + # m, price_data = system_frame + # utils.get_baseline_model(m) + + # @pytest.mark.component + # @pytest.mark.xfail + # # This test will fail if the user does not have a Gurobi license + # def test_gurobi_solve(self, system_frame): + # m, price_data = system_frame + # + # solver = pyo.SolverFactory("gurobi") + # solver.options["MIPGap"] = 0.03 + # solver.solve(m) + # + # @pytest.mark.component + # @pytest.mark.xfail + # # This test will fail if the user does not have a Gurobi license + # def test_gurobi_util_solve(self, system_frame): + # m, price_data = system_frame + # + # solver = utils.get_gurobi_solver_model(m) + # solver.solve(m) + + # @pytest.mark.component + # # Took 6 hours to solve locally + # def test_baron_solve(self, system_frame): + # m, price_data = system_frame + # + # solver = pyo.SolverFactory("gams") + # solver.solve(m, solver="baron", add_options=[f"options optcr={0.03};"]) + # + # assert pyo.value(m.fixed_demand_cost) == pytest.approx(5657.94712, rel=1e-3) + # assert pyo.value(m.variable_demand_cost) == pytest.approx(1195.44895, rel=1e-3) + # assert pyo.value(m.fixed_monthly_cost) == pytest.approx(247096.77419, rel=1e-3) + # assert pyo.value(m.total_water_production) == pytest.approx( + # 105606.16438, rel=1e-3 + # ) + # assert pyo.value(m.total_energy_cost) == pytest.approx(62361.435709, rel=1e-3) + # assert pyo.value(m.total_demand_cost) == pytest.approx(6853.39607, rel=1e-3) + # assert pyo.value(m.total_customer_cost) == pytest.approx(1177.34194, rel=1e-3) + # assert pyo.value(m.total_electricity_cost) == pytest.approx( + # 70392.17371, rel=1e-3 + # ) diff --git a/src/pricetaker/flowsheets/unit_models.py b/src/pricetaker/flowsheets/unit_models.py new file mode 100644 index 00000000..648db1f0 --- /dev/null +++ b/src/pricetaker/flowsheets/unit_models.py @@ -0,0 +1,346 @@ +################################################################################# +# WaterTAP Copyright (c) 2020-2024, The Regents of the University of California, +# through Lawrence Berkeley National Laboratory, Oak Ridge National Laboratory, +# National Renewable Energy Laboratory, and National Energy Technology +# Laboratory (subject to receipt of any required approvals from the U.S. Dept. +# of Energy). All rights reserved. +# +# Please see the files COPYRIGHT.md and LICENSE.md for full copyright and license +# information, respectively. These files are also available online at the URL +# "https://github.com/watertap-org/watertap/" +################################################################################# + +""" +This module contains unit models needed for flexible desalination +analysis. +""" + +from idaes.apps.grid_integration import OperationModel +from pyomo.environ import ( + Constraint, + NonNegativeReals, + Param, + RangeSet, + Var, + exp, + units as pyunits, +) +from pricetaker.flowsheets import params as um_params + + +# NOTE: OperationModel class automatically adds startup, shutdown, +# and op_mode binary variables. So, no need to define these variables +# explicitly. +def _add_required_variables(blk): + """Function for defining common variables and constraints""" + # Declare variables + blk.energy_intensity = Var( + within=NonNegativeReals, units=pyunits.kWh / pyunits.m**3 + ) + blk.power_consumption = Var(within=NonNegativeReals, units=pyunits.kW) + + blk.recovery = Var( + within=NonNegativeReals, bounds=(0, 1), units=pyunits.dimensionless + ) + blk.feed_flowrate = Var(within=NonNegativeReals, units=pyunits.m**3 / pyunits.hr) + blk.product_flowrate = Var(within=NonNegativeReals, units=pyunits.m**3 / pyunits.hr) + blk.reject_flowrate = Var(within=NonNegativeReals, units=pyunits.m**3 / pyunits.hr) + + # Declare model constraints + blk.mass_balance = Constraint( + expr=blk.feed_flowrate == blk.product_flowrate + blk.reject_flowrate, + doc="Overall mass balance", + ) + blk.calculate_product_flowrate = Constraint( + expr=blk.product_flowrate == blk.feed_flowrate * blk.recovery, + doc="Computes product flowrate", + ) + blk.calculate_power_consumption = Constraint( + expr=blk.power_consumption == blk.energy_intensity * blk.product_flowrate, + doc="Power requirement for the unit", + ) + + +def intake_operation_model(blk, params: um_params.IntakeParams): + """ + Builds operation model for the intake + + Parameters + ---------- + blk : OperationModel + IDAES OperationModel instance + + params : object + Input parameters needed for the model + """ + _add_required_variables(blk) + blk.recovery.fix(params.get_recovery) + blk.energy_intensity.fix(params.energy_intensity) + + +def pretreatment_operation_model(blk, params: um_params.PretreatmentParams): + """ + Builds operation model for the pretreatment unit + + Parameters + ---------- + blk : OperationModel + IDAES OperationModel instance + + params : object + Input parameters needed for the model + """ + _add_required_variables(blk) + blk.recovery.fix(params.get_recovery) + blk.energy_intensity.fix(params.energy_intensity) + + +def ro_skid_operation_model(blk, params: um_params.ROParams): + """ + Builds operation model for an RO skid + + Parameters + ---------- + blk : OperationModel + IDAES OperationModel instance + + params : object + Input parameters needed for the model + """ + # # Remove the constant if its magnitude is too small + # if abs(params.surrogate_d) < 1e-3: + # params.surrogate_d = 0 + + _add_required_variables(blk) + blk.coeffs = Param(["a", "b", "c", "d"], initialize=params.surrogate_coeffs) + + blk.operational_limits = Constraint( + expr=blk.feed_flowrate == blk.op_mode * params.nominal_flowrate + ) + + if params.surrogate_type == "exponential_quadratic": + blk.calculate_energy_intensity = Constraint( + expr=blk.energy_intensity + == ( + blk.coeffs["a"] * exp(-blk.coeffs["b"] * blk.recovery) + + blk.coeffs["c"] * blk.recovery**2 + + blk.coeffs["d"] + ), + doc="Calculates the specific energy requirement", + ) + + elif params.surrogate_type == "quadratic_surrogate": + blk.calculate_energy_intensity = Constraint( + expr=blk.energy_intensity + == ( + blk.coeffs["a"] * blk.recovery**2 + + blk.coeffs["b"] * blk.recovery + + blk.coeffs["c"] + ) + ) + + +def reverse_osmosis_operation_model(blk, params: um_params.ROParams): + """ + Builds operation model for the reverse osmosis unit + + Parameters + ---------- + blk : OperationModel + IDAES OperationModel instance + + params : object + Input parameters needed for the model + """ + # Declare required variables + _add_required_variables(blk) + blk.inlet_flowrate = Var(within=NonNegativeReals, units=pyunits.m**3 / pyunits.hr) + # Defining a slack variable for flowrate that is not accounted + # for by the sum of RO intake pumps + blk.leftover_flow = Var(within=NonNegativeReals, units=pyunits.m**3 / pyunits.hr) + + # Build RO skid models + blk.set_ro_skids = RangeSet(params.num_ro_skids) + blk.ro_skid = OperationModel( + blk.set_ro_skids, + model_func=ro_skid_operation_model, + model_args={"params": params}, + minimum_up_time=params.minimum_uptime, + minimum_down_time=params.minimum_downtime, + ) + + # Remove overall mass balance and power consumption calculation + blk.del_component(blk.recovery) + blk.del_component(blk.energy_intensity) + blk.del_component(blk.mass_balance) + blk.del_component(blk.calculate_product_flowrate) + blk.del_component(blk.calculate_power_consumption) + + # Declare required constraints + blk.calculate_leftover_flow = Constraint( + expr=blk.feed_flowrate == blk.inlet_flowrate + blk.leftover_flow, + doc="Calculates leftover flowrate", + ) + blk.feed_mass_balance = Constraint( + expr=blk.inlet_flowrate + == sum(blk.ro_skid[i].feed_flowrate for i in blk.set_ro_skids), + doc="Mass balance at the feed", + ) + blk.product_mass_balance = Constraint( + expr=blk.product_flowrate + == sum(blk.ro_skid[i].product_flowrate for i in blk.set_ro_skids), + doc="Mass balance on permeate side", + ) + blk.reject_mass_balance = Constraint( + expr=blk.reject_flowrate + == sum(blk.ro_skid[i].reject_flowrate for i in blk.set_ro_skids), + doc="Mass balance on brine side", + ) + blk.calculate_power_consumption = Constraint( + expr=blk.power_consumption + == sum(blk.ro_skid[i].power_consumption for i in blk.set_ro_skids), + doc="Calculates the total power requirement for RO", + ) + + # symmetry breaking for >1 skid. Skids can only operate if the previous skid is on + @blk.Constraint(blk.set_ro_skids) + def symmetry_breaking_cuts(b, index): + if index == 1: + return Constraint.Skip + return b.ro_skid[index].op_mode <= b.ro_skid[index - 1].op_mode + + # Ensure that the operation of minimum number of skids is identical + blk.set_min_operating_skids = RangeSet(2, params.minimum_operating_skids) + + @blk.Constraint(blk.set_min_operating_skids) + def minimum_ro_skids_startup(b, index): + return b.ro_skid[index].startup == b.ro_skid[1].startup + + @blk.Constraint(blk.set_min_operating_skids) + def minimum_ro_skids_op_mode(b, index): + return b.ro_skid[index].op_mode == b.ro_skid[1].op_mode + + @blk.Constraint(blk.set_min_operating_skids) + def minimum_ro_skids_shutdown(b, index): + return b.ro_skid[index].shutdown == b.ro_skid[1].shutdown + + # Update bounds on recovery and energy intensity for all skids + ei_lb, ei_ub = params.get_energy_intensity_bounds() + for skid in blk.set_ro_skids: + blk.ro_skid[skid].recovery.setlb(params.minimum_recovery) + blk.ro_skid[skid].recovery.setub(params.maximum_recovery) + blk.ro_skid[skid].energy_intensity.setlb(ei_lb) + blk.ro_skid[skid].energy_intensity.setub(ei_ub) + + +def posttreatment_operation_model(blk, params: um_params.FlexDesalParams): + """ + Builds operation model for the posttreatment unit + + Parameters + ---------- + blk : OperationModel + IDAES OperationModel instance + + params : object + Input parameters needed for the model + """ + _add_required_variables(blk) + + blk.energy_intensity.fix(params.posttreatment.energy_intensity) + blk.del_component(blk.recovery) + blk.del_component(blk.calculate_product_flowrate) + + # If the posttreatment unit is not operating, then set product flowrate to zero + # Connect post-treatment operation with the RO startup variables + blk.suppress_product_flowrate = Constraint( + expr=blk.product_flowrate <= params.intake.nominal_flowrate * blk.op_mode + ) + blk.suppress_reject_flowrate = Constraint( + expr=blk.reject_flowrate <= params.intake.nominal_flowrate * (1 - blk.op_mode) + ) + + # Update the power consumption calculation constraint + blk.calculate_power_consumption.set_value( + blk.power_consumption == blk.energy_intensity * blk.feed_flowrate, + ) + + +def brine_discharge_operation_model(blk, params: um_params.FlexDesalParams): + """ + Builds operation model for the brine discharge unit + + Parameters + ---------- + blk : OperationModel + IDAES OperationModel instance + + params : object + Input parameters needed for the model + """ + # Declare model parameters + blk.energy_intensity = Param( + initialize=params.brinedischarge.energy_intensity, + units=pyunits.kWh / pyunits.m**3, + mutable=True, + ) + + # Declare essential variables + blk.feed_flowrate = Var(within=NonNegativeReals, units=pyunits.m**3 / pyunits.hr) + blk.power_consumption = Var(within=NonNegativeReals, units=pyunits.kW) + + # the brine sump only consumes power if the RO is off, + # otherwise brine is pushed out by the leftover RO pressure + blk.calculate_power_consumption = Constraint( + expr=blk.power_consumption + >= blk.energy_intensity + * (blk.feed_flowrate + params.intake.nominal_flowrate * (blk.op_mode - 1)), + doc="Power requirement for brine discharge", + ) + + +def power_generation_operation_model(blk, params: um_params.FlexDesalParams): + """ + Builds the operation model for onsite power generation + + Parameters + ---------- + blk : OperationModel + Instance of IDAES OperationModel + + design_blk : DesignModel + Design model containing information on the peak capacity + """ + # Declare model parameters + blk.capacity_factor = Param( + initialize=0, + mutable=True, + units=pyunits.dimensionless, + doc="capacity factor of onsite power generation", + ) + + # Declare essential variables + # The installed capacity could exceed the power requirement + # We will assume that the excess power is curtailed. + blk.power_utilized = Var( + initialize=0, + within=NonNegativeReals, + units=pyunits.kW, + doc="Power utilized by the system", + ) + blk.power_curtailed = Var( + initialize=0, + within=NonNegativeReals, + units=pyunits.kW, + doc="Total power curtailed by the system", + ) + + # Energy balance: Sum of power utilized and the power + # curtailed must be equal to the total power generated. + blk.calculate_power_generation = Constraint( + expr=( + blk.power_utilized + blk.power_curtailed + == params.onsite_capacity * blk.capacity_factor + ), + doc="Computes the total power generated onsite", + ) diff --git a/src/pricetaker/flowsheets/utils.py b/src/pricetaker/flowsheets/utils.py new file mode 100644 index 00000000..6b3787ee --- /dev/null +++ b/src/pricetaker/flowsheets/utils.py @@ -0,0 +1,146 @@ +################################################################################# +# WaterTAP Copyright (c) 2020-2024, The Regents of the University of California, +# through Lawrence Berkeley National Laboratory, Oak Ridge National Laboratory, +# National Renewable Energy Laboratory, and National Energy Technology +# Laboratory (subject to receipt of any required approvals from the U.S. Dept. +# of Energy). All rights reserved. +# +# Please see the files COPYRIGHT.md and LICENSE.md for full copyright and license +# information, respectively. These files are also available online at the URL +# "https://github.com/watertap-org/watertap/" +################################################################################# + +""" +This module contains some utility functions +""" +from pyomo.environ import SolverFactory +from pyomo.common.dependencies import attempt_import + +# pylint: disable = import-error +gurobipy, gurobipy_available = attempt_import("gurobipy", defer_import=False) +if gurobipy_available: + from gurobipy import nlfunc + + +def get_gurobi_solver_model(m, mip_gap=0.01, time_limit=3600, tee=True): + """ + Returns a Pyomo SolverFactory object that is compatible with Gurobi. + This function is needed only when the RO recovery is a variable. + """ + if not gurobipy_available: + pass + else: + solver = SolverFactory("gurobi_persistent") + solver.options["MIPGap"] = mip_gap + solver.options["TimeLimit"] = time_limit + solver.options["OutputFlag"] = int(tee) + + if ( + not m.period[1, 1] + .reverse_osmosis.ro_skid[1] + .calculate_energy_intensity.active + ): + # If the nonlinear constraint is not active, then return the solver + # object directly + solver.set_instance(m) + return solver + + if m.params.surrogate_type == "quadratic_surrogate": + # Model is quadratic, so Pyomo's writer can handle it. + solver.set_instance(m) + return solver + + # Nonlinear constraint is present. + # Step 1: Deactivate the nonlinear constraint + for p in m.period: + for skid in m.period[p].reverse_osmosis.set_ro_skids: + m.period[p].reverse_osmosis.ro_skid[ + skid + ].calculate_energy_intensity.deactivate() + + # pylint: disable = protected-access + # Step 2: Build the gurobipy model + solver.set_instance(m) + gm = solver._solver_model # Gurobipy model + pm_to_gm = solver._pyomo_var_to_solver_var_map + + # Step 3: Add the nonlinear constraint + coeffs = m.period[1, 1].reverse_osmosis.ro_skid[1].coeffs + for p in m.period: + for skid in m.period[p].reverse_osmosis.set_ro_skids: + ro_skid = m.period[p].reverse_osmosis.ro_skid[skid] + recovery_var = pm_to_gm[ro_skid.recovery] + gm.addConstr( + ( + pm_to_gm[ro_skid.energy_intensity] + == coeffs["a"] * nlfunc.exp(-coeffs["b"] * recovery_var) + + coeffs["c"] * recovery_var * recovery_var + + coeffs["d"] + ), + name=f"ro_energy_intensity_{p[0]}_{p[1]}_{skid}", + ) + + return solver + + +def fix_recovery(m, recovery): + """Modifies the model for the fixed recovery case""" + # Compute the energy intensity + ro_skid = m.period[1, 1].reverse_osmosis.ro_skid[1] + energy_intensity = m.params.ro.get_energy_intensity(recovery) + + for p in m.period: + for skid in m.period[p].reverse_osmosis.set_ro_skids: + ro_skid = m.period[p].reverse_osmosis.ro_skid[skid] + ro_skid.recovery.fix(recovery) + ro_skid.energy_intensity.fix(energy_intensity) + ro_skid.calculate_energy_intensity.deactivate() + + +def wrd_fix_recovery(m, recovery): + """Modifies the model for the fixed recovery case""" + # Compute the energy intensity + ro_skid = m.period[1, 1].reverse_osmosis.ro_skid[1] + energy_intensity = m.params.wrd_ro.get_energy_intensity(recovery) + + for p in m.period: + for skid in m.period[p].reverse_osmosis.set_ro_skids: + ro_skid = m.period[p].reverse_osmosis.ro_skid[skid] + ro_skid.recovery.fix(recovery) + ro_skid.energy_intensity.fix(energy_intensity) + ro_skid.calculate_energy_intensity.deactivate() + + +def update_recovery_bounds(m, lb, ub): + """Updates the bounds on the recovery variable""" + ro_skid = m.period[1, 1].reverse_osmosis.ro_skid[1] + ei_lb, ei_ub = m.params.ro.get_energy_intensity_bounds(lb, ub) + + for p in m.period: + for skid in m.period[p].reverse_osmosis.set_ro_skids: + ro_skid = m.period[p].reverse_osmosis.ro_skid[skid] + ro_skid.recovery.setlb(lb) + ro_skid.recovery.setub(ub) + ro_skid.energy_intensity.setlb(ei_lb) + ro_skid.energy_intensity.setub(ei_ub) + + +def get_baseline_model(m): + """Returns a baseline model from the given model""" + bm = m.clone() + + # Ensure that the pretreatment unit is always on, and no leakage from it + bm.fix_operation_var("pretreatment.op_mode", 1) + bm.fix_operation_var("pretreatment.recovery", 1) + + # Ensure that the first three skids all always on + for skid in [1, 2, 3]: + bm.fix_operation_var(f"reverse_osmosis.ro_skid[{skid}].op_mode", 1) + + if hasattr(m.period[1, 1], "battery"): + # If the battery model exists, ensure that there is no charging + # and discharging + bm.fix_operation_var("battery.power_charge", 0) + bm.fix_operation_var("battery.power_discharge", 0) + + return bm diff --git a/src/pricetaker/flowsheets/wrd_ro_flowsheet.py b/src/pricetaker/flowsheets/wrd_ro_flowsheet.py new file mode 100644 index 00000000..04735f28 --- /dev/null +++ b/src/pricetaker/flowsheets/wrd_ro_flowsheet.py @@ -0,0 +1,328 @@ +################################################################################# +# WaterTAP Copyright (c) 2020-2024, The Regents of the University of California, +# through Lawrence Berkeley National Laboratory, Oak Ridge National Laboratory, +# National Renewable Energy Laboratory, and National Energy Technology +# Laboratory (subject to receipt of any required approvals from the U.S. Dept. +# of Energy). All rights reserved. +# +# Please see the files COPYRIGHT.md and LICENSE.md for full copyright and license +# information, respectively. These files are also available online at the URL +# "https://github.com/watertap-org/watertap/" +################################################################################# + +""" +Copied from the flexible desalination flowsheet, but altered ro surrogate. +""" + +from idaes.apps.grid_integration import OperationModel +from pyomo.environ import ( + Constraint, + Expression, + NonNegativeReals, + Param, + Var, + units as pyunits, +) +from pricetaker.flowsheets import params as um_params +from pricetaker.flowsheets import unit_models as um +from pricetaker.flowsheets.wrd_unit_models import ( + wrd_reverse_osmosis_operation_model, + wrd_uf_operation_model, +) + + +def add_operational_cost_expressions(blk, params: um_params.FlexDesalParams): + """ + Adds cost expressions to the flowsheet + """ + # Water revenue + blk.water_revenue = Expression( + expr=( + params.product_water_price + * blk.posttreatment.product_flowrate + * params.timestep_hours + ), + doc="Revenue generated from product water", + ) + + # Customer cost + blk.customer_cost = Param( + initialize=0, + mutable=True, + doc="Fixed customer cost", + ) + + # Demand response revenue + blk.demand_response_price = Param( + initialize=0, mutable=True, doc="Demand-response prices" + ) + blk.baseline_power = Param( + initialize=100, mutable=True, doc="Baseline power requirement" + ) + blk.demand_response_revenue = Expression( + expr=blk.demand_response_price + * (blk.baseline_power - blk.power_from_grid) + * params.timestep_hours, + doc="Revenue generated from demand response", + ) + + # Cost of emissions + blk.emissions_intensity = Param( + initialize=0, mutable=True, units=pyunits.kg / pyunits.kWh + ) + blk.emissions_cost = Expression( + expr=( + blk.emissions_intensity + * blk.power_from_grid + * params.timestep_hours + * params.emissions_cost + / 907.185 # Conversion factor: $/ton to $/kg + ), + doc="Cost associated with carbon emissions", + ) + + # Cost of energy + blk.LMP = Param( + initialize=0, + mutable=True, + doc="Locational marginal price of electricity [$/kWh]", + ) + blk.energy_cost = Expression( + expr=blk.LMP * blk.power_from_grid * params.timestep_hours, + doc="Cost of electricity purchased from the grid", + ) + + # Demand cost parameters + blk.fixed_demand_rate = Param( + initialize=0, + mutable=True, + doc="Constant demand tariff", + ) + blk.variable_demand_rate = Param( + initialize=0, + mutable=True, + doc="Variable demand tariff", + ) + + +def build_desal_flowsheet(blk, params: um_params.FlexDesalParams): + """ + Builds a flowsheet instance of the entire desalination process + + Parameters + ---------- + blk : Block + Pyomo Block instance + + params : object + Object containing model parameters + """ + + # Build units + blk.intake = OperationModel( + model_func=um.intake_operation_model, + model_args={"params": params.intake}, + ) + blk.bypass_pretreatment_flow = Var( + within=NonNegativeReals, + doc="Flowrate bypassed to brine discharge due to pretreatment shutdown", + ) + blk.pretreatment = OperationModel( + model_func=um.pretreatment_operation_model, + model_args={"params": params.wrd_uf}, + ) + blk.reverse_osmosis = OperationModel( + model_func=wrd_reverse_osmosis_operation_model, + model_args={"params": params.wrd_ro}, + ) + blk.posttreatment = OperationModel( + model_func=um.posttreatment_operation_model, + model_args={"params": params}, + ) + blk.brine_discharge = OperationModel( + model_func=um.brine_discharge_operation_model, + model_args={"params": params}, + ) + + # Flowsheet connections + blk.arc_intake_pretreatment = Constraint( + expr=blk.intake.product_flowrate + == blk.pretreatment.feed_flowrate + blk.bypass_pretreatment_flow, + doc="intake-pretreatment mass balance", + ) + blk.suppress_pretreatment_bypass = Constraint( + expr=blk.bypass_pretreatment_flow + <= (1 - blk.pretreatment.op_mode) * params.intake.nominal_flowrate + ) + blk.arc_pretreatment_ro = Constraint( + expr=blk.pretreatment.product_flowrate == blk.reverse_osmosis.feed_flowrate, + doc="pretreatment-reverse_osmosis mass balance", + ) + blk.arc_ro_posttreatment = Constraint( + expr=blk.reverse_osmosis.product_flowrate == blk.posttreatment.feed_flowrate, + doc="reverse_osmosis-posttreatment mass balance", + ) + blk.calculate_brine_discharge = Constraint( + expr=blk.brine_discharge.feed_flowrate + == ( + blk.intake.reject_flowrate + + blk.bypass_pretreatment_flow + + blk.pretreatment.reject_flowrate + + blk.reverse_osmosis.reject_flowrate + + blk.reverse_osmosis.leftover_flow + + blk.posttreatment.reject_flowrate + ), + doc="Computes the total inflow to brine discharge", + ) + + blk.num_skids_online = Expression( + expr=sum(blk.reverse_osmosis.ro_skid[:].op_mode), + doc="Calculates the number of skids operating at time t", + ) + + blk.net_power_consumption = Expression( + expr=blk.intake.power_consumption + + blk.pretreatment.power_consumption + + blk.reverse_osmosis.power_consumption + + blk.posttreatment.power_consumption + + blk.brine_discharge.power_consumption, + doc="Net power consumed from the grid", + ) + + if params.include_onsite_solar: + blk.power_generation = OperationModel( + model_func=um.power_generation_operation_model, + model_args={"params": params}, + ) + blk.net_power_consumption += -blk.power_generation.power_utilized + + if params.include_battery: + blk.battery = OperationModel() + blk.net_power_consumption += blk.battery.power_charge - blk.battery.discharge + + # Power purchased from the grid + blk.power_from_grid = Var( + within=NonNegativeReals, + units=pyunits.kW, + doc="Total power purchased from the grid", + ) + blk.overall_power_balance = Constraint( + expr=blk.power_from_grid == blk.net_power_consumption, + doc="Computes the total power purchased from the grid", + ) + + # Add cost expressions + add_operational_cost_expressions(blk, params) + + +def add_delayed_startup_constraints(m): + """Adds the delayed startup constraints to the model""" + params: um_params.FlexDesalParams = m.params + + # "Shutdown" post-treatment unit if RO startup is initiated + @m.Constraint(m.period.index_set()) + def posttreatment_unit_commitment(blk, d, t): + indices = [(d, t - i) for i in range(params.wrd_ro.startup_delay) if t - i > 0] + return (1 - blk.period[d, t].posttreatment.op_mode) == sum( + blk.period[p].reverse_osmosis.ro_skid[1].startup for p in indices + ) + + # Brine pump must operate if RO startup is initiated + @m.Constraint(m.period.index_set()) + def brine_pump_unit_commitment(blk, d, t): + indices = [(d, t - i) for i in range(params.wrd_ro.startup_delay) if t - i > 0] + return blk.period[d, t].brine_discharge.op_mode == sum( + blk.period[p].reverse_osmosis.ro_skid[1].startup for p in indices + ) + + +def add_demand_and_fixed_costs(m): + """Adds variables and expressions/constraints for demand and fixed costs""" + + params: um_params.FlexDesalParams = m.params + m.fixed_demand_cost = Var( + within=NonNegativeReals, + doc="Total fixed demand charge value for the entire horizon", + ) + m.variable_demand_cost = Var( + within=NonNegativeReals, + doc="Total variable demand charge value for the entire time horizon", + ) + m.fixed_monthly_cost = Var( + within=NonNegativeReals, + doc="Total customer cost for the entire time horizon", + ) + + @m.Constraint(m.period.index_set()) + def calculate_fixed_demand_cost(blk, d, t): + return ( + blk.fixed_demand_cost + >= blk.period[d, t].fixed_demand_rate + * blk.period[d, t].power_from_grid + * params.num_months + ) + + @m.Constraint(m.period.index_set()) + def calculate_variable_demand_cost(blk, d, t): + return ( + blk.variable_demand_cost + >= blk.period[d, t].variable_demand_rate + * blk.period[d, t].power_from_grid + * params.num_months + ) + + m.calculate_fixed_monthly_cost = Constraint( + expr=m.fixed_monthly_cost == params.fixed_monthly_cost * params.num_months + ) + + +def add_useful_expressions(m): + """Defines useful expressions for custom objective functions""" + + m.total_water_revenue = Expression(expr=sum(m.period[:, :].water_revenue)) + m.total_demand_response_revenue = Expression( + expr=sum(m.period[:, :].demand_response_revenue) + ) + m.total_emissions_cost = Expression(expr=sum(m.period[:, :].emissions_cost)) + + +def constrain_water_production(m, baseline_production: float = None): + """Constrains the total water production rate""" + + params: um_params.FlexDesalParams = m.params + if baseline_production is not None: + m.curtailment_fraction = Param( + initialize=params.curtailment_fraction, + mutable=True, + units=pyunits.dimensionless, + doc="Fraction of water production that is curtailed", + ) + + m.baseline_production = Param( + initialize=baseline_production, + mutable=True, + units=pyunits.m**3, + doc="Baseline water production", + ) + + m.water_production_target = Constraint( + expr=m.total_water_production + >= m.baseline_production * (1 - m.curtailment_fraction) + ) + + elif params.annual_production_AF is not None: + # Convert production rate from acre-ft/year to m^3/year + annual_production_m3 = params.annual_production_AF * 1233.48 + m.production_target_abs = Param( + initialize=annual_production_m3 / 365 * params.num_days, + mutable=True, + units=pyunits.m**3, + doc="Absolute water production target", + ) + + m.water_production_target = Constraint( + expr=m.total_water_production >= m.production_target_abs + ) + + else: + raise ValueError("Water production targets not specified in params") diff --git a/src/pricetaker/flowsheets/wrd_unit_models.py b/src/pricetaker/flowsheets/wrd_unit_models.py new file mode 100644 index 00000000..06224d42 --- /dev/null +++ b/src/pricetaker/flowsheets/wrd_unit_models.py @@ -0,0 +1,261 @@ +from idaes.apps.grid_integration import OperationModel +from pyomo.environ import ( + Constraint, + NonNegativeReals, + Param, + RangeSet, + Var, + exp, + units as pyunits, +) +from pricetaker.flowsheets import params as um_params +from pricetaker.flowsheets.unit_models import _add_required_variables + + +def ro_skid_operation_model(blk, params: um_params.WRD_ROParams): + """ + Builds operation model for an RO skid + + Parameters + ---------- + blk : OperationModel + IDAES OperationModel instance + + params : object + Input parameters needed for the model + """ + _add_required_variables(blk) + blk.coeffs = Param(["a", "b"], initialize=params.surrogate_coeffs) + + blk.operational_limits = Constraint( + expr=blk.feed_flowrate == blk.op_mode * params.nominal_flowrate + ) + + if params.surrogate_type == "constant_energy_intensity": + blk.calculate_energy_intensity = Constraint( + expr=blk.energy_intensity + == (blk.coeffs["a"] + blk.coeffs["b"] * blk.feed_flowrate), + doc="Calculates the specific energy requirement", + ) + else: + raise ValueError("Unrecognized surrogate type") + + +def wrd_reverse_osmosis_operation_model(blk, params: um_params.WRD_ROParams): + """ + Builds operation model for the reverse osmosis unit + + Parameters + ---------- + blk : OperationModel + IDAES OperationModel instance + + params : object + Input parameters needed for the model + """ + # Declare required variables + _add_required_variables(blk) + blk.inlet_flowrate = Var(within=NonNegativeReals, units=pyunits.m**3 / pyunits.hr) + # Defining a slack variable for flowrate that is not accounted + # for by the sum of RO intake pumps + blk.leftover_flow = Var(within=NonNegativeReals, units=pyunits.m**3 / pyunits.hr) + + # Build RO skid models + blk.set_ro_skids = RangeSet(params.num_ro_skids) + blk.ro_skid = OperationModel( + blk.set_ro_skids, + model_func=ro_skid_operation_model, + model_args={"params": params}, + minimum_up_time=params.minimum_uptime, + minimum_down_time=params.minimum_downtime, + ) + + # Remove overall mass balance and power consumption calculation + blk.del_component(blk.recovery) + blk.del_component(blk.energy_intensity) + blk.del_component(blk.mass_balance) + blk.del_component(blk.calculate_product_flowrate) + blk.del_component(blk.calculate_power_consumption) + + # Declare required constraints + blk.calculate_leftover_flow = Constraint( + expr=blk.feed_flowrate == blk.inlet_flowrate + blk.leftover_flow, + doc="Calculates leftover flowrate", + ) + blk.feed_mass_balance = Constraint( + expr=blk.inlet_flowrate + == sum(blk.ro_skid[i].feed_flowrate for i in blk.set_ro_skids), + doc="Mass balance at the feed", + ) + blk.product_mass_balance = Constraint( + expr=blk.product_flowrate + == sum(blk.ro_skid[i].product_flowrate for i in blk.set_ro_skids), + doc="Mass balance on permeate side", + ) + blk.reject_mass_balance = Constraint( + expr=blk.reject_flowrate + == sum(blk.ro_skid[i].reject_flowrate for i in blk.set_ro_skids), + doc="Mass balance on brine side", + ) + blk.calculate_power_consumption = Constraint( + expr=blk.power_consumption + == sum(blk.ro_skid[i].power_consumption for i in blk.set_ro_skids), + doc="Calculates the total power requirement for RO", + ) + + # symmetry breaking for >1 skid. Skids can only operate if the previous skid is on + @blk.Constraint(blk.set_ro_skids) + def symmetry_breaking_cuts(b, index): + if index == 1: + return Constraint.Skip + return b.ro_skid[index].op_mode <= b.ro_skid[index - 1].op_mode + + # Ensure that the operation of minimum number of skids is identical + blk.set_min_operating_skids = RangeSet(2, params.minimum_operating_skids) + + @blk.Constraint(blk.set_min_operating_skids) + def minimum_ro_skids_startup(b, index): + return b.ro_skid[index].startup == b.ro_skid[1].startup + + @blk.Constraint(blk.set_min_operating_skids) + def minimum_ro_skids_op_mode(b, index): + return b.ro_skid[index].op_mode == b.ro_skid[1].op_mode + + @blk.Constraint(blk.set_min_operating_skids) + def minimum_ro_skids_shutdown(b, index): + return b.ro_skid[index].shutdown == b.ro_skid[1].shutdown + + # Update bounds on recovery and energy intensity for all skids + ei_lb, ei_ub = params.get_energy_intensity_bounds() + for skid in blk.set_ro_skids: + blk.ro_skid[skid].feed_flowrate.setlb(params.minimum_flowrate) + blk.ro_skid[skid].feed_flowrate.setub(params.maximum_flowrate) + blk.ro_skid[skid].energy_intensity.setlb(ei_lb) + blk.ro_skid[skid].energy_intensity.setub(ei_ub) + + +# Currently implementing UF same way as RO. +# However, this will increase the decision variables significantly, increasing solve time. + + +def uf_pump_operation_model(blk, params: um_params.WRD_UFParams): + """ + Builds operation model for a UF pump + + Parameters + ---------- + blk : OperationModel + IDAES OperationModel instance + + params : object + Input parameters needed for the model + """ + _add_required_variables(blk) + blk.coeffs = Param(["a", "b"], initialize=params.surrogate_coeffs) + + blk.operational_limits = Constraint( + expr=blk.feed_flowrate == blk.op_mode * params.nominal_flowrate + ) + + if params.surrogate_type == "constant_energy_intensity": + blk.calculate_energy_intensity = Constraint( + expr=blk.energy_intensity + == (blk.coeffs["a"] + blk.coeffs["b"] * blk.feed_flowrate), + doc="Calculates the specific energy requirement", + ) + else: + raise ValueError("Unrecognized surrogate type") + + +def wrd_uf_operation_model(blk, params: um_params.WRD_UFParams): + """ + Builds operation model for UF unit in WRD case + + Parameters + ---------- + blk : OperationModel + IDAES OperationModel instance + + params : object + Input parameters needed for the model + """ + # Declare required variables + _add_required_variables(blk) + blk.inlet_flowrate = Var(within=NonNegativeReals, units=pyunits.m**3 / pyunits.hr) + # Defining a slack variable for flowrate that is not accounted + # for by the sum of RO intake pumps + blk.leftover_flow = Var(within=NonNegativeReals, units=pyunits.m**3 / pyunits.hr) + + # Build RO skid models + blk.set_uf_pumps = RangeSet(params.num_uf_pumps) + blk.uf_pumps = OperationModel( + blk.set_uf_pumps, + model_func=uf_pump_operation_model, + model_args={"params": params}, + minimum_up_time=params.minimum_uptime, + minimum_down_time=params.minimum_downtime, + ) + + # Remove overall mass balance and power consumption calculation + blk.del_component(blk.recovery) + blk.del_component(blk.energy_intensity) + blk.del_component(blk.mass_balance) + blk.del_component(blk.calculate_product_flowrate) + blk.del_component(blk.calculate_power_consumption) + + # Declare required constraints + blk.calculate_leftover_flow = Constraint( + expr=blk.feed_flowrate == blk.inlet_flowrate + blk.leftover_flow, + doc="Calculates leftover flowrate", + ) + blk.feed_mass_balance = Constraint( + expr=blk.inlet_flowrate + == sum(blk.uf_pumps[i].feed_flowrate for i in blk.set_uf_pumps), + doc="Mass balance at the feed", + ) + blk.product_mass_balance = Constraint( + expr=blk.product_flowrate + == sum(blk.uf_pumps[i].product_flowrate for i in blk.set_uf_pumps), + doc="Mass balance on permeate side", + ) + blk.reject_mass_balance = Constraint( + expr=blk.reject_flowrate + == sum(blk.uf_pumps[i].reject_flowrate for i in blk.set_uf_pumps), + doc="Mass balance on brine side", + ) + blk.calculate_power_consumption = Constraint( + expr=blk.power_consumption + == sum(blk.uf_pumps[i].power_consumption for i in blk.set_uf_pumps), + doc="Calculates the total power requirement for RO", + ) + + # symmetry breaking for >1 skid. Skids can only operate if the previous skid is on + # This is not true in practice, but which exact pump is on shouldn't matter + @blk.Constraint(blk.set_uf_pumps) + def symmetry_breaking_cuts(b, index): + if index == 1: + return Constraint.Skip + return b.uf_pumps[index].op_mode <= b.uf_pumps[index - 1].op_mode + + # Ensure that the operation of minimum number of skids is identical + blk.set_min_operating_pumps = RangeSet(2, params.minimum_operating_pumps) + + @blk.Constraint(blk.set_min_operating_pumps) + def minimum_uf_pumps_startup(b, index): + return b.uf_pumps[index].startup == b.uf_pumps[1].startup + + @blk.Constraint(blk.set_min_operating_pumps) + def minimum_uf_pumps_op_mode(b, index): + return b.uf_pumps[index].op_mode == b.uf_pumps[1].op_mode + + @blk.Constraint(blk.set_min_operating_pumps) + def minimum_uf_pumps_shutdown(b, index): + return b.uf_pumps[index].shutdown == b.uf_pumps[1].shutdown + + # Update bounds on recovery and energy intensity for all skids + ei_lb, ei_ub = params.get_energy_intensity_bounds() + for pump in blk.set_uf_pumps: + blk.uf_pumps[pump].feed_flowrate.setlb(params.minimum_flowrate) + blk.uf_pumps[pump].feed_flowrate.setub(params.maximum_flowrate) + blk.uf_pumps[pump].energy_intensity.setlb(ei_lb) + blk.uf_pumps[pump].energy_intensity.setub(ei_ub) diff --git a/src/pricetaker/tutorials/__init__.py b/src/pricetaker/tutorials/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/pricetaker/tutorials/mp_model.ipynb b/src/pricetaker/tutorials/mp_model.ipynb new file mode 100644 index 00000000..16c8aac9 --- /dev/null +++ b/src/pricetaker/tutorials/mp_model.ipynb @@ -0,0 +1,394 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Flexible RO Multiperiod/Pricetaker Workflow\n", + "\n", + "This tutorial will show how to optimize the cost of a pricetaker model given a dataset of price signals and the system's operating conditions (start date, end date, flow rate, minimum recovery, etc.). See the [IDAES Pricetaker Documentation](https://github.com/IDAES/idaes-pse/blob/main/docs/reference_guides/apps/grid_integration/multiperiod/Price_Taker.rst) for more details.\n", + "\n", + "### Important files\n", + " - **flowsheet**: contains the functions needed for the construction of a flexible desalination flowsheet with cost expressions\n", + " - **utils**: contains utility functions to streamline the workflow\n", + " - **params**: contains the default values of all the required parameters\n", + " - **PriceTakerModel**: contains the pricetaker model, where pricetakers are entities that must accept market prices since they lack the market share to directly influence the market price. When coupled with the multi-period modeling, this model is able to synthesize grid-centric modeling with steady-state, process-centric modeling:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$ max_{d,u, \\delta } = \\sum_{s \\in S} \\sum_{t \\in T} w_{s}[R(d,u_{s,t},\\delta _{s,t},\\pi _{s,t}) - C(d,u_{s,t},\\delta _{s,t})] $\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$ g(d,u_{s,t},\\delta _{s,t}) = 0; \\forall _{s} \\in S, t \\in T $" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$ h(d,u_{s,t},\\delta _{s,t},u_{s,t+1},\\delta _{s,t+1}) = 0; \\forall _{s} \\in S, t \\in T $" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 1: Import libraries from pandas, pyomo, and IDAES" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from idaes.apps.grid_integration import PriceTakerModel\n", + "import pandas as pd\n", + "import pyomo.environ as pyo\n", + "from pricetaker.flowsheets import flowsheet as fs\n", + "from pricetaker.flowsheets import utils\n", + "from pricetaker.flowsheets.params import FlexDesalParams" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 2: Interpret price signal data from the .csv" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "price_data = pd.read_csv(\"sbce_pricesignal.csv\")\n", + "price_data[\"Energy Rate\"] = (\n", + " price_data[\"electric_energy_0_2022-07-05_2022-07-14_0\"]\n", + " + price_data[\"electric_energy_1_2022-07-05_2022-07-14_0\"]\n", + " + price_data[\"electric_energy_2_2022-07-05_2022-07-14_0\"]\n", + " + price_data[\"electric_energy_3_2022-07-05_2022-07-14_0\"]\n", + ")\n", + "price_data[\"Fixed Demand Rate\"] = price_data[\n", + " \"electric_demand_maximum_2022-07-05_2022-07-14_0\"\n", + "]\n", + "price_data[\"Var Demand Rate\"] = price_data[\n", + " \"electric_demand_peak-summer_2022-07-05_2022-07-14_0\"\n", + "]\n", + "# units? + Don't really understand the Var demand rate... it's only applied at peak hours, but it's billed monthly? But so is the fixed demand rate, so is it in addition to that?\n", + "price_data[\"Emissions Intensity\"] = 0\n", + "price_data[\"Customer Cost\"] = price_data[\"electric_customer_0_2022-07-05_2022-07-14_0\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 3: Create an instance of the PriceTakerModel" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "m = PriceTakerModel()\n", + "\n", + "# Instantiate an object containing the model parameters\n", + "m.params = FlexDesalParams(\n", + " start_date=\"2022-07-05 00:00:00\",\n", + " end_date=\"2022-07-15 00:00:00\",\n", + " annual_production_AF=3125, # acrft/yr\n", + ")\n", + "m.params.intake.nominal_flowrate = 1063.5 # m3/hr\n", + "m.params.ro.update(\n", + " {\n", + " \"startup_delay\": 8, # hours\n", + " \"minimum_downtime\": 4, # hours\n", + " \"nominal_flowrate\": 337.670, # m3/hr\n", + " \"surrogate_type\": \"quadratic_surrogate\",\n", + " \"surrogate_a\": 11.509,\n", + " \"surrogate_b\": -10.269,\n", + " \"surrogate_c\": 5.627,\n", + " \"surrogate_d\": 0,\n", + " \"minimum_recovery\": 0.4,\n", + " \"nominal_recovery\": 0.465,\n", + " \"maximum_recovery\": 0.52,\n", + " \"allow_variable_recovery\": True,\n", + " }\n", + ")\n", + "\n", + "# Append LMP data to the model\n", + "m.append_lmp_data(lmp_data=price_data[\"Energy Rate\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 4: Build the multiperiod model" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2026-02-02 15:52:19 [INFO] idaes.apps.grid_integration.pricetaker.price_taker_model: Found minimum uptime/downtime data for reverse_osmosis.ro_skid[1] - Adding minimum uptime/downtime constraints.\n", + "2026-02-02 15:52:19 [INFO] idaes.apps.grid_integration.pricetaker.price_taker_model: Created startup/shutdown constraints for operation model reverse_osmosis.ro_skid[1] at ro_skid_1_startup_shutdown.\n", + "2026-02-02 15:52:19 [INFO] idaes.apps.grid_integration.pricetaker.price_taker_model: Found minimum uptime/downtime data for reverse_osmosis.ro_skid[2] - Adding minimum uptime/downtime constraints.\n", + "2026-02-02 15:52:19 [INFO] idaes.apps.grid_integration.pricetaker.price_taker_model: Created startup/shutdown constraints for operation model reverse_osmosis.ro_skid[2] at ro_skid_2_startup_shutdown.\n", + "2026-02-02 15:52:19 [INFO] idaes.apps.grid_integration.pricetaker.price_taker_model: Found minimum uptime/downtime data for reverse_osmosis.ro_skid[3] - Adding minimum uptime/downtime constraints.\n", + "2026-02-02 15:52:19 [INFO] idaes.apps.grid_integration.pricetaker.price_taker_model: Created startup/shutdown constraints for operation model reverse_osmosis.ro_skid[3] at ro_skid_3_startup_shutdown.\n" + ] + } + ], + "source": [ + "m.build_multiperiod_model(\n", + " flowsheet_func=fs.build_desal_flowsheet,\n", + " flowsheet_options={\"params\": m.params},\n", + ")\n", + "\n", + "# Update the time-varying parameters other than the LMP, such as\n", + "# demand costs and emissions intensity. LMP value is updated by default\n", + "m.update_operation_params(\n", + " {\n", + " \"fixed_demand_rate\": price_data[\"Fixed Demand Rate\"],\n", + " \"variable_demand_rate\": price_data[\"Var Demand Rate\"],\n", + " \"emissions_intensity\": price_data[\"Emissions Intensity\"],\n", + " \"customer_cost\": price_data[\"Customer Cost\"],\n", + " }\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 5: Add constraints from the flowsheet (fs)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "# Add demand cost and fixed cost calculation constraints\n", + "fs.add_demand_and_fixed_costs(m)\n", + "\n", + "# Add the startup delay constraints\n", + "fs.add_delayed_startup_constraints(m)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 6: Construct useful expressions or model-level constraints" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "m.total_water_production = pyo.Expression(\n", + " expr=m.params.timestep_hours * sum(m.period[:, :].posttreatment.product_flowrate)\n", + ")\n", + "m.total_energy_cost = pyo.Expression(expr=sum(m.period[:, :].energy_cost))\n", + "m.total_demand_cost = pyo.Expression(expr=m.fixed_demand_cost + m.variable_demand_cost)\n", + "m.total_customer_cost = pyo.Expression(\n", + " expr=sum(m.period[:, :].customer_cost) * m.params.num_months\n", + ")\n", + "m.total_electricity_cost = pyo.Expression(\n", + " expr=m.total_energy_cost + m.total_demand_cost + m.total_customer_cost\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 7: Fix operation variables that do not vary with time " + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "# Feed flow to the intake does not vary with time\n", + "m.fix_operation_var(\"intake.feed_flowrate\", m.params.intake.nominal_flowrate)\n", + "# Pretreatment is either active (1) or inactive (0) for the entire run\n", + "m.fix_operation_var(\"pretreatment.op_mode\", 1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 8: Call the flowsheet function that constrains water production based on the water production target" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fs.constrain_water_production(m)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 9: Call the objective function to minimize operating costs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# If water recovery is static, it must be fixed\n", + "if not m.params.ro.allow_variable_recovery:\n", + " utils.fix_recovery(m, recovery=m.params.ro.nominal_recovery)\n", + "\n", + "m.obj = pyo.Objective(\n", + " expr=m.total_energy_cost + m.total_demand_cost,\n", + " sense=pyo.minimize,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# # Use the following code to optimize net profit\n", + "# m.add_hourly_cashflows(\n", + "# revenue_streams=[\"water_revenue\", \"demand_response_revenue\"],\n", + "# operational_costs=[\"emissions_cost\", \"energy_cost\"],\n", + "# )\n", + "# m.add_overall_cashflows(\n", + "# other_costs=[m.fixed_demand_cost, m.variable_demand_cost, m.fixed_monthly_cost]\n", + "# )\n", + "\n", + "# m.add_objective_function(objective_type=\"net_profit\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 10: Call Gurobi to solve the optimization problem. If a Gurobi license is not available, try resorting to a different solver" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "solver_name = \"gurobi\"\n", + "# solver_name = \"baron\"\n", + "# solver_name = \"scip\"\n", + "# solver_name = \"cplex\"\n", + "mip_gap = 0.03\n", + "\n", + "if solver_name == \"gurobi\":\n", + " # solver = utils.get_gurobi_solver_model(m, mip_gap=0.005)\n", + " solver = pyo.SolverFactory(\"gurobi\")\n", + " solver.options[\"MIPGap\"] = mip_gap\n", + " solver.solve(m, tee=True)\n", + "\n", + "elif solver_name == \"scip\":\n", + " solver = pyo.SolverFactory(\"scip\", validate=False)\n", + " solver.solve(m, tee=True)\n", + "\n", + "elif solver_name in [\"baron\", \"cplex\"]:\n", + " solver = pyo.SolverFactory(\"gams\")\n", + " solver.solve(\n", + " m, tee=True, solver=solver_name, add_options=[f\"options optcr={mip_gap};\"]\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 11: Compile results" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Write optimal values of all operational variables to a csv file\n", + "m.get_operation_var_values().to_csv(\"dummy_result.csv\")\n", + "\n", + "# Plot operational variables\n", + "fig, axs = m.plot_operation_profile(\n", + " [\n", + " \"fixed_demand_rate\",\n", + " \"variable_demand_rate\",\n", + " \"posttreatment.product_flowrate\",\n", + " \"num_skids_online\",\n", + " ],\n", + ")\n", + "\n", + "# Return the values of all variables and expressions that do not vary with time\n", + "m.get_design_var_values()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "watertap-dev", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.14" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/src/pricetaker/tutorials/notebook_as_script.py b/src/pricetaker/tutorials/notebook_as_script.py new file mode 100644 index 00000000..230dfe39 --- /dev/null +++ b/src/pricetaker/tutorials/notebook_as_script.py @@ -0,0 +1,162 @@ +import os +from idaes.apps.grid_integration import PriceTakerModel +import pandas as pd +import pyomo.environ as pyo +from pathlib import Path +from pricetaker.flowsheets import flowsheet as fs +from pricetaker.flowsheets import utils +from pricetaker.flowsheets.params import FlexDesalParams +from watertap.core.solvers import get_solver +from idaes.core.util.model_diagnostics import DiagnosticsToolbox + + +if __name__ == "__main__": + # Get the directory where this script is located + script_dir = Path(__file__).parent + price_data = pd.read_csv(script_dir / "sbce_pricesignal_short.csv") + price_data["Energy Rate"] = ( + price_data["electric_energy_0_2022-07-05_2022-07-14_0"] + + price_data["electric_energy_1_2022-07-05_2022-07-14_0"] + + price_data["electric_energy_2_2022-07-05_2022-07-14_0"] + + price_data["electric_energy_3_2022-07-05_2022-07-14_0"] + ) + price_data["Fixed Demand Rate"] = price_data[ + "electric_demand_maximum_2022-07-05_2022-07-14_0" + ] + price_data["Var Demand Rate"] = price_data[ + "electric_demand_peak-summer_2022-07-05_2022-07-14_0" + ] + # units? + Don't really understand the Var demand rate... it's only applied at peak hours, but it's billed monthly? But so is the fixed demand rate, so is it in addition to that? + price_data["Emissions Intensity"] = 0 + price_data["Customer Cost"] = price_data[ + "electric_customer_0_2022-07-05_2022-07-14_0" + ] + + m = PriceTakerModel() + + # Instantiate an object containing the model parameters + m.params = FlexDesalParams( + start_date="2022-07-05 00:00:00", + end_date="2022-07-05 02:15:00", + annual_production_AF=3125, + # fixed_monthly_cost = 10000, + # customer_rate=price_data["Customer Cost"][1], # acrft/yr + ) + m.params.intake.nominal_flowrate = 1063.5 # m3/hr + m.params.ro.update( + { + "startup_delay": 8, # hours + "minimum_downtime": 4, # hours + "nominal_flowrate": 337.670, # m3/hr + "surrogate_type": "quadratic_surrogate", + "surrogate_a": 11.509, + "surrogate_b": -10.269, + "surrogate_c": 5.627, + "surrogate_d": 0, + "minimum_recovery": 0.4, + "nominal_recovery": 0.465, + "maximum_recovery": 0.52, + "allow_variable_recovery": True, + } + ) + + # Append LMP data to the model + m.append_lmp_data(lmp_data=price_data["Energy Rate"]) + + m.build_multiperiod_model( + flowsheet_func=fs.build_desal_flowsheet, + flowsheet_options={"params": m.params}, + ) + + # Update the time-varying parameters other than the LMP, such as + # demand costs and emissions intensity. LMP value is updated by default + + # First, discover what blocks exist in the model + print("Discovering blocks in period[1,1]:") + for component in m.period[1, 1].component_objects(pyo.Block, descend_into=False): + print(f" - {component.name}") + + # Skipping this b/c it doesn't work and instead setting fixed rate in the FlexDesalParams + m.update_operation_params( + { + "fixed_demand_rate": price_data["Fixed Demand Rate"], + "variable_demand_rate": price_data["Var Demand Rate"], + "emissions_intensity": price_data["Emissions Intensity"], + "customer_cost": price_data["Customer Cost"], + } + ) + + # Add demand cost and fixed cost calculation constraints + fs.add_demand_and_fixed_costs(m) + + # Add the startup delay constraints + fs.add_delayed_startup_constraints(m) + + m.total_water_production = pyo.Expression( + expr=m.params.timestep_hours + * sum(m.period[:, :].posttreatment.product_flowrate) + ) + m.total_energy_cost = pyo.Expression(expr=sum(m.period[:, :].energy_cost)) + m.total_demand_cost = pyo.Expression( + expr=m.fixed_demand_cost + m.variable_demand_cost + ) + m.total_customer_cost = pyo.Expression( + expr=sum(m.period[:, :].customer_cost) * m.params.num_months + ) + m.total_electricity_cost = pyo.Expression( + expr=m.total_energy_cost + m.total_demand_cost + m.total_customer_cost + ) + + # Feed flow to the intake does not vary with time + m.fix_operation_var("intake.feed_flowrate", m.params.intake.nominal_flowrate) + # Pretreatment is either active (1) or inactive (0) for the entire run + m.fix_operation_var("pretreatment.op_mode", 1) + + fs.constrain_water_production(m) + + # If water recovery is static, it must be fixed + if not m.params.ro.allow_variable_recovery: + utils.fix_recovery(m, recovery=m.params.ro.nominal_recovery) + + m.obj = pyo.Objective( + expr=m.total_energy_cost + m.total_demand_cost, + sense=pyo.minimize, + ) + + # Can't use gurobi because it requires a liciense for integer variables + # So going to use ipopt, but may need to look into this further + dt = DiagnosticsToolbox(m) + # solver = get_solver() + # results = solver.solve(m) + + # Configure GLPK executable path + os.environ['PATH'] = r'C:\Users\rchurchi\AppData\Local\anaconda3\pkgs\glpk-4.65-h17947e8_4\Library\bin' + os.pathsep + os.environ.get('PATH', '') + + solver = pyo.SolverFactory("mindtpy") + results = solver.solve( + m, + mip_solver="glpk", + nlp_solver="ipopt", + tee=True, + ) + + pyo.assert_optimal_termination(results) + + # Write optimal values of all operational variables to a csv file + # This required adding a function to pricetakermodel + m.get_operation_var_values().to_csv("dummy_result.csv") + + # Plot operational variables + fig, axs = m.plot_operation_profile( + [ + "fixed_demand_rate", + "variable_demand_rate", + "posttreatment.product_flowrate", + "num_skids_online", + ], + ) + fig.savefig("operation_profile.png") + # Return the values of all variables and expressions that do not vary with time + print(m.get_design_var_values()) + + # OK this runs and solves at least diff --git a/src/pricetaker/tutorials/ro_const_SEC.py b/src/pricetaker/tutorials/ro_const_SEC.py new file mode 100644 index 00000000..02dc774c --- /dev/null +++ b/src/pricetaker/tutorials/ro_const_SEC.py @@ -0,0 +1,162 @@ +from idaes.apps.grid_integration import PriceTakerModel +import pandas as pd +import pyomo.environ as pyo +from pathlib import Path +from pricetaker.flowsheets import wrd_ro_flowsheet as fs +from pricetaker.flowsheets import utils +from pricetaker.flowsheets.params import FlexDesalParams +from watertap.core.solvers import get_solver +from idaes.core.util.model_diagnostics import DiagnosticsToolbox + + +if __name__ == "__main__": + # Get the directory where this script is located + script_dir = Path(__file__).parent + price_data = pd.read_csv(script_dir / "sbce_pricesignal_short.csv") + # price_data["Energy Rate"] = ( + # price_data["electric_energy_on_peak"] + # + price_data["electric_energy_mid_peak"] + # + price_data["electric_energy_off_peak"] + # + price_data["electric_energy_super_off_peak"] + # ) + # price_data["Fixed Demand Rate"] = price_data["electric_demand_fixed_summer"] + # price_data["Var Demand Rate"] = price_data["electric_demand_peak_adder_summer"] + price_data["Energy Rate"] = ( + price_data["electric_energy_0_2022-07-05_2022-07-14_0"] + + price_data["electric_energy_1_2022-07-05_2022-07-14_0"] + + price_data["electric_energy_2_2022-07-05_2022-07-14_0"] + + price_data["electric_energy_3_2022-07-05_2022-07-14_0"] + ) + price_data["Fixed Demand Rate"] = price_data[ + "electric_demand_maximum_2022-07-05_2022-07-14_0" + ] + price_data["Var Demand Rate"] = price_data[ + "electric_demand_peak-summer_2022-07-05_2022-07-14_0" + ] + # units? + Don't really understand the Var demand rate... it's only applied at peak hours, but it's billed monthly? But so is the fixed demand rate, so is it in addition to that? + price_data["Emissions Intensity"] = 0 + # price_data["Customer Cost"] = price_data["electric_customer_fixed_charge"] + price_data["Customer Cost"] = price_data[ + "electric_customer_0_2022-07-05_2022-07-14_0" + ] + m = PriceTakerModel() + + # Instantiate an object containing the model parameters + m.params = FlexDesalParams( + start_date="2022-07-05 00:00:00", + end_date="2022-07-05 02:15:00", + annual_production_AF=1000, + # fixed_monthly_cost = 10000, + # customer_rate=price_data["Customer Cost"][1], # acrft/yr + ) + m.params.intake.nominal_flowrate = 1063.5 # m3/hr + m.params.wrd_uf.update( + { + "surrogate_type": "constant_energy_intensity", + "surrogate_a": 1.0, + "surrogate_b": 0.0, + "nominal_recovery": 1, + } + ) + m.params.wrd_ro.update( + { + "startup_delay": 8, # hours + "minimum_downtime": 4, # hours + "nominal_flowrate": 363.4, # m3/hr #per skid + "surrogate_type": "constant_energy_intensity", + "surrogate_a": 1.0, + "surrogate_b": 0.0, + "nominal_recovery": 0.465, + "num_ro_skids": 4, + } + ) + + # Append LMP data to the model + m.append_lmp_data(lmp_data=price_data["Energy Rate"]) + + m.build_multiperiod_model( + flowsheet_func=fs.build_desal_flowsheet, + flowsheet_options={"params": m.params}, + ) + + # Update the time-varying parameters other than the LMP, such as + # demand costs and emissions intensity. LMP value is updated by default + + # First, discover what blocks exist in the model + + print("Discovering blocks in period[1,1]:") + for component in m.period[1, 1].component_objects(pyo.Block, descend_into=False): + print(f" - {component.name}") + + m.update_operation_params( + { + "fixed_demand_rate": price_data["Fixed Demand Rate"], + "variable_demand_rate": price_data["Var Demand Rate"], + "emissions_intensity": price_data["Emissions Intensity"], + "customer_cost": price_data["Customer Cost"], + } + ) + + # Add demand cost and fixed cost calculation constraints + fs.add_demand_and_fixed_costs(m) + + # Add the startup delay constraints + fs.add_delayed_startup_constraints(m) + + m.total_water_production = pyo.Expression( + expr=m.params.timestep_hours + * sum(m.period[:, :].posttreatment.product_flowrate) + ) + m.total_energy_cost = pyo.Expression(expr=sum(m.period[:, :].energy_cost)) + m.total_demand_cost = pyo.Expression( + expr=m.fixed_demand_cost + m.variable_demand_cost + ) + m.total_customer_cost = pyo.Expression( + expr=sum(m.period[:, :].customer_cost) * m.params.num_months + ) + m.total_electricity_cost = pyo.Expression( + expr=m.total_energy_cost + m.total_demand_cost + m.total_customer_cost + ) + + # Feed flow to the intake does not vary with time + m.fix_operation_var("intake.feed_flowrate", m.params.intake.nominal_flowrate) + + # Pretreatment is either active (1) or inactive (0) for the entire run + # m.fix_operation_var("pretreatment.op_mode", 1) + + fs.constrain_water_production(m) + + # If water recovery is static, it must be fixed + if not m.params.wrd_ro.allow_variable_recovery: + utils.wrd_fix_recovery(m, recovery=m.params.wrd_ro.nominal_recovery) + + m.obj = pyo.Objective( + expr=m.total_energy_cost + m.total_demand_cost, + sense=pyo.minimize, + ) + + # Can't use gurobi because it requires a liciense for integer variables + # So going to use ipopt, but may need to look into this further + dt = DiagnosticsToolbox(m) + solver = get_solver() + results = solver.solve(m) + + pyo.assert_optimal_termination(results) + + # Write optimal values of all operational variables to a csv file + m.get_operation_var_values().to_csv("dummy_wrd_result.csv") + + # Plot operational variables + fig, axs = m.plot_operation_profile( + operation_vars=[ + "fixed_demand_rate", + "variable_demand_rate", + "posttreatment.product_flowrate", + "num_skids_online", + ], + ) + fig.savefig("operation_profile.png") + # Return the values of all variables and expressions that do not vary with time + print(m.get_design_var_values()) + + # OK this runs and solves at least diff --git a/src/pricetaker/tutorials/sbce_pricesignal.csv b/src/pricetaker/tutorials/sbce_pricesignal.csv new file mode 100644 index 00000000..6b655ef5 --- /dev/null +++ b/src/pricetaker/tutorials/sbce_pricesignal.csv @@ -0,0 +1,961 @@ +DateTime,electric_customer_0_2022-07-05_2022-07-14_0,electric_energy_0_2022-07-05_2022-07-14_0,electric_energy_1_2022-07-05_2022-07-14_0,electric_energy_2_2022-07-05_2022-07-14_0,electric_energy_3_2022-07-05_2022-07-14_0,electric_demand_peak-summer_2022-07-05_2022-07-14_0,electric_demand_maximum_2022-07-05_2022-07-14_0 +2022-07-05 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-05 16:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 16:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 16:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 16:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 17:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 17:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 17:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 17:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 18:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 18:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 18:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 18:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 19:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 19:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 19:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 19:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 20:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 20:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 20:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 20:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-05 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-05 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-06 16:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 16:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 16:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 16:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 17:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 17:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 17:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 17:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 18:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 18:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 18:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 18:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 19:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 19:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 19:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 19:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 20:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 20:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 20:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 20:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-06 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-06 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-07 16:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 16:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 16:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 16:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 17:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 17:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 17:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 17:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 18:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 18:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 18:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 18:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 19:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 19:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 19:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 19:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 20:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 20:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 20:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 20:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-07 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-07 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-08 16:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 16:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 16:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 16:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 17:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 17:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 17:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 17:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 18:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 18:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 18:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 18:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 19:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 19:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 19:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 19:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 20:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 20:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 20:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 20:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-08 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-08 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-09 16:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 16:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 16:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 16:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 17:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 17:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 17:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 17:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 18:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 18:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 18:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 18:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 19:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 19:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 19:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 19:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 20:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 20:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 20:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 20:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-09 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-09 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-10 16:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 16:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 16:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 16:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 17:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 17:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 17:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 17:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 18:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 18:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 18:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 18:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 19:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 19:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 19:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 19:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 20:00:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 20:15:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 20:30:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 20:45:00,3.8018333333333336,0.0,0.0,0.0,0.19809,0.0,8.03 +2022-07-10 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-10 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-11 16:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 16:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 16:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 16:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 17:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 17:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 17:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 17:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 18:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 18:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 18:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 18:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 19:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 19:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 19:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 19:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 20:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 20:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 20:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 20:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-11 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-11 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-12 16:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 16:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 16:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 16:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 17:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 17:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 17:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 17:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 18:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 18:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 18:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 18:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 19:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 19:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 19:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 19:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 20:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 20:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 20:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 20:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-12 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-12 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-13 16:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 16:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 16:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 16:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 17:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 17:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 17:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 17:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 18:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 18:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 18:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 18:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 19:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 19:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 19:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 19:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 20:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 20:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 20:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 20:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-13 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-13 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 00:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 00:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 00:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 00:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 01:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 01:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 01:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 01:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 02:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 02:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 02:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 02:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 03:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 03:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 03:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 03:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 04:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 04:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 04:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 04:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 05:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 05:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 05:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 05:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 06:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 06:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 06:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 06:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 07:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 07:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 07:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 07:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 08:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 08:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 08:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 08:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 09:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 09:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 09:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 09:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 10:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 10:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 10:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 10:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 11:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 11:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 11:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 11:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 12:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 12:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 12:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 12:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 13:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 13:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 13:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 13:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 14:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 14:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 14:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 14:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 15:00:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 15:15:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 15:30:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 15:45:00,3.8018333333333336,0.0,0.12955,0.0,0.0,0.0,8.03 +2022-07-14 16:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 16:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 16:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 16:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 17:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 17:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 17:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 17:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 18:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 18:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 18:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 18:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 19:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 19:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 19:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 19:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 20:00:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 20:15:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 20:30:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 20:45:00,3.8018333333333336,0.52939,0.0,0.0,0.0,2.55,8.03 +2022-07-14 21:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 21:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 21:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 21:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 22:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 22:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 22:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 22:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 23:00:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 23:15:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 23:30:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 +2022-07-14 23:45:00,3.8018333333333336,0.0,0.0,0.12955,0.0,0.0,8.03 diff --git a/src/pricetaker/tutorials/sbce_pricesignal_day.csv b/src/pricetaker/tutorials/sbce_pricesignal_day.csv new file mode 100644 index 00000000..fca677e5 --- /dev/null +++ b/src/pricetaker/tutorials/sbce_pricesignal_day.csv @@ -0,0 +1,97 @@ +DateTime,electric_customer_0_2022-07-05_2022-07-14_0,electric_energy_0_2022-07-05_2022-07-14_0,electric_energy_1_2022-07-05_2022-07-14_0,electric_energy_2_2022-07-05_2022-07-14_0,electric_energy_3_2022-07-05_2022-07-14_0,electric_demand_peak-summer_2022-07-05_2022-07-14_0,electric_demand_maximum_2022-07-05_2022-07-14_0 +7/5/2022 0:00,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 0:15,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 0:30,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 0:45,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 1:00,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 1:15,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 1:30,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 1:45,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 2:00,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 2:15,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 2:30,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 2:45,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 3:00,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 3:15,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 3:30,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 3:45,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 4:00,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 4:15,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 4:30,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 4:45,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 5:00,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 5:15,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 5:30,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 5:45,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 6:00,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 6:15,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 6:30,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 6:45,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 7:00,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 7:15,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 7:30,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 7:45,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 8:00,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 8:15,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 8:30,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 8:45,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 9:00,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 9:15,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 9:30,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 9:45,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 10:00,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 10:15,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 10:30,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 10:45,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 11:00,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 11:15,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 11:30,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 11:45,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 12:00,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 12:15,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 12:30,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 12:45,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 13:00,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 13:15,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 13:30,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 13:45,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 14:00,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 14:15,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 14:30,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 14:45,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 15:00,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 15:15,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 15:30,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 15:45,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 16:00,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 16:15,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 16:30,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 16:45,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 17:00,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 17:15,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 17:30,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 17:45,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 18:00,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 18:15,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 18:30,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 18:45,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 19:00,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 19:15,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 19:30,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 19:45,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 20:00,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 20:15,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 20:30,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 20:45,3.801833333,0.52939,0,0,0,2.55,8.03 +7/5/2022 21:00,3.801833333,0,0,0.12955,0,0,8.03 +7/5/2022 21:15,3.801833333,0,0,0.12955,0,0,8.03 +7/5/2022 21:30,3.801833333,0,0,0.12955,0,0,8.03 +7/5/2022 21:45,3.801833333,0,0,0.12955,0,0,8.03 +7/5/2022 22:00,3.801833333,0,0,0.12955,0,0,8.03 +7/5/2022 22:15,3.801833333,0,0,0.12955,0,0,8.03 +7/5/2022 22:30,3.801833333,0,0,0.12955,0,0,8.03 +7/5/2022 22:45,3.801833333,0,0,0.12955,0,0,8.03 +7/5/2022 23:00,3.801833333,0,0,0.12955,0,0,8.03 +7/5/2022 23:15,3.801833333,0,0,0.12955,0,0,8.03 +7/5/2022 23:30,3.801833333,0,0,0.12955,0,0,8.03 +7/5/2022 23:45,3.801833333,0,0,0.12955,0,0,8.03 diff --git a/src/pricetaker/tutorials/sbce_pricesignal_short.csv b/src/pricetaker/tutorials/sbce_pricesignal_short.csv new file mode 100644 index 00000000..55d101f3 --- /dev/null +++ b/src/pricetaker/tutorials/sbce_pricesignal_short.csv @@ -0,0 +1,11 @@ +DateTime,electric_customer_0_2022-07-05_2022-07-14_0,electric_energy_0_2022-07-05_2022-07-14_0,electric_energy_1_2022-07-05_2022-07-14_0,electric_energy_2_2022-07-05_2022-07-14_0,electric_energy_3_2022-07-05_2022-07-14_0,electric_demand_peak-summer_2022-07-05_2022-07-14_0,electric_demand_maximum_2022-07-05_2022-07-14_0 +7/5/2022 0:00,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 0:15,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 0:30,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 0:45,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 1:00,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 1:15,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 1:30,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 1:45,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 2:00,3.801833333,0,0.12955,0,0,0,8.03 +7/5/2022 2:15,3.801833333,0,0.12955,0,0,0,8.03 diff --git a/src/pricetaker/tutorials/wrd_pricesignal_august.csv b/src/pricetaker/tutorials/wrd_pricesignal_august.csv new file mode 100644 index 00000000..8f298848 --- /dev/null +++ b/src/pricetaker/tutorials/wrd_pricesignal_august.csv @@ -0,0 +1,97 @@ +DateTime,electric_customer_fixed_charge,electric_energy_on_peak,electric_energy_mid_peak,electric_energy_off_peak,electric_energy_super_off_peak,electric_demand_fixed_summer,electric_demand_peak_adder_summer +8/19/2021 0:00,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 0:15,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 0:30,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 0:45,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 1:00,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 1:15,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 1:30,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 1:45,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 2:00,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 2:15,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 2:30,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 2:45,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 3:00,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 3:15,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 3:30,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 3:45,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 4:00,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 4:15,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 4:30,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 4:45,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 5:00,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 5:15,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 5:30,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 5:45,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 6:00,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 6:15,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 6:30,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 6:45,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 7:00,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 7:15,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 7:30,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 7:45,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 8:00,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 8:15,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 8:30,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 8:45,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 9:00,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 9:15,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 9:30,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 9:45,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 10:00,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 10:15,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 10:30,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 10:45,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 11:00,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 11:15,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 11:30,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 11:45,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 12:00,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 12:15,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 12:30,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 12:45,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 13:00,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 13:15,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 13:30,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 13:45,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 14:00,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 14:15,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 14:30,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 14:45,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 15:00,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 15:15,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 15:30,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 15:45,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 16:00,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 16:15,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 16:30,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 16:45,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 17:00,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 17:15,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 17:30,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 17:45,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 18:00,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 18:15,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 18:30,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 18:45,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 19:00,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 19:15,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 19:30,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 19:45,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 20:00,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 20:15,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 20:30,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 20:45,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 21:00,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 21:15,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 21:30,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 21:45,894.1,0.099,0,0,0,37.62,12.11 +8/19/2021 22:00,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 22:15,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 22:30,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 22:45,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 23:00,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 23:15,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 23:30,894.1,0,0,0.06402,0,37.62,0 +8/19/2021 23:45,894.1,0,0,0.06402,0,37.62,0 diff --git a/src/pricetaker/tutorials/wrd_pricesignal_summer.csv b/src/pricetaker/tutorials/wrd_pricesignal_summer.csv new file mode 100644 index 00000000..430e3ad7 --- /dev/null +++ b/src/pricetaker/tutorials/wrd_pricesignal_summer.csv @@ -0,0 +1,257 @@ +DateTime,electric_customer_fixed_charge,electric_energy_on_peak,electric_energy_mid_peak,electric_energy_off_peak,electric_energy_super_off_peak,electric_demand_fixed_summer,electric_demand_peak_adder_summer +8/19/2021 0:00,,0,0,0.06402,0,37.62,0 +8/19/2021 0:15,,0,0,0.06402,0,37.62,0 +8/19/2021 0:30,,0,0,0.06402,0,37.62,0 +8/19/2021 0:45,,0,0,0.06402,0,37.62,0 +8/19/2021 1:00,,0,0,0.06402,0,37.62,0 +8/19/2021 1:15,,0,0,0.06402,0,37.62,0 +8/19/2021 1:30,,0,0,0.06402,0,37.62,0 +8/19/2021 1:45,,0,0,0.06402,0,37.62,0 +8/19/2021 2:00,,0,0,0.06402,0,37.62,0 +8/19/2021 2:15,,0,0,0.06402,0,37.62,0 +8/19/2021 2:30,,0,0,0.06402,0,37.62,0 +8/19/2021 2:45,,0,0,0.06402,0,37.62,0 +8/19/2021 3:00,,0,0,0.06402,0,37.62,0 +8/19/2021 3:15,,0,0,0.06402,0,37.62,0 +8/19/2021 3:30,,0,0,0.06402,0,37.62,0 +8/19/2021 3:45,,0,0,0.06402,0,37.62,0 +8/19/2021 4:00,,0,0,0.06402,0,37.62,0 +8/19/2021 4:15,,0,0,0.06402,0,37.62,0 +8/19/2021 4:30,,0,0,0.06402,0,37.62,0 +8/19/2021 4:45,,0,0,0.06402,0,37.62,0 +8/19/2021 5:00,,0,0,0.06402,0,37.62,0 +8/19/2021 5:15,,0,0,0.06402,0,37.62,0 +8/19/2021 5:30,,0,0,0.06402,0,37.62,0 +8/19/2021 5:45,,0,0,0.06402,0,37.62,0 +8/19/2021 6:00,,0,0,0.06402,0,37.62,0 +8/19/2021 6:15,,0,0,0.06402,0,37.62,0 +8/19/2021 6:30,,0,0,0.06402,0,37.62,0 +8/19/2021 6:45,,0,0,0.06402,0,37.62,0 +8/19/2021 7:00,,0,0,0.06402,0,37.62,0 +8/19/2021 7:15,,0,0,0.06402,0,37.62,0 +8/19/2021 7:30,,0,0,0.06402,0,37.62,0 +8/19/2021 7:45,,0,0,0.06402,0,37.62,0 +8/19/2021 8:00,,0,0,0.06402,0,37.62,0 +8/19/2021 8:15,,0,0,0.06402,0,37.62,0 +8/19/2021 8:30,,0,0,0.06402,0,37.62,0 +8/19/2021 8:45,,0,0,0.06402,0,37.62,0 +8/19/2021 9:00,,0,0,0.06402,0,37.62,0 +8/19/2021 9:15,,0,0,0.06402,0,37.62,0 +8/19/2021 9:30,,0,0,0.06402,0,37.62,0 +8/19/2021 9:45,,0,0,0.06402,0,37.62,0 +8/19/2021 10:00,,0,0,0.06402,0,37.62,0 +8/19/2021 10:15,,0,0,0.06402,0,37.62,0 +8/19/2021 10:30,,0,0,0.06402,0,37.62,0 +8/19/2021 10:45,,0,0,0.06402,0,37.62,0 +8/19/2021 11:00,,0,0,0.06402,0,37.62,0 +8/19/2021 11:15,,0,0,0.06402,0,37.62,0 +8/19/2021 11:30,,0,0,0.06402,0,37.62,0 +8/19/2021 11:45,,0,0,0.06402,0,37.62,0 +8/19/2021 12:00,,0,0,0.06402,0,37.62,0 +8/19/2021 12:15,,0,0,0.06402,0,37.62,0 +8/19/2021 12:30,,0,0,0.06402,0,37.62,0 +8/19/2021 12:45,,0,0,0.06402,0,37.62,0 +8/19/2021 13:00,,0,0,0.06402,0,37.62,0 +8/19/2021 13:15,,0,0,0.06402,0,37.62,0 +8/19/2021 13:30,,0,0,0.06402,0,37.62,0 +8/19/2021 13:45,,0,0,0.06402,0,37.62,0 +8/19/2021 14:00,,0,0,0.06402,0,37.62,0 +8/19/2021 14:15,,0,0,0.06402,0,37.62,0 +8/19/2021 14:30,,0,0,0.06402,0,37.62,0 +8/19/2021 14:45,,0,0,0.06402,0,37.62,0 +8/19/2021 15:00,,0,0,0.06402,0,37.62,0 +8/19/2021 15:15,,0,0,0.06402,0,37.62,0 +8/19/2021 15:30,,0,0,0.06402,0,37.62,0 +8/19/2021 15:45,,0,0,0.06402,0,37.62,0 +8/19/2021 16:00,,0,0,0.06402,0,37.62,0 +8/19/2021 16:15,,0,0,0.06402,0,37.62,0 +8/19/2021 16:30,,0,0,0.06402,0,37.62,0 +8/19/2021 16:45,,0,0,0.06402,0,37.62,0 +8/19/2021 17:00,,0.099,0,,0,37.62,12.11 +8/19/2021 17:15,,0.099,0,,0,37.62,12.11 +8/19/2021 17:30,,0.099,0,,0,37.62,12.11 +8/19/2021 17:45,,0.099,0,,0,37.62,12.11 +8/19/2021 18:00,,0.099,0,,0,37.62,12.11 +8/19/2021 18:15,,0.099,0,,0,37.62,12.11 +8/19/2021 18:30,,0.099,0,,0,37.62,12.11 +8/19/2021 18:45,,0.099,0,,0,37.62,12.11 +8/19/2021 19:00,,0.099,0,,0,37.62,12.11 +8/19/2021 19:15,,0.099,0,,0,37.62,12.11 +8/19/2021 19:30,,0.099,0,,0,37.62,12.11 +8/19/2021 19:45,,0.099,0,,0,37.62,12.11 +8/19/2021 20:00,,0.099,0,,0,37.62,12.11 +8/19/2021 20:15,,0.099,0,,0,37.62,12.11 +8/19/2021 20:30,,0.099,0,,0,37.62,12.11 +8/19/2021 20:45,,0.099,0,,0,37.62,12.11 +8/19/2021 21:00,,0.099,0,,0,37.62,12.11 +8/19/2021 21:15,,0.099,0,,0,37.62,12.11 +8/19/2021 21:30,,0.099,0,,0,37.62,12.11 +8/19/2021 21:45,,0.099,0,,0,37.62,12.11 +8/19/2021 22:00,,0,0,0.06402,0,37.62,0 +8/19/2021 22:15,,0,0,0.06402,0,37.62,0 +8/19/2021 22:30,,0,0,0.06402,0,37.62,0 +8/19/2021 22:45,,0,0,0.06402,0,37.62,0 +8/19/2021 23:00,,0,0,0.06402,0,37.62,0 +8/19/2021 23:15,,0,0,0.06402,0,37.62,0 +8/19/2021 23:30,,0,0,0.06402,0,37.62,0 +8/19/2021 23:45,,0,0,0.06402,0,37.62,0 +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, +,,,,,,, diff --git a/src/pricetaker/tutorials/wrd_pricesignal_summer.xlsx b/src/pricetaker/tutorials/wrd_pricesignal_summer.xlsx new file mode 100644 index 00000000..b204859f Binary files /dev/null and b/src/pricetaker/tutorials/wrd_pricesignal_summer.xlsx differ