From bdffa2e970617c9d59233abaf0bfe85c3eda0cfa Mon Sep 17 00:00:00 2001 From: ch Date: Tue, 24 Nov 2020 13:20:29 +0100 Subject: [PATCH] init --- AUTHORS | 3 + CITATION | 12 + CODE | 20 + LICENSE | 26 + README.md | 384 ++ RUNME.m | 15 + SETUP.m | 43 + VERSION | 1 + models/ode_end.m | 109 + models/ode_mid.m | 111 + models/private/D_d.m | 9 + models/private/D_f.m | 9 + models/private/D_g.m | 9 + models/private/D_p.m | 9 + models/private/D_q.m | 9 + morgen.ini | 35 + morgen.m | 601 ++ networks/AzeJ07.net | 9 + networks/AzeJ07/training.ini | 7 + networks/Cha09.net | 2 + networks/Cha09/period.ini | 6 + networks/Cha09/training.ini | 6 + networks/DeWS00.net | 41 + networks/DeWS00/training.ini | 6 + networks/GasLib11.net | 13 + networks/GasLib11/training.ini | 7 + networks/GasLib134.net | 182 + networks/GasLib134/rand.ini | 7 + networks/GasLib134/training.ini | 7 + networks/GasLib135.net | 276 + networks/GasLib135/training.ini | 7 + networks/GasLib24.net | 34 + networks/GasLib24/training.ini | 7 + networks/GasLib40.net | 78 + networks/GasLib40/training.ini | 7 + networks/GasLib4197.net | 5487 +++++++++++++++++ networks/GasLib4197/training.ini | 7 + networks/GasLib582.net | 770 +++ networks/GasLib582/training.ini | 7 + networks/GruHKetal13.net | 19 + networks/GruHKetal13/training.ini | 6 + networks/GruJHetal14.net | 49 + networks/GruJHetal14/training.ini | 6 + networks/Guy67.net | 17 + networks/Guy67/training.ini | 6 + networks/Kiu94.net | 17 + networks/Kiu94/training.ini | 6 + networks/MORGEN.net | 35 + networks/MORGEN/day.ini | 8 + networks/MORGEN/training.ini | 7 + networks/PamBD16.net | 7 + networks/PamBD16/day.ini | 6 + networks/PamBD16/training.ini | 6 + networks/RodS18.net | 9 + networks/RodS18/training.ini | 6 + networks/comptest.net | 4 + networks/comptest/training.ini | 7 + networks/diamond.net | 10 + networks/diamond/day.ini | 6 + networks/diamond/training.ini | 6 + networks/fork1.net | 7 + networks/fork1/training.ini | 6 + networks/fork2.net | 7 + networks/fork2/training.ini | 6 + networks/pipeline.net | 2 + networks/pipeline/day.ini | 6 + networks/pipeline/training.ini | 6 + reductors/bpod_ro.m | 30 + reductors/dmd_r.m | 32 + reductors/ebg_ro.m | 33 + reductors/ebg_wx.m | 32 + reductors/ebg_wz.m | 32 + reductors/ebt_ro.m | 30 + reductors/ebt_wx.m | 29 + reductors/ebt_wz.m | 29 + reductors/eds_ro.m | 35 + reductors/eds_wx.m | 32 + reductors/eds_wz.m | 32 + reductors/pod_r.m | 30 + reductors/private/balgn.m | 14 + reductors/private/balro.m | 20 + reductors/private/bpod.m | 20 + reductors/private/dmd.m | 15 + reductors/private/emgr.m | 598 ++ solvers/generic.m | 48 + solvers/imex1.m | 62 + solvers/imex2.m | 84 + solvers/private/initialstate.m | 18 + solvers/rk4.m | 78 + tests/mor_Cha09.m | 44 + tests/mor_GasLib134.m | 44 + tests/mor_MORGEN.m | 44 + tests/mor_komso.m | 25 + tests/mor_pipeline.m | 33 + tests/sim_AzeJ07.m | 13 + tests/sim_Cha09.m | 12 + tests/sim_DeWS00.m | 13 + tests/sim_GasLib11.m | 13 + tests/sim_GasLib134.m | 13 + tests/sim_GasLib135.m | 13 + tests/sim_GasLib24.m | 13 + tests/sim_GasLib40.m | 13 + tests/sim_GasLib4197.m | 13 + tests/sim_GasLib582.m | 13 + tests/sim_GruHKetal13.m | 13 + tests/sim_Guy67.m | 13 + tests/sim_Kiu94.m | 13 + tests/sim_MORGEN.m | 12 + tests/sim_RodS18.m | 13 + tests/sim_comptest.m | 13 + tests/sim_diamond.m | 13 + tests/sim_fork1.m | 13 + tests/sim_fork2.m | 13 + tests/sim_pipeline.m | 13 + tools/cmp_friction.m | 15 + tools/json2csv.m | 89 + tools/randscen.m | 97 + tools/vf2mf.m | 14 + tools/xml2csv.xsl | 272 + utils/assert_warn.m | 17 + utils/cfl.m | 9 + utils/circsurf.m | 9 + utils/cleanup.m | 13 + utils/cmov.m | 9 + utils/compressibility/compressibility_aga88.m | 9 + utils/compressibility/compressibility_dvgw.m | 9 + utils/compressibility/compressibility_ideal.m | 9 + utils/compressibility/compressibility_papay.m | 12 + utils/constant/constant_gravity.m | 9 + utils/format/format_ini.m | 15 + utils/format/format_network.m | 194 + utils/format/format_scenario.m | 42 + utils/format/save_ini.m | 18 + utils/friction/friction_altshul.m | 9 + utils/friction/friction_hofer.m | 9 + utils/friction/friction_igt.m | 10 + utils/friction/friction_nikuradse.m | 9 + utils/friction/friction_pmt1025.m | 9 + utils/friction/friction_schifrinson.m | 9 + utils/inifield.m | 29 + utils/make_rom.m | 45 + utils/morscore.m | 21 + utils/norm/norm_l0.m | 9 + utils/norm/norm_l1.m | 9 + utils/norm/norm_l2.m | 9 + utils/norm/norm_l8.m | 9 + utils/plot/plot_breven.m | 40 + utils/plot/plot_error.m | 51 + utils/plot/plot_offline.m | 42 + utils/plot/plot_online.m | 41 + utils/plot/plot_output.m | 63 + utils/plot/private/legend_print.m | 31 + utils/plot/private/lines12.m | 24 + utils/setfields.m | 14 + utils/sparsegrid.m | 43 + utils/steadystate.m | 132 + utils/thunklog.m | 47 + utils/training/training_impulse.m | 9 + utils/training/training_randombinary.m | 9 + utils/training/training_step.m | 9 + utils/training/training_whitenoise.m | 9 + utils/units/celsius2kelvin.m | 9 + utils/units/kelvin2celsius.m | 9 + 163 files changed, 12071 insertions(+) create mode 100644 AUTHORS create mode 100644 CITATION create mode 100644 CODE create mode 100644 LICENSE create mode 100644 README.md create mode 100644 RUNME.m create mode 100644 SETUP.m create mode 100644 VERSION create mode 100644 models/ode_end.m create mode 100644 models/ode_mid.m create mode 100644 models/private/D_d.m create mode 100644 models/private/D_f.m create mode 100644 models/private/D_g.m create mode 100644 models/private/D_p.m create mode 100644 models/private/D_q.m create mode 100644 morgen.ini create mode 100644 morgen.m create mode 100644 networks/AzeJ07.net create mode 100644 networks/AzeJ07/training.ini create mode 100644 networks/Cha09.net create mode 100644 networks/Cha09/period.ini create mode 100644 networks/Cha09/training.ini create mode 100644 networks/DeWS00.net create mode 100644 networks/DeWS00/training.ini create mode 100644 networks/GasLib11.net create mode 100644 networks/GasLib11/training.ini create mode 100644 networks/GasLib134.net create mode 100644 networks/GasLib134/rand.ini create mode 100644 networks/GasLib134/training.ini create mode 100644 networks/GasLib135.net create mode 100644 networks/GasLib135/training.ini create mode 100644 networks/GasLib24.net create mode 100644 networks/GasLib24/training.ini create mode 100644 networks/GasLib40.net create mode 100644 networks/GasLib40/training.ini create mode 100644 networks/GasLib4197.net create mode 100644 networks/GasLib4197/training.ini create mode 100644 networks/GasLib582.net create mode 100644 networks/GasLib582/training.ini create mode 100644 networks/GruHKetal13.net create mode 100644 networks/GruHKetal13/training.ini create mode 100644 networks/GruJHetal14.net create mode 100644 networks/GruJHetal14/training.ini create mode 100644 networks/Guy67.net create mode 100644 networks/Guy67/training.ini create mode 100644 networks/Kiu94.net create mode 100644 networks/Kiu94/training.ini create mode 100644 networks/MORGEN.net create mode 100644 networks/MORGEN/day.ini create mode 100644 networks/MORGEN/training.ini create mode 100644 networks/PamBD16.net create mode 100644 networks/PamBD16/day.ini create mode 100644 networks/PamBD16/training.ini create mode 100644 networks/RodS18.net create mode 100644 networks/RodS18/training.ini create mode 100644 networks/comptest.net create mode 100644 networks/comptest/training.ini create mode 100644 networks/diamond.net create mode 100644 networks/diamond/day.ini create mode 100644 networks/diamond/training.ini create mode 100644 networks/fork1.net create mode 100644 networks/fork1/training.ini create mode 100644 networks/fork2.net create mode 100644 networks/fork2/training.ini create mode 100644 networks/pipeline.net create mode 100644 networks/pipeline/day.ini create mode 100644 networks/pipeline/training.ini create mode 100644 reductors/bpod_ro.m create mode 100644 reductors/dmd_r.m create mode 100644 reductors/ebg_ro.m create mode 100644 reductors/ebg_wx.m create mode 100644 reductors/ebg_wz.m create mode 100644 reductors/ebt_ro.m create mode 100644 reductors/ebt_wx.m create mode 100644 reductors/ebt_wz.m create mode 100644 reductors/eds_ro.m create mode 100644 reductors/eds_wx.m create mode 100644 reductors/eds_wz.m create mode 100644 reductors/pod_r.m create mode 100644 reductors/private/balgn.m create mode 100644 reductors/private/balro.m create mode 100644 reductors/private/bpod.m create mode 100644 reductors/private/dmd.m create mode 100644 reductors/private/emgr.m create mode 100644 solvers/generic.m create mode 100644 solvers/imex1.m create mode 100644 solvers/imex2.m create mode 100644 solvers/private/initialstate.m create mode 100644 solvers/rk4.m create mode 100644 tests/mor_Cha09.m create mode 100644 tests/mor_GasLib134.m create mode 100644 tests/mor_MORGEN.m create mode 100644 tests/mor_komso.m create mode 100644 tests/mor_pipeline.m create mode 100644 tests/sim_AzeJ07.m create mode 100644 tests/sim_Cha09.m create mode 100644 tests/sim_DeWS00.m create mode 100644 tests/sim_GasLib11.m create mode 100644 tests/sim_GasLib134.m create mode 100644 tests/sim_GasLib135.m create mode 100644 tests/sim_GasLib24.m create mode 100644 tests/sim_GasLib40.m create mode 100644 tests/sim_GasLib4197.m create mode 100644 tests/sim_GasLib582.m create mode 100644 tests/sim_GruHKetal13.m create mode 100644 tests/sim_Guy67.m create mode 100644 tests/sim_Kiu94.m create mode 100644 tests/sim_MORGEN.m create mode 100644 tests/sim_RodS18.m create mode 100644 tests/sim_comptest.m create mode 100644 tests/sim_diamond.m create mode 100644 tests/sim_fork1.m create mode 100644 tests/sim_fork2.m create mode 100644 tests/sim_pipeline.m create mode 100644 tools/cmp_friction.m create mode 100644 tools/json2csv.m create mode 100644 tools/randscen.m create mode 100644 tools/vf2mf.m create mode 100644 tools/xml2csv.xsl create mode 100644 utils/assert_warn.m create mode 100644 utils/cfl.m create mode 100644 utils/circsurf.m create mode 100644 utils/cleanup.m create mode 100644 utils/cmov.m create mode 100644 utils/compressibility/compressibility_aga88.m create mode 100644 utils/compressibility/compressibility_dvgw.m create mode 100644 utils/compressibility/compressibility_ideal.m create mode 100644 utils/compressibility/compressibility_papay.m create mode 100644 utils/constant/constant_gravity.m create mode 100644 utils/format/format_ini.m create mode 100644 utils/format/format_network.m create mode 100644 utils/format/format_scenario.m create mode 100644 utils/format/save_ini.m create mode 100644 utils/friction/friction_altshul.m create mode 100644 utils/friction/friction_hofer.m create mode 100644 utils/friction/friction_igt.m create mode 100644 utils/friction/friction_nikuradse.m create mode 100644 utils/friction/friction_pmt1025.m create mode 100644 utils/friction/friction_schifrinson.m create mode 100644 utils/inifield.m create mode 100644 utils/make_rom.m create mode 100644 utils/morscore.m create mode 100644 utils/norm/norm_l0.m create mode 100644 utils/norm/norm_l1.m create mode 100644 utils/norm/norm_l2.m create mode 100644 utils/norm/norm_l8.m create mode 100644 utils/plot/plot_breven.m create mode 100644 utils/plot/plot_error.m create mode 100644 utils/plot/plot_offline.m create mode 100644 utils/plot/plot_online.m create mode 100644 utils/plot/plot_output.m create mode 100644 utils/plot/private/legend_print.m create mode 100644 utils/plot/private/lines12.m create mode 100644 utils/setfields.m create mode 100644 utils/sparsegrid.m create mode 100644 utils/steadystate.m create mode 100644 utils/thunklog.m create mode 100644 utils/training/training_impulse.m create mode 100644 utils/training/training_randombinary.m create mode 100644 utils/training/training_step.m create mode 100644 utils/training/training_whitenoise.m create mode 100644 utils/units/celsius2kelvin.m create mode 100644 utils/units/kelvin2celsius.m diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..0ef925b --- /dev/null +++ b/AUTHORS @@ -0,0 +1,3 @@ +Christian Himpe (orcid:0000-0003-2194-6754) - Design, Architecture, Coding, Testing, Debugging, Documentation +Sara Grundel (orcid:0000-0002-0209-6566) - Coding, Testing, Debugging + diff --git a/CITATION b/CITATION new file mode 100644 index 0000000..3aa4338 --- /dev/null +++ b/CITATION @@ -0,0 +1,12 @@ +Cite As: + +C. Himpe, S. Grundel, P. Benner (2020). +Model Order Reduction for Gas and Energy Networks. + +BibTeX Entry: + +@MISC{morHimGB20, + author = {C. Himpe, S. Grundel, P. Benner}, + title = {Model Order Reduction for Gas and Energy Networks}, + year = {2020} +} diff --git a/CODE b/CODE new file mode 100644 index 0000000..13666aa --- /dev/null +++ b/CODE @@ -0,0 +1,20 @@ +# code.ini +name: Model Order Reduction for Gas and Energy Networks +shortname: morgen +version: 0.9 +release-date: 2020-11-24 +id: 10.5281/zenodo.? +id-type: doi +author: Christian Himpe, Sara Grundel +orcid: 0000-0003-2194-6754, +topic: Gas Network Simulation +type: Platform +license: BSD-2-Clause +license-type: open-source +repository: github.com/mpcsc/morgen +repository-type: git +language: Matlab +dependencies: Octave >=6.1, Matlab >=2020b +systems: Linux, Windows +website: github.com/mpcsc/morgen +keywords: Model Reduction, Model Order Reduction, Gas Network, Gas Transport, Digital Twin diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8cbc17a --- /dev/null +++ b/LICENSE @@ -0,0 +1,26 @@ +All source code is licensed under the open source BSD-2-Clause license: + +Copyright (c) 2020, Christian Himpe, Sara Grundel + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..4c2f7f0 --- /dev/null +++ b/README.md @@ -0,0 +1,384 @@ +morgen -- Model Order Reduction for Gas and Energy Networks (Version 0.9) +========================================================================= + +**morgen** is an open-source MATLAB and OCTAVE test platform to compare models, +solvers, and model reduction methods for gas networks and other network systems, +based on the isothermal Euler equations, against each other. + +## Development Guidelines + +* NEVER BREAK THE MASTER BRANCH **!** +* Source headers include: project, version, authors, license, summary **!** +* Understand [closures](https://en.wikipedia.org/wiki/Closure_%28computer_programming%29) **!** + +## Compatibility + +* Mathworks [MATLAB](https://matlab.com) >= 2020b +* GNU [Octave](https://octave.org) >= 6.1 (tested on 6.0.92) + +## License + +**morgen** is licensed under the [2-Clause-BSD](https://opensource.org/licenses/BSD-2-Clause) license. + +## Disclaimer + +**morgen** is research software and under development. + +## Citation + +Please cite the **morgen** platform via its companion paper: + +P. Benner, S. Grundel, C. Himpe: +**Moder Order Reduction for Gas and Energy Networks**; +arXiv (math.OC): 2020. + +## Getting Started + +To try **morgen**: + +``` +> SETUP % adds the "tests" folder to the path and lists scripts +> sim_pipeline % runs a pipeline test code +``` + +## Usage + +The **morgen** platform is called via the `morgen` function: + +``` +morgen(network_id,scenario_id,model_id,solver_id,reductor_ids,varargin) +``` + +and has five mandatory arguments: + +* `network_id` (string) The network identifier +* `scenario_id` (string) The scenario identifier +* `model_id` (string) The model identifier +* `solver_id` (string) The solver identifier +* `reductor_ids` (cell) An array of reductor identifiers + +as well as additional variable length argument list: + +* `varargin` (cell) an array of flag identifiers + +all of which are described below: + +* `dt=X` - Override requested time step in configuration with X (in seconds) +* `ys=X` - Force minimum y-scale for error plots with 10^X (default: -16) +* `ord=X` - Override evaluation order in configuration with X (natural number) +* `notest` - Do not test the reduced order models +* `compact` - Display plots all in one figure + +### Network + +A network is described by a (directed) graph, given through an edgelist, +which also specifies its edge type, and their physical dimensions and properties. + +#### Network Topology Rules + +* A network must have at least one supply node! +* All boundary nodes (supply or demand) must connect by exactly one edge! + * Short pipes can be inserted to enforce this. +* The edge from a supply node must be directed away from it! + * Hence: No two supply nodes may be directly connected. +* The edge to a demand node must be directed toward it! + +#### Available + +All available network datasets are listed with the network's number of + + * internal junction nodes (n0), + * supply boundary nodes (nS), and + * demand boundary nodes (nD). + +##### Toy + +* `diamond` - Diamond Network (`n0=8, nS=1, nD=1`) +* `fork1` - Forked Pipeline (`n0=12, nS=1, nD=2`) +* `fork2` - Forked Pipeline (`n0=12, nS=2, nD=1`) +* `comptest` - Compressor Test (`n0=1, nS=1, nD=1`) +* `PamBD16` - Triangle Network (`n0=0, nS=1, nD=2`) + +##### Synthetic + +* `MORGEN` - Small Network (`n0=27, nS=2, nD=4`) +* `AzeJ07` - Small Network (`n0=5, nS=1, nD=2`) +* `GruHKetal13` - Small Network (`n0=11, nS=1, nD=8`) +* `Kiu94` - Small Network (`n0=8, nS=1, nD=14`) +* `GruJHetal14` - Medium Network (`n0=?, nS=4, nD=2`) +* `GasLib11` - Medium Network (`n0=6, nS=3, nD=3`) +* `GasLib24` - Medium Network (`n0=14, nS=3, nD=5`) +* `GasLib40` - Medium Network (`n0=?, nS=3, nD=29`) +* `GasLib135` - Medium Network (`n0=?, nS=3, nD=45`) + +##### Pipelines + +* `pipeline` - Pipeline (`n0=0, nS=1, nD=1`) +* `Cha09` - Pipeline (`n0=0, nS=1, nD=1`) +* `RodS18` - Tree (`n0=6, nS=1, nD=4`) +* `Guy67` - Tree (`n0=8, nS=1, nD=8`) + +##### Realistic + +* `DeWS00` - Belgium (`n0=20, nS=6, nD=9`) +* `GasLib134` - Greece (`n0=?, nS=3, nD=45`) +* `GasLib582` - Germany (`n0=?, nS=31, nD=129`) +* `GasLib4197` - Germany (`n0=?, nS=11, nD=1009`) + +#### File Format + +A network is encoded in a [CSV](https://en.wikipedia.org/wiki/Comma-separated_values) file with the file extension `.net`. +The first line is a comment header with a description of the columns, their meaning, and units. +Each line below the first holds one edge definition with the columns: + +* Edge type (P:pipe, S:shortpipe, C:compressor, V:valve) +* Start node identifier (positive integer) +* End node identifier (positive integer) +* Pipe lengths [m] (positive real) +* Pipe diameters [m] (positive real) +* Pipe height difference [m] (positive real) +* Pipe roughness [m] (positive real) + +Thus, the gas network's directed graph is represented as an edge list. +Note, currently only positive integers can be used as start and end identifiers. + +### Scenario + +A scenario data set describes the boundary values and external inhomogeneties of the gas net. +Transient behaviour of supply and demand functions is represented as step functions in compressed form by only marking changes. +Each network has a training scenario (`training.ini`), which has constant boundary values for reduced order model assembly. + +#### File Format + +A scenario is encoded in an [INI](https://en.wikipedia.org/wiki/INI_file) file, with the extension `.ini`. +Each line holds a key-value pair, for the following keys: + +* `T0` - Average ambient temperature [C] +* `Rs` - Average specific gas constant [J/(kg*K)] +* `tH` - Time horizon [s] +* `vs` - Valve setting [1] (pipe separated list of {0,1}) !TODO +* `cp` - Compressor (output) pressure [bar] (pipe separated list) +* `up` - Supply pressure changes [bar] (pipe separated list of semi-colon separated series) +* `uq` - Demand flow changes [kg/s] (pipe separated list of semi-colon separated series) +* `ut` - Time markers for changes in `up` and `uq` [s] + +### Model + +A model encodes a spatially discrete input-output system of the form: + +``` +E(p) x'(t) = A x(t) + B u(t) + F c_p + f(x(t),u(t),p) + + y(t) = C x(t) +``` + +which consists of an implicit nonlinear ordinary differential equation, +and an (uni-directionally coupled algebraic) output equation. + +#### Interface + +`discrete = model(network,config)` + +#### Arguments + +* `network` (**struct**) Parsed network structure +* `config` (**struct**) Configuration structure + +#### Returns + +* `discrete` (**struct**) (Semi-)Discrete model structure + - `.nP` (**scalar**) Number of pressure states + - `.nQ` (**scalar**) Number of mass-flux states + - `.nPorts` (**scalar**) Number of ports + - `.E` (**handle**) Mass matrix function handle Epz = E(p,z) + - `.A` (**matrix**) System matrix + - `.B` (**matrix**) Input matrix (models boundary nodes) + - `.F` (**matrix**) Source matrix (models the compressor action) + - `.C` (**matrix**) Output matrix (sensors at boundary nodes) + - `.f` (**handle**) Nonlinear vector field x = f(xs,x,u,p,z) + - `.J` (**handle**) Jacobian x = J(xs,x,u,p,z) + +#### Available + +* `ode_mid` - ODE model using the mid-point discretization +* `ode_end` - ODE model using the end-point discretization + +#### Notes + +* The argument `x` in nonlinearity `f` and Jacobian `J` refers to the difference to the steady-state. + This means the `xs+x` yields the actual state. +* Only the components `E`, `f` and `J` are parametrized. + Particularly, `A` and `B` do not depend on the parameter p. + +### Solver + +A solver is a time stepper that simulates a trajectory of a model and a scenario. +The prerequisite steady-state initial value is computed from the scenario's boundary values. + +#### Interface + +`solution = solver(discrete,scenario,config)` + +#### Arguments + +* `discrete` (**struct**) Discrete model structure +* `scenario` (**struct**) Scenario structure +* `config` (**struct**) Configuration structure + +#### Returns + +* `solution` (**struct**) + * `t` (**vector**) Time-steps vector + * `u` (**matrix**) Discrete inputs-times-steps trajectory + * `y` (**matrix**) Discrete outputs-times-steps trajectory + * `steady` (**struct**) Steady-state solution structure + * `xs` (**vector**) Steady-state + * `ys` (**vector**) Steady-state output + * `z0` (**scalar**) Global average compressibility + * `err` (**scalar**) Steady-state error + * `iter1` (**scalar**) Algebraic steady-state iterations + * `iter2` (**scalar**) Differential steady-state iterations + * `runtime` (**scalar**) Transient solver runtime + +#### Available + +* `rk4` - Fourth-order "classic" explicit Runge-Kutta solver +* `generic` - Second-order implicit adaptive `ode23s` Rosenbrock solver +* `imex1` - First-order implicit-explicit solver +* `imex2` - Second-order implicit-explicit Runge-Kutta solver + +### Reductors + +A reductor computes a reduced order discrete model, +aiming to approximate the input-output (boundary-quantity-of-interest) behavior. + +#### Interface + +`ROM = reductor(solver,discrete,scenario,config)` + +#### Arguments + +* `solver` (**handle**) Solver procedure handle +* `discrete` (**struct**) Discrete model structure +* `scenario` (**struct**) Scenario structure +* `config` (**struct**) Configuration structure + +#### Returns + +* `ROM` (handle) Function handle with signature: `discrete = ROM(n)`; + the `ROM` function assembles a `discrete` model structure of order `n`. + +#### Available + +These structured reductors approximate pressure and mass-flux components separately: + +* `pod_r` (Structured Proper Orthogonal Decomposition) +* `eds_ro` (Structured Empirical Dominant Subspaces) +* `eds_wx` (Structured Empirical Cross-Gramian-Based Dominant Subspaces) +* `eds_wz` (Structured Empirical Non-Symmetric-Cross-Gramian-Based Dominant Subspaces) +* `bpod_ro` (Structured Empirical Balanced Proper Orthogonal Decomposition) +* `ebt_ro` (Structured Empirical Balanced Truncation) +* `ebt_wx` (Structured Empirical Cross-Gramian-Based Balanced Truncation) +* `ebt_wz` (Structured Empirical Non-Symmetric-Cross-Gramian-Based Balanced Truncation) +* `ebg_ro` (Structured Empirical Balanced Gains) +* `ebg_wx` (Structured Empirical Cross-Gramian-Based Balanced Gains) +* `ebg_wz` (Structured Empirical Non-Symmetric-Cross-Gramian-Based Balanced Gains) +* `dmd_r` (Structured Dynamic Mode Decomposition Galerkin) + +### Loading Reduced Order Models + +Reduced order models are saved in the `z_roms` folder. +A reduced order model is saved by storing the projectors and encoding the associated: +network, model, and reductor in the filename as follows: + +`network--model--reductor.rom` + +To load a reduced order model provide a filename of a saved reduced order model instead of the reductor identifier. + +## Configuration + +The **morgen** platform assumes a configuration [INI](https://en.wikipedia.org/wiki/INI_file)-file in the base folder named `morgen.ini`, +if not found hard-coded default values are used. + +* `morgen_plots` (**String**) Folder to store plots, default: `z_plots` +* `morgen_roms` (**String**) Folder to store reduced order models, defaut: `z_roms` + +* `network_dt` (**Positive float**) Requested time step width in seconds, default: `30` +* `network_vmax` (**Positive float**) Maximum velocity of gas in meters per second, default: `20` + +* `model_reynolds` (**Positive float**) Estimated Reynolds number, defult: `1000000` +* `model_friction` (**String**) Friction factor model, select from `hofer`, `nikuradse`, `altshul`, `schifrinson`, `pmt1025`, `igt`, default: `hofer` +* `model_compressibility` (**String**) Compressibility factor model, select from: `ideal`, `dvgw`, `aga88`, `papay`, default: `ideal` +* `model_compref` (**String**) Reference for compressibility: `steady`, `normal`, default: `steady` + +* `steady_maxiter` (**Positive Integer**) Number of iterations to refine steady-state estimation, default: `1` +* `steady_maxerror` (**Positive Integer**) +* `steady_Tc` (**Float**) Critical temperature in Celsius, default: `-82.595` +* `steady_pc` (**Float**) Critical pressure in Bar, default: `45.988` +* `steady_pn` (**Float**) Normal pressure in Bar, default: `1.01325` + +* `solver_relax` (**Positive float <1**) IMEX solver relaxation, default: `1.0` + +* `T0_min` (**Float**) Minimum ambient temperature in Celsius, default: `0` +* `T0_max` (**Float**) Maximum ambient temperature in Celsius, default: `25` +* `Rs_min` (**Float**) Minimum specific gas constant in [J/(kg*K)], default: `500.0` +* `Rs_max` (**Float**) Maximum specific gas constant in [J/(kg*K)], default: `1000.0` + +* `mor_excitation` (**String**) Generic training input type, select from: `impulse`, `step`, `random-binary`, `white-noise`, default: `step` +* `mor_max` (**Positive Integer**) Maximum reduced order, default: `100` +* `mor_parametric` (**String**) Use parametric model order reduction, select from `yes`, `no`, default: `yes` +* `mor_pgrid` (**Positive Integer**) Sparse parameter grid refinement level, default: `1` + +* `eval_pnorm` (**Float**) Parameter norm: `1`, `2`, `Inf`, default: `2` +* `eval_skip` (**Positive Integer**) Evaluate every n-th reduced order model, default: `3` +* `eval_max` (**Positive Float**) Maximum reduced order to evaluate, default: `Inf` +* `eval_parametric` (**String**) Parametric reduced order model evaluation: `yes`, `no`, default: `yes` +* `eval_ptest` (**Positive Integer**) Number of test parameters, default: `5` + +## Temperature Units + +All input temperatures, i.e. in: + +* `morgen.ini` configuration +* `XXXXXX.ini` scenario + +and all output temperatures are in **Celsius**. +Internally, all temperatures are in **Kelvin**. + +## Tools + +* `xml2csv.xsl` Converts [gaslib](http://gaslib.zib.de) `.net` XML network definitions into **MORGEN**-compatible `.net` CSV network definitions via XSLTproc +``` +xsltproc -o GasLib-X.csv xml2csv.xsl GasLib-X.xml +``` +* `json2csv.m` Converts `.json` network definitions into **MORGEN**-compatible `.net` CSV network definitions +* `mf2vf.m` Converts m3/h to kg/s +* `randscen.m` Generates a random scenario to a training scenario +* `cmp_friction.m` Compare friction factors + +## Log + +* 0.9 (2020-11-24): [doi:10.5281/zenodo.4288510](https://doi.org/10.5281/zenodo.4288510) + * Initial release + +## Roadmap + +### 1.0 + +* Implement valves as affine linear component +* Fix Octave incompatibilities in `format_network` +* Fix slow `ode23s` in Octave +* Test network **partDE** +* Extend documentation + +### 1.1 + +* TEST network **SciGRID_gas** +* ADD model **port-Hamiltonian ODE** +* ADD reductors + +## Authors + +* Christian Himpe ([orcid:0000-0003-2194-6754](http://orcid.org/0000-0003-2194-6754)) +* Sara Grundel ([orcid:0000-0002-0209-6566](http://orcid.org/0000-0002-0209-6566)) + diff --git a/RUNME.m b/RUNME.m new file mode 100644 index 0000000..35185d6 --- /dev/null +++ b/RUNME.m @@ -0,0 +1,15 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Numerical experiments for morHimGB20. + +fprintf('# Numerical Experiments for:\n\n'); +fprintf(' C. Himpe, S. Grundel, P. Benner: \n'); +fprintf(' "Model Order Reduction for Gas and Energy Networks"; 2020.\n\n'); + +SETUP +mor_Cha09 +mor_MORGEN +mor_GasLib134 + diff --git a/SETUP.m b/SETUP.m new file mode 100644 index 0000000..21740a0 --- /dev/null +++ b/SETUP.m @@ -0,0 +1,43 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Basic setup script. + +fprintf('\n'); +fprintf('# morgen - Model Order Reduction for Gas and Energy Networks\n'); +fprintf('============================================================\n'); +fprintf('\n'); +fprintf('## Cite as:\n\n'); +fprintf(' C. Himpe, S. Grundel, P. Benner: \n'); +fprintf(' "Model Order Reduction for Gas and Energy Networks"; 2020. \n\n'); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% ADD FOLDERS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +fprintf('## Adding Folders ...\n\n'); + +addpath('tests'); +addpath('tools'); + +% List available simulation tests +fprintf(' > Available Simulation Tests:\n\n'); + +for k = dir('tests/sim_*.m') + + fprintf(' %s\n',k.name); +end%for + +fprintf('\n'); + +% List available model reduction tests +fprintf(' > Available Model Reduction Tests:\n\n'); + +for k = dir('tests/mor_*.m') + + fprintf(' %s\n',k.name); +end%for + +fprintf('\n'); + diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..b63ba69 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.9 diff --git a/models/ode_end.m b/models/ode_end.m new file mode 100644 index 0000000..6f1ea36 --- /dev/null +++ b/models/ode_end.m @@ -0,0 +1,109 @@ +function discrete = ode_end(network,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Nonlinear implicit ODE endpoint model. + +%% System Dimensions + + discrete.nP = size(network.PQ,1); % number of pressure states + discrete.nQ = size(network.QP,1); % number of mass-flux states + discrete.nPorts = network.nSupply + network.nDemand; % number of ports + + discrete.refine = blkdiag(network.node_op,network.edge_op); + discrete.np = size(network.node_op,2); + discrete.nq = size(network.edge_op,2); + +%% Helper Variables + + F_k = network.length ./ network.nomLen; % actual-nominal length fraction + + A_R = 0.5 * (network.QP + abs(network.QP)); % partial "entering" incidence matrix + + d_p = D_p(network.diameter, network.nomLen); + d_q = D_q(network.diameter, network.nomLen); + d_g = D_g(network.diameter, network.nomLen, network.incline); + d_f = D_f(network.diameter, config.friction(network.diameter,network.roughness)); + +%% Helper Functions + + p2q = @(p) 1e5 * (A_R * p); + +%% Component Indices + + iP = 1:discrete.nP; + iQ = discrete.nP+1:discrete.nP+discrete.nQ; + +%% System Components + +% Mass matrix +% +% / (A_R D_P^-1 D_d A_R^T) 0 \ +% E = | | +% \ 0 1 / + + discrete.E = @(p,z) [(A_R' * (d_p * D_d(p,z)) * A_R), sparse(discrete.nP, discrete.nQ); ... + sparse(discrete.nQ, discrete.nP), speye(discrete.nQ)]; + +% Linear vector field +% +% / 0 A_pq \ +% A = | | +% \ D_q A_qp 0 / + + discrete.A = [sparse(discrete.nP, discrete.nP), -1e-5 * network.PQ; ... + 1e5 * d_q * network.QP, sparse(discrete.nQ, discrete.nQ)]; + +% Linear input matrix +% +% / 0 -B_D \ +% B = | | +% \ D_q B_S^T 0 / + + discrete.B = [sparse(discrete.nP, network.nSupply), 1e-5 * network.Bd; ... + 1e5 * d_q * network.Bs', sparse(discrete.nQ, network.nDemand)]; + +% Source matrix +% +% / 0 \ +% F = | | +% \ (D_Q F_c) / + + discrete.F = [sparse(discrete.nP, max(network.nCompressor, 1)); ... + 1e5 * d_q * network.Fc']; + +% Output Matrix +% +% / 0 |A_S| \ +% C = | | +% \ |B_D^T| 0 / + + discrete.C = [sparse(network.nSupply, discrete.nP), abs(network.Bs); ... + abs(network.Bd'), sparse(network.nDemand, discrete.nQ)]; + +% Nonlinear vector field +% +% / 0 \ +% f = | | +% \ -(RT * D_F) * (q * |q| / (A_R^T p)) / + + f_local = @(p,q,rtz) [zeros(discrete.nP, 1); ... + -( (d_g ./ rtz) .* p2q(p) ... + + (d_f .* rtz) .* F_k .* (q .* abs(q)) ./ p2q(p))]; + + discrete.f = @(xs,x,u,p,z) discrete.A * xs + f_local(xs(iP) + x(iP),xs(iQ) + x(iQ),p(1) * p(2) * z); + +% Local Jacobian % TODO add gravity derivative +% +% / 0 0 \ +% J = A - | | +% \ df/dp df/dq / + + J_local = @(p,q,rtz) discrete.A - [sparse(discrete.nP,discrete.nP + discrete.nQ); ... + spdiags( (d_f .* rtz) .* F_k .* (q .* abs(q)) ./ p2q(p).^2, 0, discrete.nQ, discrete.nQ) * p2q(1), ... + spdiags( (d_f .* rtz) .* F_k .* (2.0 * abs(q)) ./ p2q(p), 0, discrete.nQ, discrete.nQ) ]; + + discrete.J = @(xs,x,u,p,z) J_local(xs(iP) + x(iP),xs(iQ) + x(iQ),p(1) * p(2) * z); +end + diff --git a/models/ode_mid.m b/models/ode_mid.m new file mode 100644 index 0000000..83bebe4 --- /dev/null +++ b/models/ode_mid.m @@ -0,0 +1,111 @@ +function discrete = ode_mid(network,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Nonlinear implicit ODE midpoint model. + +%% System Dimensions + + discrete.nP = size(network.PQ,1); % number of pressure states + discrete.nQ = size(network.QP,1); % number of mass-flux states + discrete.nPorts = network.nSupply + network.nDemand; % number of ports + + discrete.refine = blkdiag(network.node_op,network.edge_op); + discrete.np = size(network.node_op,2); + discrete.nq = size(network.edge_op,2); + +%% Helper Variables + + F_k = network.length ./ network.nomLen; % actual-nominal length fraction + + absApq = abs(network.PQ); + absAqp = abs(network.QP); + absBqs = abs(network.Bs)'; + + d_p = D_p(network.diameter, network.nomLen); + d_q = D_q(network.diameter, network.nomLen); + d_g = D_g(network.diameter, network.nomLen, network.incline); + d_f = D_f(network.diameter, config.friction(network.diameter,network.roughness)); + +%% Helper Functions + + p2q = @(p,us) 1e5 * 0.5 * ( (absAqp * p) + (absBqs * us) ); + +%% Component Indices + + iP = 1:discrete.nP; + iQ = discrete.nP+1:discrete.nP+discrete.nQ; + iS = 1:network.nSupply; + +%% System Components + +% +% / (|A_pq| 1/2 D_P^-1 D_d |A_qp|) 0 \ +% E = | | +% \ 0 1 / + + discrete.E = @(p,z) [absApq * (0.25 * d_p * D_d(p,z)) * absAqp, sparse(discrete.nP, discrete.nQ); ... + sparse(discrete.nQ, discrete.nP), speye(discrete.nQ)]; + +% System Matrix +% +% / 0 -A_pq \ +% A = | | +% \ D_q A_qp 0 / + + discrete.A = [sparse(discrete.nP, discrete.nP), -1e-5 * network.PQ; ... + 1e5 * d_q * network.QP, sparse(discrete.nQ, discrete.nQ)]; + +% Input matrix +% +% / 0 B_d \ +% B = | | +% \ D_q B_s^T 0 / + + discrete.B = [sparse(discrete.nP, network.nSupply), 1e-5 * network.Bd; ... + 1e5 * d_q * network.Bs', sparse(discrete.nQ, network.nDemand)]; + +% Source matrix +% +% / 0 \ +% F = | | +% \ D_q F_c / + + discrete.F = [sparse(discrete.nP, max(network.nCompressor, 1)); ... + 1e5 * d_q * network.Fc']; + +% Output Matrix +% +% / 0 |B_s| \ +% C = | | +% \ |B_d^T| 0 / + + discrete.C = [sparse(network.nSupply, discrete.nP), abs(network.Bs); ... + abs(network.Bd'), sparse(network.nDemand, discrete.nQ)]; + +% Nonlinear vector field +% +% / 0 \ +% f = | | +% \ D_F * ( q * |q| ) / ( |A_0^T| * p + |A_S^T| * u_S ) / + + f_local = @(p,q,us,rtz) [zeros(discrete.nP, 1); ... + -( (d_g ./ rtz) .* p2q(p,us) ... + + (d_f .* rtz) .* F_k .* ((q .* abs(q)) ./ p2q(p,us)))]; + + discrete.f = @(xs,x,u,p,z) discrete.A * xs + f_local(xs(iP) + x(iP),xs(iQ) + x(iQ),u(iS),p(1) * p(2) * z); + +% Local Jacobian % TODO add gravity derivative +% +% / 0 0 \ +% J = A - | | +% \ df/dp df/dq / + + J_local = @(p,q,us,rtz) discrete.A - [sparse(discrete.nP,discrete.nP + discrete.nQ); ... + spdiags( (d_f .* rtz) .* F_k .* (q .* abs(q)) ./ p2q(p,us).^2, 0, discrete.nQ, discrete.nQ) * p2q(1,sparse(network.nSupply,discrete.nP)), ... + spdiags( (d_f .* rtz) .* F_k .* (2.0 * abs(q)) ./ p2q(p,us), 0, discrete.nQ, discrete.nQ) ]; + + discrete.J = @(xs,x,u,p,z) J_local(xs(iP) + x(iP),xs(iQ) + x(iQ),u(iS),p(1) * p(2) * z); +end + diff --git a/models/private/D_d.m b/models/private/D_d.m new file mode 100644 index 0000000..75c1697 --- /dev/null +++ b/models/private/D_d.m @@ -0,0 +1,9 @@ +function r = D_d(p,z) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Model helper. + + r = 1.0 ./ (p(1) * p(2) * z); +end diff --git a/models/private/D_f.m b/models/private/D_f.m new file mode 100644 index 0000000..2f1cba9 --- /dev/null +++ b/models/private/D_f.m @@ -0,0 +1,9 @@ +function r = D_f(D_k, lambda_k) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Model helper. + + r = lambda_k ./ (2.0 * D_k .* circsurf(D_k)); +end diff --git a/models/private/D_g.m b/models/private/D_g.m new file mode 100644 index 0000000..11ff7a8 --- /dev/null +++ b/models/private/D_g.m @@ -0,0 +1,9 @@ +function r = D_g(D_k, L_k, h_k) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Model helper. + + r = constant_gravity() * circsurf(D_k) .* h_k ./ L_k; +end diff --git a/models/private/D_p.m b/models/private/D_p.m new file mode 100644 index 0000000..1647312 --- /dev/null +++ b/models/private/D_p.m @@ -0,0 +1,9 @@ +function r = D_p(D_k, L_k) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Model helper. + + r = spdiags(-circsurf(D_k) .* L_k, 0, numel(D_k), numel(D_k)); +end diff --git a/models/private/D_q.m b/models/private/D_q.m new file mode 100644 index 0000000..432cbf1 --- /dev/null +++ b/models/private/D_q.m @@ -0,0 +1,9 @@ +function r = D_q(D_k, L_k) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Model helper. + + r = spdiags(-circsurf(D_k) ./ L_k, 0, numel(D_k), numel(D_k)); +end diff --git a/morgen.ini b/morgen.ini new file mode 100644 index 0000000..9ce1b0f --- /dev/null +++ b/morgen.ini @@ -0,0 +1,35 @@ +morgen_plots = z_plots # Path to plot folder: **z_plots** +morgen_roms = z_roms # Path to reduced order models folder: **z_roms** + +network_dt = 60.0 # Requested solver time-step [s]: **60** +network_vmax = 20.0 # Maximum gas velocity [m/s]: **20** + +model_reynolds = 1000000.0 # Estimated Reynolds number [1]: 1000000 +model_friction = schifrinson # Friction factor model: **hofer** , nikuradse , altshul , schifrinson , pmt1025 , igt +model_compressibility = aga88 # Compressibility factor model: **ideal** , dvgw , aga88 , papay +model_compref = steady # Reference for compressibility: **steady** , normal + +steady_maxiter = 1000 # Number of iterations to refine steady-state estimation: **500** (r >= 1) +steady_maxerror = 1e-6 # Maximal error of refined steady-state: **1e-6** (=10^-6) +steady_Tc = -82.595 # Critical temperature [C]: -82.595 +steady_pc = 45.988 # Critical pressure [bar]: 45.988 +steady_pn = 1.01325 # Normal pressure [bar]: 1.01325 + +solver_relax = 1.0 # Solver relaxation: **1.0** (0 > r >= 1.0) + +T0_min = 0.0 # Minimum ambient temperature [C]: 0 +T0_max = 15.0 # Maximum ambient temperature [C]: 15.0 +Rs_min = 500.0 # Minimum specific gas constant [J/(kg*K)]: 500.0 (Natural gas: 518.3) +Rs_max = 600.0 # Maximum specific gas constant [J/(kg*K)]: 900.0 (Hydrogen: 4124.2) + +mor_excitation = step # Generic training input type: **step** , impulse , random-binary , white-noise +mor_max = 250 # Maximum reduced order: **100** (r > 2) +mor_parametric = yes # Parametric model order reduction: **yes** , no +mor_pgrid = 1 # Sparse parameter grid level: **1** (1 < r < 4) + +eval_pnorm = 2 # Parameter norm: 1 , **2** , Inf +eval_skip = 3 # Evaluate every n-th reduced order model: **3** (r >= 1) +eval_max = 250 # Maximum reduced order to evaluate : **Inf** (r >= 2, use Inf for maximum possible) +eval_parametric = yes # Parametric reduced order model evaluation: **yes**, no +eval_ptest = 5 # Number of test parameters: **5** (r >= 1) + diff --git a/morgen.m b/morgen.m new file mode 100644 index 0000000..d0d8d72 --- /dev/null +++ b/morgen.m @@ -0,0 +1,601 @@ +function R = morgen(network_id,scenario_id,model_id,solver_id,reductor_ids,varargin) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Model reduction test platform and task master. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% INIT MORGEN +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + % Version constant + MORGEN_VERSION = 0.9; + + % Print welcome message + fprintf('\n'); + fprintf('# morgen - Model Order Reduction for Gas and Energy Networks\n'); + fprintf('============================================================\n'); + fprintf('\n'); + + % Add paths + addpath(genpath('utils')); + addpath('models'); + addpath('solvers'); + addpath('reductors'); + + % On any exit, call cleanup function + ocu = onCleanup(@cleanup); + + % Report version + fprintf(' * Version: _ _ _ _ _ _ _ _ _ _ _ _ _ _ %g \n',MORGEN_VERSION); + + % Report environment + if not(exist('OCTAVE_VERSION','builtin')) + + vec = @(m) m(:); + fprintf(' * Environment: _ _ _ _ _ _ _ _ _ _ _ _ MATLAB \n'); + else + + % Octave has "vec" built-in + fprintf(' * Environment: _ _ _ _ _ _ _ _ _ _ _ _ OCTAVE \n'); + end%if + + % Prepare return value + R = []; + + fprintf('\n'); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% SETUP ARGUMENTS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + fprintf('## Selected Ensemble:\n\n'); + + % Check if "network_id" argument leads to a network file + assert(isfile(['networks/',network_id,'.net']), ... + ['morgen: unknown network: ',network_id]); + network_path = ['networks/',network_id,'.net']; + fprintf(' * Network:_ _ _ _ _ _ _ _ _ _ _ _ _ _ %s \n',network_id); + + % Check if "scenario_id" argument leads to a scenario file + assert(isfile(['networks/',network_id,'/',scenario_id,'.ini']), ... + ['morgen: unknown scenario: ',scenario_id]); + scenario_path = ['networks/',network_id,'/',scenario_id,'.ini']; + fprintf(' * Scenario: _ _ _ _ _ _ _ _ _ _ _ _ _ %s \n',scenario_id); + + % Check if "model_id" argument refers to a supported model + assert(any(strcmpi({vec(dir('models/')).name}, ... + [model_id,'.m'])),['morgen: unknown model: ',model_id]); + %model_list = + model = str2func(model_id); + fprintf(' * Discretization: _ _ _ _ _ _ _ _ _ _ %s \n',model_id); + + % Check if "solver_id" argument refers to a supported solver + assert(any(strcmpi({vec(dir('solvers/')).name}, ... + [solver_id,'.m'])),['morgen: unknown solver: ',solver_id]); + solver = str2func(solver_id); + fprintf(' * Time Stepper: _ _ _ _ _ _ _ _ _ _ _ %s \n',solver_id); + + % Check if "reductor_ids" argument refers to a list of supported reductors + if exist('reductor_ids','var') && not(isempty(reductor_ids)) + + reductor_func_mask = cellfun(@(c) any(strcmpi({vec(dir('reductors/')).name},[c,'.m'])),reductor_ids); + reductor_file_mask = cellfun(@(c) strcmp('.rom',c(end-3:end)),reductor_ids); + + assert(all(reductor_func_mask + reductor_file_mask), ['morgen: unknown reductor(s): ', reductor_ids{:}]); + reductor = cell(numel(reductor_ids),1); + reductor(reductor_func_mask) = cellfun(@(c) str2func(c),reductor_ids(reductor_func_mask),'UniformOutput',false); + reductor(reductor_file_mask) = reductor_ids(reductor_file_mask); + fprintf(' * Reductor(s):_ _ _ _ _ _ _ _ _ _ _ _ '); + cellfun(@(c) fprintf('%s \n ',c),reductor_ids,'UniformOutput',false); + if numel(reductor_ids) == 0, fprintf('\n'); end%if + end%if + + fprintf('\n'); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% SETUP CONFIGURATION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + fprintf('## Reading Configuration ... '); + + % Read configuration file + try + + ini = format_ini('morgen.ini'); + catch + + ini = []; + end%try + + % Create "plots" folder if not exists + plot_path = inifield(ini,'morgen_plots','z_plots'); + if not(exist(plot_path, 'dir')), mkdir(plot_path); end%if + + % Create "roms" folder if not exists + rom_path = inifield(ini,'morgen_roms','z_roms'); + if not(exist(rom_path, 'dir')), mkdir(rom_path); end%if + + fprintf('Done.\n\n'); + + if isempty(ini) + + fprintf(' < Configuration:_ _ _ _ _ _ _ _ _ _ _ hard-coded \n'); + else + + fprintf(' < Configuration:_ _ _ _ _ _ _ _ _ _ _ morgen.ini \n'); + end%if + + fprintf('\n'); + + fprintf(' > Plot path:_ _ _ _ _ _ _ _ _ _ _ _ _ %s \n',plot_path); + fprintf(' > ROM path: _ _ _ _ _ _ _ _ _ _ _ _ _ %s \n',rom_path); + + fprintf('\n'); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% SETUP NETWORK GRAPH +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + fprintf('## Loading Topology ... '); + + config.network.dt = max(sqrt(eps),inifield(ini,'network_dt',180)); + + if not(isempty(varargin)) && any(strncmp(varargin,'dt=',3)) + + config.network.dt = sscanf(varargin{strncmp(varargin,'dt=',3)},'dt=%g'); + end%if + + config.network.vmax = max(sqrt(eps),inifield(ini,'network_vmax',20)); + + network = format_network(network_path,config.network); + + fprintf('Done.\n\n'); + + fprintf(' < Time step [s]:_ _ _ _ _ _ _ _ _ _ _ %g \n',config.network.dt); + fprintf(' < Maximum gas velocity [m/s]: _ _ _ _ %g \n',config.network.vmax); + + fprintf('\n'); + + fprintf(' > Homogenized pipe length [m]:_ _ _ _ %g \n',network.nomLen); + fprintf(' > Associated CFL constant:_ _ _ _ _ _ %.2g \n',cfl(network.nomLen,config.network.dt,config.network.vmax)); + fprintf(' > Number of refined edges:_ _ _ _ _ _ %u \n',network.nEdges); + fprintf(' > Number of refined internal nodes: _ %u \n',network.nInternal); + fprintf(' > Number of supply nodes: _ _ _ _ _ _ %u \n',network.nSupply); + fprintf(' > Number of demand nodes: _ _ _ _ _ _ %u \n',network.nDemand); + fprintf(' > Number of compressor edges: _ _ _ _ %u \n',network.nCompressor); + + fprintf('\n'); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% SETUP DISCRETE MODEL +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + fprintf('## Initializing Model ... '); + + config.model.reynolds = inifield(ini,'model_reynolds',1e6); + config.model.friction_name = inifield(ini,'model_friction','hofer',{'hofer','nikuradse','altshul','schifrinson','pmt1025','igt'}); + config.model.friction_fun = str2func(['friction_',config.model.friction_name]); + config.model.friction = @(D,k) config.model.friction_fun(config.model.reynolds,D,k); + + discrete = model(network,config.model); + + fprintf('Done.\n\n'); + + fprintf(' < Approx. Reynolds number [1]:_ _ _ _ %u \n',config.model.reynolds); + fprintf(' < Friction model: _ _ _ _ _ _ _ _ _ _ %s \n',config.model.friction_name); + + fprintf('\n'); + + fprintf(' > Number of total states: _ _ _ _ _ _ %u \n',discrete.nP + discrete.nQ); + fprintf(' > Number of pressure states:_ _ _ _ _ %u \n',discrete.nP); + fprintf(' > Number of mass-flux states: _ _ _ _ %u \n',discrete.nQ); + fprintf(' > Number of boundary ports: _ _ _ _ _ %u \n',discrete.nPorts); + + fprintf('\n'); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% SETUP STEADY-STATE +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + fprintf('## Initializing Steady-State ... '); + + config.steady.dt = config.network.dt; + config.steady.maxiter = max(1,round(inifield(ini,'steady_maxiter',1))); + config.steady.maxerror = inifield(ini,'steady_maxerror',sqrt(eps)); + config.steady.Tc = celsius2kelvin(inifield(ini,'steady_Tc',-82.595)); + config.steady.pc = inifield(ini,'steady_pc',45.988); + config.steady.pn = inifield(ini,'steady_pn',101.325); + + config.steady.compressibility_name = inifield(ini,'model_compressibility','ideal',{'ideal','dvgw','aga88','papay'}); + config.steady.compressibility_ref = inifield(ini,'model_compref','steady',{'steady','normal'}); + config.steady.compressibility_fun = str2func(['compressibility_',config.steady.compressibility_name]); + + if isequal(config.steady.compressibility_ref,'normal') + + config.steady.compressibility = @(p,T) config.steady.compressibility_fun(config.steady.pn,T,config.steady.pc,config.steady.Tc); + else + + config.steady.compressibility = @(p,T) config.steady.compressibility_fun(p,T,config.steady.pc,config.steady.Tc); + end%if + + fprintf('Done.\n\n'); + + fprintf(' < Maximum steady state error: _ _ _ _ %g \n',config.steady.maxerror); + fprintf(' < Maximum steady state iterations:_ _ %u \n',config.steady.maxiter); + fprintf(' < Critical temperature [C]: _ _ _ _ _ %g \n',kelvin2celsius(config.steady.Tc)); + fprintf(' < Critical pressure [bar]:_ _ _ _ _ _ %g \n',config.steady.pc); + fprintf(' < Normal pressure [bar]:_ _ _ _ _ _ _ %g \n',config.steady.pn); + fprintf(' < Compressibility model:_ _ _ _ _ _ _ %s \n',config.steady.compressibility_name); + + fprintf('\n'); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% SETUP SOLVER +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + fprintf('## Initializing Solver ... '); + + config.solver.dt = config.network.dt; + config.solver.relax = min(1.0,max(0,inifield(ini,'solver_relax',1))); + config.solver.steadystate = @(s) steadystate(discrete,s,config.steady); + + fprintf('Done.\n\n'); + + fprintf(' < Solver relaxation:_ _ _ _ _ _ _ _ _ %g \n', config.solver.relax); + + fprintf('\n'); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% SETUP SCENARIO +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + fprintf('## Loading Scenario ... '); + + scenario = format_scenario(scenario_path,network); + + fprintf('Done.\n\n'); + + fprintf(' > Ambient temperature [C]:_ _ _ _ _ _ %.2g \n',kelvin2celsius(scenario.T0)); + fprintf(' > Specific gas constant [J/(kg K)]: _ %g \n',scenario.Rs); + fprintf(' > Time horizon [s]: _ _ _ _ _ _ _ _ _ %g \n',scenario.Tf); + + fprintf('\n'); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% MODEL REDUCTION OFFLINE PHASE +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + if exist('reductor_ids','var') && not(isempty(reductor_ids)) + + fprintf('## Computing Reduced Order Models ... \n\n'); + + config.mor.rom_max = ceil(0.5*inifield(ini,'mor_max',100)); + + if not(isempty(varargin)) && any(strncmp(varargin,'ord=',4)) + + config.mor.rom_max = ceil(0.5*sscanf(varargin{strncmp(varargin,'ord=',4)},'ord=%g')); + end%if + + config.mor.excitation_name = inifield(ini,'mor_excitation','step',{'impulse','step','random-binary','white-noise'}); + config.mor.parametric = inifield(ini,'mor_parametric','yes',{'no','yes'}); + config.mor.solver = config.solver; + + switch config.mor.excitation_name + + case 'step' + config.mor.excitation = @training_step; + + case 'impulse' + config.mor.excitation = @(t) training_impulse(t,config.network.dt); + + case 'random-binary' + rand('seed',1009); + config.mor.excitation = @training_randombinary; + + case 'white-noise' + randn('seed',1009); + config.mor.excitation = @training_whitenoise; + end%switch + + fprintf(' < Training excitation:_ _ _ _ _ _ _ _ %s \n',config.mor.excitation_name); + fprintf(' < Maximum reduced order:_ _ _ _ _ _ _ %u \n',2.0 * config.mor.rom_max); + fprintf(' < Parametric reduction? _ _ _ _ _ _ _ %s \n',config.mor.parametric); + + % Configuration only relevant for parametric model order reduction + if isequal(config.mor.parametric,'yes') + + config.mor.T0_min = celsius2kelvin(inifield(ini,'T0_min', 0.0)); + config.mor.T0_max = celsius2kelvin(inifield(ini,'T0_max',25.0)); + config.mor.Rs_min = inifield(ini,'Rs_min',500.0); + config.mor.Rs_max = inifield(ini,'Rs_max',900.0); + config.mor.pgrid = inifield(ini,'mor_pgrid',0); + + fprintf(' < Temperature range [C]:_ _ _ _ _ _ _ [%g,%g] \n',kelvin2celsius(config.mor.T0_min),kelvin2celsius(config.mor.T0_max)); + fprintf(' < Gas constant range [J/(kg K)]:_ _ _ [%g,%g] \n',config.mor.Rs_min,config.mor.Rs_max); + fprintf(' < Parameter Grid Level: _ _ _ _ _ _ _ %u \n',config.mor.pgrid); + + config.mor.samples = sparsegrid([config.mor.T0_min;config.mor.Rs_min],[config.mor.T0_max;config.mor.Rs_max],config.mor.pgrid); + else + + config.mor.samples = [scenario.T0;scenario.Rs]; + end%if + + fprintf('\n'); + + nReductors = numel(reductor_ids); + + labels = cell(nReductors,1); + ROM = cell(nReductors,1); + offline = cell(nReductors,1); + + % Compute (or load) reduced order model (ROM) for each selected reductor + for k = 1:nReductors + + fprintf('### '); + + % Compute and save ROM + if isa(reductor{k},'function_handle') + + clear(func2str(solver)); + thunklog(100) + off = tic; + ROM{k} = reductor{k}(solver,discrete,scenario,config.mor); + offline{k} = toc(off); + thunklog(0) + + fprintf('\n'); + fprintf(' > Offline Time [s]: _ _ _ _ _ _ _ _ _ %d\n',offline{k}); + + spaces = ROM{k}('save'); + name = ROM{k}('name'); + off = offline{k}; + save([rom_path,'/',network_id,'--',model_id,'--',solver_id,'--',reductor_ids{k},'.rom'],'spaces','name','off','-v7'); + + fprintf(' > Saved as: _ _ _ _ _ _ _ _ _ _ _ _ _ %s \n\n',[network_id,'--',model_id,'--',solver_id,'--',reductor_ids{k},'.rom']); + + % Load ROM + else + + rom_id = strsplit(reductor_ids{k},'--'); + + if strcmp(network_id,rom_id{1}) && strcmp(model_id,rom_id{2}) + + load([rom_path,'/',reductor_ids{k}],'-mat'); + + ROM{k} = @(n) make_rom(name,discrete,spaces,n); + offline{k} = off; + fprintf('%s\n\n',ROM{k}('name')); + fprintf(' > Loaded from file:_ _ _ _ _ _ _ _ _ %s\n\n',reductor_ids{k}); + else + + fprintf(' > Incompatible ROM: %s\n\n',reductor_ids{k}); % TODO emit error! + end%if + end%if + + labels{k} = name; + end%for + + if not(isempty(varargin)) && any(strcmp(varargin,'notest')) + + R = struct('offline',offline, ... + 'method',labels); + + fprintf(' > Orderly exit:_ _ _ _ _ _ _ _ _ _ _ _ '); + + return; + end%if + end%if + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% FULL ORDER SIMULATION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + fprintf('## Computing Reference Solution(s) ... \n\n'); + + config.eval.parametric = inifield(ini,'eval_parametric','yes',{'no','yes'}); + + % Sample test parameters + if strcmp(config.eval.parametric,'yes') && exist('reductor_ids','var') && not(isempty(reductor_ids)) + + prom = 1; + config.eval.ptest = inifield(ini,'eval_ptest',1); + + nSamples = config.eval.ptest; + + config.eval.T0_min = celsius2kelvin(inifield(ini,'T0_min', 5.0)); + config.eval.T0_max = celsius2kelvin(inifield(ini,'T0_max',15.0)); + config.eval.Rs_min = inifield(ini,'Rs_min',500.0); + config.eval.Rs_max = inifield(ini,'Rs_max',900.0); + + t0_samples = [config.eval.T0_min + abs(config.eval.T0_max - config.eval.T0_min) * rand(1,nSamples), scenario.T0]; ... + rs_samples = [config.eval.Rs_min + abs(config.eval.Rs_max - config.eval.Rs_min) * rand(1,nSamples), scenario.Rs]; + + fprintf(' < Parametric evaluation?_ _ _ _ _ _ _ %s \n',config.eval.parametric); + fprintf(' < Number of parameter samples:_ _ _ _ %u \n',config.eval.ptest); + else + + prom = 0; + + nSamples = 1; + t0_samples = scenario.T0; + rs_samples = scenario.Rs; + + fprintf(' < Parametric evaluation?_ _ _ _ _ _ _ no \n'); + end%if + + fprintf('\n '); + + n1 = cell(nSamples + prom,1); + n2 = cell(nSamples + prom,1); + n8 = cell(nSamples + prom,1); + n0 = cell(nSamples + prom,1); + + ref_output = cell(nSamples + prom,1); + + pscenario = cell(nSamples + prom,1); + + % Simulate scenario(s) + for p = 1:(nSamples + prom) % For each test parameter (and the reference parameter) ... + + pscenario{p} = setfields(scenario,'T0',t0_samples(p),'Rs',rs_samples(p)); + + clear(func2str(solver)); + ref_output{p} = solver(discrete,pscenario{p},config.solver); + + n1{p} = norm_l1(ref_output{p}.y,config.network.dt); + n2{p} = norm_l2(ref_output{p}.y,config.network.dt); + n8{p} = norm_l8(ref_output{p}.y,config.network.dt); + n0{p} = norm_l0(ref_output{p}.y,config.network.dt); + end%for + + fprintf('\n\n'); + + fprintf(' > Steady state iterations:_ _ _ _ _ _ %u \n', ceil(mean(cellfun(@(s) s.steady.iter1,ref_output)))); + fprintf(' > Steady state extra steps: _ _ _ _ _ %u \n', ceil(mean(cellfun(@(s) s.steady.iter2,ref_output)))); + fprintf(' > Steady state error: _ _ _ _ _ _ _ _ %g \n', mean(cellfun(@(s) s.steady.err,ref_output))); + fprintf(' > Mean compressibility: _ _ _ _ _ _ _ %g \n', mean(cellfun(@(s) s.steady.z0,ref_output))); + fprintf(' > Integration time [s]: _ _ _ _ _ _ _ %g \n', mean(cellfun(@(s) s.runtime,ref_output))); + + % Plot input-output of reference solution + compact = not(isempty(varargin)) && any(strcmp(varargin,'compact')); + plot_output(plot_path,[network_id,'--',scenario_id,'--',model_id,'--',solver_id],ref_output{end},network,compact); + + fprintf('\n') + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% REDUCED ORDER MODEL EVALUATION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + if exist('reductor_ids','var') && not(isempty(reductor_ids)) + + fprintf('## Evaluating Reduced Order Models ... \n\n'); + + config.eval.skip = max(round(inifield(ini,'eval_skip',2)),2); + config.eval.max = ceil(0.5 * min(inifield(ini,'eval_max',Inf))); + + if not(isempty(varargin)) && any(strncmp(varargin,'ord=',4)) + + config.eval.max = ceil(0.5 * sscanf(varargin{strncmp(varargin,'ord=',4)},'ord=%g')); + end%if + + config.eval.pnorm = inifield(ini,'eval_pnorm',2,{1,2,Inf}); + + fprintf(' < Test every n-th ROM:_ _ _ _ _ _ _ _ %u \n',config.eval.skip); + fprintf(' < Maximum reduced order:_ _ _ _ _ _ _ %u \n',2.0 * min([config.eval.max,config.mor.rom_max])); + fprintf(' < Parameter norm: _ _ _ _ _ _ _ _ _ _ %u \n',config.eval.pnorm); + + fprintf('\n'); + + redOrder = 1:config.eval.skip:min([config.eval.max,config.mor.rom_max,discrete.nP,discrete.nQ]); + redOrders = numel(redOrder); + + online = cell(nReductors,1); + breven = cell(nReductors,1); + + l1 = cell(nReductors,1); + l2 = cell(nReductors,1); + l8 = cell(nReductors,1); + l0 = cell(nReductors,1); + + s1 = cell(nReductors,1); + s2 = cell(nReductors,1); + s8 = cell(nReductors,1); + s0 = cell(nReductors,1); + + for k = 1:nReductors % For each reductor ... + + fprintf('### %s\n\n',ROM{k}('name')); + + % Preallocate error and timing storage + online{k} = NaN(nSamples,redOrders); + breven{k} = NaN(nSamples,redOrders); + + l1{k} = NaN(nSamples,redOrders); + l2{k} = NaN(nSamples,redOrders); + l8{k} = NaN(nSamples,redOrders); + l0{k} = NaN(nSamples,redOrders); + + thunklog(redOrders) + for p = 1:nSamples % For each test parameter ... + + for l = 1:redOrders % For each reduced order + + red_output = solver(ROM{k}(redOrder(l)),pscenario{p},config.solver); + online{k}(p,l) = red_output.runtime ./ ref_output{p}.runtime; + breven{k}(p,l) = offline{k} ./ (ref_output{p}.runtime - red_output.runtime); + + l1{k}(p,l) = norm_l1(ref_output{p}.y - red_output.y,config.network.dt) / n1{p}; + l2{k}(p,l) = norm_l2(ref_output{p}.y - red_output.y,config.network.dt) / n2{p}; + l8{k}(p,l) = norm_l8(ref_output{p}.y - red_output.y,config.network.dt) / n8{p}; + l0{k}(p,l) = norm_l0(ref_output{p}.y - red_output.y,config.network.dt) / n0{p}; + end%for + end%for + thunklog(0) + + % Replace NaNs by worst case relative error + l1{k}(isnan(l1{k}) | (l1{k} > 1.0)) = 1.0; + l2{k}(isnan(l2{k}) | (l2{k} > 1.0)) = 1.0; + l8{k}(isnan(l8{k}) | (l8{k} > 1.0)) = 1.0; + l0{k}(isnan(l0{k}) | (l0{k} > 1.0)) = 1.0; + + % Average over parameter samples + l1{k} = vecnorm(l1{k},config.eval.pnorm,1); + l2{k} = vecnorm(l2{k},config.eval.pnorm,1); + l8{k} = vecnorm(l8{k},config.eval.pnorm,1); + l0{k} = vecnorm(l0{k},config.eval.pnorm,1); + + % Compute MORscores + s1{k} = morscore(redOrder,l1{k}); + s2{k} = morscore(redOrder,l2{k}); + s8{k} = morscore(redOrder,l8{k}); + s0{k} = morscore(redOrder,l0{k}); + + online{k} = mean(online{k},1); + breven{k} = mean(breven{k},1); + + fprintf('\n\n'); + end%for + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% VISUALIZE RESULTS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + effOrder = 2 * redOrder; + + if not(isempty(varargin)) && any(strncmp(varargin,'ys=',3)) + + yscale = sscanf(varargin{strncmp(varargin,'ys=',3)},'ys=%g'); + else + + yscale = -16; + end%if + + plot_error(plot_path,[network_id,'--',scenario_id,'--',model_id,'--',solver_id],'L_0',effOrder,l0,labels,s0,compact,yscale); + plot_error(plot_path,[network_id,'--',scenario_id,'--',model_id,'--',solver_id],'L_1',effOrder,l1,labels,s1,compact,yscale); + plot_error(plot_path,[network_id,'--',scenario_id,'--',model_id,'--',solver_id],'L_8',effOrder,l8,labels,s8,compact,yscale); + plot_error(plot_path,[network_id,'--',scenario_id,'--',model_id,'--',solver_id],'L_2',effOrder,l2,labels,s2,compact,yscale); + + fprintf(' > L2 MORscores (%s--%s--%s--%s):\n\n',network_id,scenario_id,model_id,solver_id); + maxlen = max(cellfun(@numel,labels)); + cellfun(@(l,s) fprintf([' %s:',repmat(' ',[1,maxlen-numel(l)]),' %.2f \n'],l,s),labels,s2); + save_ini([plot_path,'/',network_id,'--',scenario_id,'--',model_id,'--',solver_id,'_morscore_l2.ini'],labels,s2); + fprintf('\n'); + + plot_offline(plot_path,[network_id,'--',model_id,'--',solver_id],offline,labels,compact); + plot_online(plot_path,[network_id,'--',scenario_id,'--',model_id,'--',solver_id],effOrder,online,labels,compact); + plot_breven(plot_path,[network_id,'--',scenario_id,'--',model_id,'--',solver_id],effOrder,breven,labels,compact); + + R = struct('orders',redOrders, ... + 'l0error',l0, 'l0score',s0, ... + 'l1error',l1, 'l1score',s1, ... + 'l2error',l2, 'l2score',s2, ... + 'l8error',l8, 'l8score',s8, ... + 'online',online, 'breven',breven, ... + 'method',labels); + end%if + + fprintf(' > Orderly exit:_ _ _ _ _ _ _ _ _ _ _ _ '); +end + diff --git a/networks/AzeJ07.net b/networks/AzeJ07.net new file mode 100644 index 0000000..aa6bfa4 --- /dev/null +++ b/networks/AzeJ07.net @@ -0,0 +1,9 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,1,2,1000,1,0,0.0001 +P,2,3,1000,1,0,0.0001 +C,3,4 +P,4,5,1000,1,0,0.0001 +P,5,6,1000,1,0,0.0001 +P,5,7,1000,1,0,0.0001 +P,2,7,1000,1,0,0.0001 +P,7,8,1,1,0,0.0001 diff --git a/networks/AzeJ07/training.ini b/networks/AzeJ07/training.ini new file mode 100644 index 0000000..4131ce2 --- /dev/null +++ b/networks/AzeJ07/training.ini @@ -0,0 +1,7 @@ +T0 = 15.0 +Rs = 530.0 +tH = 3600.0 +cp = 30.0 +up = 30.0 +uq = 20.0;20.0 +ut = 0 diff --git a/networks/Cha09.net b/networks/Cha09.net new file mode 100644 index 0000000..c23ebe0 --- /dev/null +++ b/networks/Cha09.net @@ -0,0 +1,2 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,1,2,363000.0,1.422,0,0.00001 diff --git a/networks/Cha09/period.ini b/networks/Cha09/period.ini new file mode 100644 index 0000000..4dc0193 --- /dev/null +++ b/networks/Cha09/period.ini @@ -0,0 +1,6 @@ +T0 = 3.1 +Rs = 530.0 +tH = 86400.0 +up = 84.0|84.0|84.0|84.0 +uq = 463.33|540.55|386.11|463.33 +ut = 0|21600.0|43200.0|64800.0 diff --git a/networks/Cha09/training.ini b/networks/Cha09/training.ini new file mode 100644 index 0000000..df680a7 --- /dev/null +++ b/networks/Cha09/training.ini @@ -0,0 +1,6 @@ +T0 = 5.0 +Rs = 520.0 +tH = 3600.0 +up = 84.0 +uq = 46.333 +ut = 0 diff --git a/networks/DeWS00.net b/networks/DeWS00.net new file mode 100644 index 0000000..c2ce072 --- /dev/null +++ b/networks/DeWS00.net @@ -0,0 +1,41 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,1,2,4000.0,0.89,0,0.00001 +P,1,2,4000.0,0.89,0,0.00001 +P,2,3,6000.0,0.89,0,0.00001 +P,2,3,6000.0,0.89,0,0.00001 +P,3,4,26000.0,0.89,0,0.00001 +P,5,6,43000.0,0.59,0,0.00001 +P,6,7,29000.0,0.59,0,0.00001 +P,7,4,19000.0,0.59,0,0.00001 +P,4,14,55000.0,0.89,0,0.00001 +P,8,9,5000.0,0.89,0,0.00001 +P,8,9,5000.0,0.395,0,0.00001 +P,9,10,20000.0,0.89,0,0.00001 +P,9,10,20000.0,0.395,0,0.00001 +P,10,11,25000.0,0.89,0,0.0001 +P,10,11,25000.0,0.395,0,0.0001 +P,11,12,42000.0,0.89,0,0.0001 +P,12,13,40000.0,0.89,0,0.00001 +P,13,14,5000.0,0.89,0,0.00001 +P,14,15,10000.0,0.89,0,0.00001 +P,15,16,25000.0,0.89,0,0.00001 +P,11,17,10500.0,0.89,0,0.00001 +P,17,18,26000.0,0.3155,0,0.00001 +P,18,19,98000.0,0.3155,0,0.00001 +P,19,20,6000.0,0.3155,0,0.00001 +S,21,1 +S,22,2 +S,3,23 +S,24,5 +S,6,25 +S,7,26 +S,27,8 +S,10,28 +S,12,29 +S,30,13 +S,31,14 +S,15,32 +S,16,33 +S,19,34 +S,20,35 + diff --git a/networks/DeWS00/training.ini b/networks/DeWS00/training.ini new file mode 100644 index 0000000..00184d2 --- /dev/null +++ b/networks/DeWS00/training.ini @@ -0,0 +1,6 @@ +T0 = 10.0 +Rs = 530.0 +tH = 3600.0 +up = 56.0;56.0;54.0;60.0;53.0;53.0; +uq = 64.0;66.0;87.0;105.0;34.0;112.0;257.0;3.0;31.0 +ut = 0 diff --git a/networks/GasLib11.net b/networks/GasLib11.net new file mode 100644 index 0000000..ea77e4c --- /dev/null +++ b/networks/GasLib11.net @@ -0,0 +1,13 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,1,2,550,0.5,0,0.0001 +P,7,8,550,0.5,0,0.0001 +P,3,9,550,0.5,0,0.0001 +P,8,4,550,0.5,0,0.0001 +P,8,10,550,0.5,0,0.0001 +P,9,10,550,0.5,0,0.0001 +P,11,5,550,0.5,0,0.0001 +P,11,6,550,0.5,0,0.0001 +V,7,9 +C,2,7 +C,10,11 +S,12,2 diff --git a/networks/GasLib11/training.ini b/networks/GasLib11/training.ini new file mode 100644 index 0000000..b97b664 --- /dev/null +++ b/networks/GasLib11/training.ini @@ -0,0 +1,7 @@ +T0 = 20.0 +Rs = 530.0 +tH = 3600.0 +cp = 40.0;40.0 +up = 40.0;40.0;40.0 +uq = 15.0;25.0;35.0 +ut = 0 diff --git a/networks/GasLib134.net b/networks/GasLib134.net new file mode 100644 index 0000000..3f7a073 --- /dev/null +++ b/networks/GasLib134.net @@ -0,0 +1,182 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +S,5,4 +S,9,7 +S,9,8 +S,13,12 +S,16,15 +S,19,18 +S,23,22 +S,26,25 +S,31,30 +S,34,33 +S,37,36 +S,39,38 +S,41,40 +S,45,44 +S,48,47 +S,53,52 +S,55,54 +S,57,56 +S,63,62 +S,65,64 +S,67,66 +S,69,68 +S,72,71 +S,79,76 +S,79,77 +S,79,78 +S,83,82 +S,86,85 +S,88,87 +S,91,90 +S,94,93 +S,98,96 +S,98,97 +S,104,102 +S,104,103 +S,106,105 +S,109,108 +S,111,110 +S,114,113 +S,116,115 +S,118,117 +S,123,122 +S,126,124 +S,126,125 +S,134,133 +P,2,3,15250,0.9144,0,0.000008 +P,26,27,22764,0.6095999999999999,0,0.000008 +P,59,67,21347,0.254,0,0.000008 +P,43,46,43176.7,0.762,0,0.000008 +C,42,43 +P,84,88,651.34,0.3556,0,0.000008 +P,107,109,12558.5,0.762,0,0.000008 +P,111,112,2915,0.762,0,0.000008 +P,28,27,17869.3,0.9144,0,0.000008 +P,132,134,16967,0.6096,0,0.000008 +P,92,94,73190,0.508,0,0.000008 +P,10,11,28112,0.6095999999999999,0,0.000008 +P,24,26,21565,0.6095999999999999,0,0.000008 +P,23,24,26228,0.6095999999999999,0,0.000008 +P,35,37,7600,0.6095999999999999,0,0.000008 +P,73,74,21536,0.762,0,0.000008 +P,99,100,29500,0.762,0,0.000008 +P,63,65,21813,0.254,0,0.000008 +P,72,73,21321.8,0.762,0,0.000008 +P,100,101,14379,0.762,0,0.000008 +P,61,63,7853,0.254,0,0.000008 +P,14,16,16355,0.6095999999999999,0,0.000008 +V,98,99 +P,21,23,19510,0.6095999999999999,0,0.000008 +P,127,128,37924,0.6096,0,0.000008 +P,49,50,12918.8,0.762,0,0.000008 +P,84,89,10100,0.762,0,0.000008 +P,95,111,9007,0.762,0,0.000008 +P,32,34,12210,0.6095999999999999,0,0.000008 +P,101,104,6806,0.762,0,0.000008 +P,123,127,11570,0.762,0,0.000008 +P,46,48,20992.3,0.762,0,0.000008 +P,55,57,11295.1,0.762,0,0.000008 +P,29,31,26693.4,0.9144,0,0.000008 +P,75,80,14207.7,0.762,0,0.000008 +P,131,132,32844,0.6096,0,0.000008 +P,16,17,15652,0.6095999999999999,0,0.000008 +P,128,129,22837,0.6096,0,0.000008 +P,81,83,28130,0.508,0,0.000008 +P,53,55,13000,0.762,0,0.000008 +P,75,79,28057,0.508,0,0.000008 +P,50,51,19251,0.762,0,0.000008 +P,104,106,15959,0.762,0,0.000008 +P,60,61,33968,0.254,0,0.000008 +P,92,95,11764.6,0.762,0,0.000008 +P,80,81,24664.5,0.762,0,0.000008 +P,59,70,26734.8,0.762,0,0.000008 +P,123,126,1500,0.508,0,0.000008 +P,70,72,26944.4,0.762,0,0.000008 +P,35,42,4962.6,0.9144,0,0.000008 +P,67,69,19518,0.254,0,0.000008 +P,27,29,23153.9,0.9144,0,0.000008 +P,59,60,8294,0.254,0,0.000008 +P,89,91,20569.1,0.254,0,0.000008 +P,17,19,1615,0.30479999999999996,0,0.000008 +P,13,14,11167,0.6095999999999999,0,0.000008 +P,114,116,3598,0.6096,0,0.000008 +P,130,131,16376.999999999998,0.6096,0,0.000008 +P,5,6,28150,0.9144,0,0.000008 +P,31,32,12518,0.6095999999999999,0,0.000008 +P,129,130,29467,0.6096,0,0.000008 +P,84,86,651.34,0.3556,0,0.000008 +P,48,49,15550.800000000001,0.762,0,0.000008 +P,6,9,19750,0.9144,0,0.000008 +P,81,84,10100,0.762,0,0.000008 +P,57,58,17565.3,0.762,0,0.000008 +P,112,114,8900,0.6096,0,0.000008 +P,51,53,15639,0.762,0,0.000008 +P,17,20,9275,0.6095999999999999,0,0.000008 +P,1,2,14560,0.9144,0,0.000008 +P,58,59,16269.5,0.762,0,0.000008 +P,120,121,5900,0.762,0,0.000008 +P,37,39,2137.9100000000003,0.254,0,0.000008 +P,9,10,8434,0.6095999999999999,0,0.000008 +P,31,35,13042.400000000001,0.9144,0,0.000008 +P,20,21,18296,0.6095999999999999,0,0.000008 +P,106,107,10678,0.762,0,0.000008 +P,37,41,2137.9100000000003,0.254,0,0.000008 +P,95,98,11717,0.762,0,0.000008 +P,3,5,5500,0.9144,0,0.000008 +P,95,119,9322.2,0.762,0,0.000008 +P,74,75,16468.5,0.762,0,0.000008 +P,89,92,18341.2,0.762,0,0.000008 +P,120,123,40500,0.762,0,0.000008 +P,43,45,10927,0.254,0,0.000008 +P,11,13,18062,0.6095999999999999,0,0.000008 +P,119,120,8605.5,0.762,0,0.000008 +P,111,118,1810,0.3556,0,0.000008 +S,135,1 +S,162,28 +S,255,121 +S,4,138 +S,7,141 +S,8,142 +S,12,146 +S,15,149 +S,18,152 +S,22,156 +S,25,159 +S,30,164 +S,33,167 +S,36,170 +S,38,172 +S,40,174 +S,44,178 +S,47,181 +S,52,186 +S,54,188 +S,56,190 +S,62,196 +S,64,198 +S,66,200 +S,68,202 +S,71,205 +S,76,210 +S,77,211 +S,78,212 +S,82,216 +S,85,219 +S,87,221 +S,90,224 +S,93,227 +S,96,230 +S,97,231 +S,102,236 +S,103,237 +S,105,239 +S,108,242 +S,110,244 +S,113,247 +S,115,249 +S,117,251 +S,122,256 +S,124,258 +S,125,259 +S,133,267 diff --git a/networks/GasLib134/rand.ini b/networks/GasLib134/rand.ini new file mode 100644 index 0000000..d0db21a --- /dev/null +++ b/networks/GasLib134/rand.ini @@ -0,0 +1,7 @@ +T0 = 10 +Rs = 530 +tH = 86400 +cp = 80 +up = 80;80;80|80;80;80|80;80;80|80;80;80|80;80;80|80;80;80|80;80;80|80;80;80|80;80;80|80;80;80|80;80;80|80;80;80|80;80;80|80;80;80|80;80;80|80;80;80|80;80;80|80;80;80|80;80;80|80;80;80|80;80;80|80;80;80|80;80;80|80;80;80 +uq = 0;0;1;8;0;16;2;2;4;4;8;1;1;2;2;1;4;4;1;1;1;1;1;8;8;0;8;0;8;1;0;4;1;1;4;2;16;4;8;0;0;0;8;1;0|0;0;1.18612;6.37795;0;17.5931;2.39012;2.34671;4.30106;4.06633;9.6692;1.20236;0.933417;1.67652;1.53039;0.860847;3.50613;4.63087;0.791749;0.94695;1.15746;0.910737;0.8101;7.59705;8.7236;0;9.49977;0;8.13933;1.18888;0;3.14044;1.11332;0.809838;4.97385;2.06927;13.9528;4.45348;7.59202;0;0;0;9.44076;0.777657;0|0;0;0.776096;9.5103;0;18.3701;2.03853;1.74607;4.03254;4.90951;8.03936;0.815487;1.11974;1.62952;2.2532;0.859497;4.83411;3.00272;0.889914;1.24028;0.82025;1.15323;0.838897;8.7906;7.66774;0;6.484;0;7.15794;1.08118;0;4.97508;1.01487;1.22606;3.16797;1.74877;19.0754;4.03155;8.78627;0;0;0;7.58891;1.1269;0|0;0;0.859841;6.05745;0;15.5327;1.78221;2.08149;3.65278;3.5355;9.89677;1.16686;1.01237;2.37988;2.20004;1.01112;4.51639;3.00618;0.973504;1.0724;1.18993;1.0507;1.10305;6.81471;7.5206;0;9.4254;0;6.27348;1.18771;0;4.84543;1.16454;1.23793;3.50061;1.8193;17.7012;4.58129;6.25856;0;0;0;7.91768;0.815974;0|0;0;0.979821;7.17721;0;15.5697;2.47596;2.43768;4.32355;3.50017;6.78912;1.15023;1.15226;1.54408;1.71451;0.966711;4.77406;3.17494;1.04379;1.1982;0.797688;1.14481;1.16568;8.66531;6.85308;0;9.5991;0;6.33988;0.983759;0;4.12852;1.00594;0.765457;4.62269;2.4108;15.0252;3.40899;8.99065;0;0;0;8.25998;0.927961;0|0;0;1.22927;6.71966;0;15.7253;1.53643;1.54779;3.23513;4.85535;6.44474;1.20894;1.15846;2.18672;2.1799;1.12065;3.1376;3.52145;1.18882;0.991115;0.92628;1.14959;0.767417;7.77226;7.53175;0;6.87146;0;6.27336;0.820668;0;3.86292;1.02598;0.996941;3.16885;2.38522;13.9914;4.35621;7.6816;0;0;0;7.95848;0.947935;0|0;0;1.14502;9.70518;0;14.2323;1.82624;1.55398;3.29563;3.13716;7.18942;0.818652;0.844736;2.23377;2.05729;0.785225;3.36706;3.0456;0.98455;0.757047;1.04671;0.774782;1.12892;7.73318;6.11867;0;6.30792;0;7.63927;0.784067;0;3.67569;0.856642;1.18136;4.06251;2.29459;14.0228;3.10497;9.24527;0;0;0;7.07925;1.19276;0|0;0;0.975937;6.27272;0;17.403;2.47301;1.52062;3.03953;3.5988;7.58567;1.00237;0.811847;1.93717;2.35068;1.17367;4.47415;3.84817;0.968709;1.06144;1.04259;0.891599;1.22856;6.70096;7.88928;0;7.89686;0;6.49353;1.10712;0;4.44145;1.04391;0.871438;4.60125;2.42581;18.1379;4.60234;7.51842;0;0;0;9.95896;0.76062;0|0;0;0.916714;8.32437;0;19.2293;1.86503;2.18148;4.92858;4.18317;7.68302;0.952479;1.1605;1.87984;2.05857;1.08994;4.39343;3.68213;1.12309;0.865548;1.08384;1.07673;0.921435;6.77281;7.33349;0;9.34011;0;7.77207;0.903993;0;3.02731;0.821382;1.16714;4.47765;1.67884;12.3989;4.35714;7.27627;0;0;0;6.7347;1.17204;0|0;0;0.779548;8.5486;0;19.2682;1.80915;2.09863;4.94075;3.4066;7.2459;0.836786;1.06895;2.47966;2.40177;0.818326;4.55399;4.08271;0.983955;1.01372;1.07401;0.994828;1.06912;8.46569;9.90338;0;7.87757;0;9.59576;1.08558;0;3.74812;0.776112;1.1568;3.28333;2.01754;17.4823;4.89202;9.9442;0;0;0;9.44663;0.894035;0|0;0;1.12045;8.60508;0;17.9776;1.62091;1.61403;3.24772;4.27177;8.77537;1.03759;0.75806;1.89899;1.91952;1.1792;4.00381;4.85234;1.18041;1.1125;0.966685;1.23643;0.921503;7.07604;8.22177;0;7.65508;0;7.41456;1.07621;0;4.84537;1.09165;1.06449;3.87579;2.12701;16.9622;3.18312;8.87272;0;0;0;6.13053;0.875171;0|0;0;1.0034;9.45849;0;14.0841;2.41577;2.29625;3.93482;4.59674;6.36749;1.05311;1.19798;1.94019;1.85813;0.849917;3.85099;3.597;0.983256;1.05371;0.819879;1.12424;0.858236;8.23871;9.38521;0;8.01099;0;6.48071;1.01552;0;4.09296;1.05428;0.751119;3.70076;2.41318;17.9735;4.81688;7.65273;0;0;0;7.32783;0.99419;0|0;0;0.849963;6.22381;0;17.5171;1.63548;2.11785;4.31339;4.0034;7.60835;0.857223;1.00769;1.65681;1.98899;1.05367;4.22247;3.67617;0.999052;1.04418;1.12596;1.03392;1.1431;9.77914;7.63225;0;6.50176;0;8.27644;1.10755;0;3.94777;0.859828;0.939862;3.95699;2.16397;19.818;4.01991;6.39452;0;0;0;8.99499;1.11452;0|0;0;0.963597;9.26742;0;13.0546;1.83212;1.57021;3.58037;4.30162;7.18072;1.00997;1.02226;1.82603;1.75596;1.02152;4.71154;4.71896;0.993715;0.966717;0.870893;0.899482;1.11154;8.85789;7.84807;0;6.52914;0;9.50013;1.00241;0;3.99307;0.95314;1.2022;4.17481;1.88919;15.0713;4.22981;8.93824;0;0;0;8.57747;0.851308;0|0;0;0.834345;8.11569;0;12.988;2.39748;1.56928;4.50907;4.59191;7.22599;1.24459;1.05322;1.81406;2.42917;0.831162;4.34159;3.68096;0.864734;0.872086;1.07523;0.878055;0.889419;8.71688;9.30523;0;9.4819;0;7.3943;0.994;0;3.61794;1.06495;1.09018;3.29161;2.24001;14.0816;3.63214;8.54923;0;0;0;6.67695;0.858138;0|0;0;1.12585;8.7774;0;13.5272;1.99965;1.63601;4.11624;3.46675;6.42224;0.994958;1.13022;2.3945;1.96676;0.752827;4.04718;3.27624;0.792776;0.96448;1.17869;1.19328;1.04122;9.83752;9.96481;0;8.4118;0;6.16768;0.998919;0;4.90168;1.02765;0.939412;4.81066;2.31763;19.0198;3.15497;6.29537;0;0;0;9.80882;1.23817;0|0;0;0.934175;6.84962;0;13.1659;2.11529;2.28889;3.85559;4.20168;8.37531;1.09744;1.17767;1.74702;1.75401;1.13574;3.59763;4.0156;0.783692;0.755089;0.792185;0.9734;0.960503;9.10134;8.09579;0;7.06121;0;6.56936;1.21799;0;4.96399;0.81379;1.06598;4.28039;2.10034;18.4488;4.70123;6.48203;0;0;0;8.17308;1.04662;0|0;0;1.22091;8.17312;0;16.6803;2.08313;1.5924;3.53439;3.22492;7.13091;0.955711;0.941434;1.81068;1.93122;1.13239;4.40794;4.71331;1.1942;1.05441;1.23604;1.15799;0.796034;8.43091;9.70175;0;9.45921;0;6.30637;0.944641;0;4.02713;0.834599;0.871635;3.32588;1.585;15.689;3.28905;9.92638;0;0;0;7.00565;0.902202;0|0;0;0.758586;8.81008;0;12.5869;2.19825;1.73787;4.50747;4.03153;6.62089;0.767388;0.792325;1.90887;2.20253;0.960535;3.76322;3.76863;0.866584;1.22899;0.76573;0.799169;0.762014;9.79201;8.95609;0;6.23244;0;8.96211;0.808573;0;4.98518;0.7505;1.03571;4.13182;2.42236;12.7277;3.74097;7.9872;0;0;0;8.31429;1.23385;0|0;0;1.16453;9.82574;0;18.5786;1.52933;1.74365;4.79675;4.67568;6.00263;0.896416;1.11694;2.20801;1.90233;0.778407;4.13537;4.39138;1.1808;0.797723;1.1677;1.1798;0.995573;6.23857;8.26972;0;7.83102;0;7.8261;0.870212;0;3.91169;0.959081;1.24086;4.86323;1.5536;16.5142;4.24478;6.08965;0;0;0;9.66191;1.19798;0|0;0;1.0633;7.77817;0;17.7832;2.02788;1.60482;4.45689;4.84158;7.13438;1.15072;0.915995;1.64364;1.68184;1.04287;4.77572;4.25581;1.10587;0.767795;1.16786;0.763815;0.889134;7.07485;9.87511;0;8.88884;0;8.673;1.09245;0;3.85208;0.994243;1.17484;4.5662;2.02702;13.4991;4.9951;6.21533;0;0;0;9.58239;0.845013;0|0;0;1.01937;6.34159;0;19.4069;1.53207;2.35835;3.81366;3.99646;8.20324;0.923251;1.16987;2.37132;2.35625;0.837078;4.6859;3.90078;1.18641;1.19312;0.774929;1.19958;0.919879;9.94672;9.298;0;7.356;0;8.79698;1.16963;0;3.42643;0.829934;0.891722;4.37137;1.61885;16.2535;4.03469;6.5635;0;0;0;7.93003;0.7509;0|0;0;1.07525;6.22936;0;15.9411;2.32714;2.1982;4.87663;3.55522;9.48361;0.791658;0.935862;1.58316;2.0842;1.11431;4.7976;3.94724;1.219;0.873471;1.02294;1.19997;0.893675;9.08883;9.83844;0;7.60488;0;8.28543;1.23507;0;3.3865;1.08342;1.09123;3.93244;1.88014;14.8403;4.98102;9.5739;0;0;0;7.77096;1.10588;0|0;0;1.11331;8.5178;0;17.2391;1.83999;2.23374;3.51085;4.30504;6.16901;1.00555;1.16411;1.96174;1.87358;1.01715;4.87801;4.89941;0.819845;0.754458;1.22158;1.01205;0.835452;7.90142;8.58538;0;8.10792;0;8.51477;0.857585;0;4.66551;0.75896;0.929062;3.52064;2.31283;14.5183;3.45307;7.86328;0;0;0;7.24702;1.18386;0 +ut = 0|3600|7200|10800|14400|18000|21600|25200|28800|32400|36000|39600|43200|46800|50400|54000|57600|61200|64800|68400|72000|75600|79200|82800 diff --git a/networks/GasLib134/training.ini b/networks/GasLib134/training.ini new file mode 100644 index 0000000..0849cd4 --- /dev/null +++ b/networks/GasLib134/training.ini @@ -0,0 +1,7 @@ +T0 = 10.0 +Rs = 530.0 +tH = 3600.0 +cp = 80.0 +up = 80.0;80.0;80.0 +uq = 0;0;1;8;0;16;2;2;4;4;8;1;1;2;2;1;4;4;1;1;1;1;1;8;8;0;8;0;8;1.0;0;4;1;1;4;2;16;4;8;0;0;0;8;1;0 +ut = 0 diff --git a/networks/GasLib135.net b/networks/GasLib135.net new file mode 100644 index 0000000..12d84a2 --- /dev/null +++ b/networks/GasLib135.net @@ -0,0 +1,276 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,3,28,50304.792058399995,0.6,0,0.00005 +P,131,25,100340.688215,1,0,0.00005 +P,90,91,17722.0417037,0.4,0,0.00005 +P,90,91,17722.0417037,0.4,0,0.00005 +P,91,38,27575.9858722,1,0,0.00005 +P,90,7,50039.072743,1,0,0.00005 +P,5,2,35005.3067338,1,0,0.00005 +P,28,51,35640.0907784,0.4,0,0.00005 +P,51,38,12536.236134899998,0.6,0,0.00005 +P,101,105,60939.7150406,0.6,0,0.00005 +P,105,98,64597.223853,0.6,0,0.00005 +P,98,99,23354.6170784,0.4,0,0.00005 +P,71,7,61293.0070234,1,0,0.00005 +P,99,30,43259.2640362,0.6,0,0.00005 +P,30,86,39290.809462,0.6,0,0.00005 +P,86,87,38503.3883301,0.6,0,0.00005 +P,87,80,65028.38976060001,1,0,0.00005 +P,96,17,162363.128696,1,0,0.00005 +P,82,81,6510.82318684,0.6,0,0.00005 +P,81,89,23219.4717484,0.6,0,0.00005 +P,89,94,69525.6850623,0.6,0,0.00005 +P,89,94,69525.6850623,1,0,0.00005 +P,94,93,29067.2163505,0.6,0,0.00005 +P,71,73,35220.8674457,1,0,0.00005 +P,93,80,73550.1565219,1,0,0.00005 +P,94,104,46081.596533,0.6,0,0.00005 +P,104,88,49928.769459,0.6,0,0.00005 +P,94,102,85857.9820653,0.6,0,0.00005 +P,94,102,85857.9820653,1,0,0.00005 +P,102,11,10634.4892592,0.6,0,0.00005 +P,102,11,10634.4892592,1,0,0.00005 +P,80,66,137584.529095,1,0,0.00005 +P,102,85,37563.148777,1,0,0.00005 +P,85,83,74204.5481958,1,0,0.00005 +P,73,21,44307.578388099995,1,0,0.00005 +P,83,79,34864.4564753,0.6,0,0.00005 +P,97,79,10819.030875699998,1,0,0.00005 +P,97,103,13882.590546899999,0.6,0,0.00005 +P,103,14,59093.6131581,1,0,0.00005 +P,79,92,74213.0364192,0.6,0,0.00005 +P,92,9,10380.0380319,1,0,0.00005 +P,9,100,39573.0643149,1,0,0.00005 +P,100,15,25443.4906409,1,0,0.00005 +P,92,13,81583.8292956,1,0,0.00005 +P,13,68,49535.2363296,1,0,0.00005 +P,7,65,60573.463859999996,1,0,0.00005 +P,12,27,19740.0494072,1,0,0.00005 +P,10,12,25479.1293171,0.6,0,0.00005 +P,65,66,94839.1665755,1,0,0.00005 +P,66,30,89395.5362133,1,0,0.00005 +P,30,84,67770.9172483,1,0,0.00005 +P,84,17,10478.381755499999,1,0,0.00005 +P,17,8,9209.87894494,0.6,0,0.00005 +P,28,51,35640.0907784,1,0,0.00005 +P,17,37,33603.2760489,1,0,0.00005 +P,72,21,96065.0296604,1,0,0.00005 +P,72,25,61286.171295800006,1,0,0.00005 +P,72,22,60740.4521933,1,0,0.00005 +P,129,75,32476.949408700002,1,0,0.00005 +P,130,20,26313.6684695,1,0,0.00005 +P,75,76,3274.8442140999996,1,0,0.00005 +P,76,49,54490.95433850001,1,0,0.00005 +P,49,50,17417.5480678,1,0,0.00005 +P,50,67,77016.0839526,1,0,0.00005 +P,51,38,12536.236134899998,1,0,0.00005 +P,67,16,9158.22165979,1,0,0.00005 +P,67,16,9158.22165979,1,0,0.00005 +P,67,52,8869.54237053,1,0,0.00005 +P,67,52,8869.54237053,1,0,0.00005 +P,20,39,173659.70303200002,1,0,0.00005 +P,128,60,85824.94975449999,1,0,0.00005 +P,39,60,112865.012892,1,0,0.00005 +P,108,63,79066.7410985,1,0,0.00005 +P,107,45,169915.785856,1,0,0.00005 +P,63,45,99696.9687718,1,0,0.00005 +P,2,26,42281.4742459,1,0,0.00005 +P,45,56,92797.1468491,0.6,0,0.00005 +P,120,42,24981.3111263,1,0,0.00005 +P,121,42,25743.4218589,1,0,0.00005 +P,45,124,84458.1685734,1,0,0.00005 +P,45,125,84946.6519322,1,0,0.00005 +P,126,31,80621.8095869,1,0,0.00005 +P,127,31,80904.3280661,1,0,0.00005 +P,122,46,83082.9611438,1,0,0.00005 +P,123,46,83957.6803666,1,0,0.00005 +P,46,64,13264.2144669,1,0,0.00005 +P,26,78,49223.121766200005,1,0,0.00005 +P,46,64,13264.2144669,1,0,0.00005 +P,110,35,87864.05736790001,1,0,0.00005 +P,109,35,87454.8381291,1,0,0.00005 +P,132,70,33438.206211900004,1,0,0.00005 +P,133,70,33473.8696938,1,0,0.00005 +P,39,53,42519.4409038,1,0,0.00005 +P,53,68,21281.5243847,1,0,0.00005 +P,39,59,37246.4955445,1,0,0.00005 +P,59,58,63409.1674752,1,0,0.00005 +P,31,32,13796.8759156,1,0,0.00005 +P,5,78,10397.5682528,1,0,0.00005 +P,31,32,13796.8759156,1,0,0.00005 +P,31,32,13796.8759156,0.6,0,0.00005 +P,31,40,14097.1093233,1,0,0.00005 +P,31,40,14097.1093233,0.6,0,0.00005 +P,32,116,81461.532131,1,0,0.00005 +P,32,117,82408.77257670001,1,0,0.00005 +P,32,34,47648.2477658,0.6,0,0.00005 +P,34,134,37524.1310102,1,0,0.00005 +P,58,55,55637.087791,1,0,0.00005 +P,58,118,89446.22745610001,1,0,0.00005 +P,24,78,6844.74898272,1,0,0.00005 +P,58,119,89179.21794999999,1,0,0.00005 +P,55,43,48033.1620915,0.6,0,0.00005 +P,55,47,19465.572945400003,1,0,0.00005 +P,47,33,93300.8611373,1,0,0.00005 +P,47,57,31776.602863699998,1,0,0.00005 +P,57,111,75196.4293951,1,0,0.00005 +P,57,135,61179.7197437,1,0,0.00005 +P,57,135,61179.7197437,1,0,0.00005 +P,135,112,27318.149588,1,0,0.00005 +P,135,113,26466.906710500003,1,0,0.00005 +P,18,24,22659.1404524,1,0,0.00005 +P,114,62,37045.99039,1,0,0.00005 +P,115,62,37887.833708599996,1,0,0.00005 +P,62,54,51079.7762966,1,0,0.00005 +P,62,106,135035.491093,1,0,0.00005 +P,77,4,3000.00847568,1,0,0.00005 +P,33,74,28202.1518902,1,0,0.00005 +P,74,23,56443.917503000004,0.4,0,0.00005 +P,23,41,78489.7646788,0.6,0,0.00005 +P,74,36,50533.86622,0.4,0,0.00005 +P,69,36,12358.4448789,0.6,0,0.00005 +P,26,71,52638.2656276,1,0,0.00005 +P,74,44,22865.4790199,1,0,0.00005 +P,44,27,70219.51783580001,1,0,0.00005 +P,54,29,6799.78855321,1,0,0.00005 +P,29,27,60895.6319046,1,0,0.00005 +P,54,95,73579.2704439,1,0,0.00005 +P,95,61,7053.12980961,1,0,0.00005 +P,27,61,44718.977333200004,1,0,0.00005 +P,61,19,38054.088697700005,1,0,0.00005 +P,61,1,15990.7836139,1,0,0.00005 +P,81,48,9159.01470214,0.6,0,0.00005 +C,18,131 +C,77,106 +C,67,107 +C,67,108 +C,64,109 +C,64,110 +C,35,132 +C,35,133 +C,6,111 +C,6,112 +C,6,113 +C,114,135 +C,115,135 +C,58,116 +C,58,117 +C,58,134 +C,57,118 +C,57,119 +C,45,120 +C,45,121 +C,45,122 +C,45,123 +C,31,124 +C,31,125 +C,60,126 +C,60,127 +C,50,128 +C,72,129 +C,72,130 +S,136,1 +S,137,2 +S,138,3 +S,139,4 +S,140,5 +S,141,6 +S,7,142 +S,8,143 +S,9,144 +S,10,145 +S,11,146 +S,12,147 +S,13,148 +S,14,149 +S,15,150 +S,16,151 +S,17,152 +S,18,153 +S,19,154 +S,20,155 +S,21,156 +S,22,157 +S,23,158 +S,24,159 +S,25,160 +S,26,161 +S,27,162 +S,28,163 +S,29,164 +S,30,165 +S,31,166 +S,32,167 +S,33,168 +S,34,169 +S,35,170 +S,36,171 +S,37,172 +S,38,173 +S,39,174 +S,40,175 +S,41,176 +S,42,177 +S,43,178 +S,44,179 +S,45,180 +S,46,181 +S,47,182 +S,48,183 +S,49,184 +S,50,185 +S,51,186 +S,52,187 +S,53,188 +S,54,189 +S,55,190 +S,56,191 +S,57,192 +S,58,193 +S,59,194 +S,60,195 +S,61,196 +S,62,197 +S,63,198 +S,64,199 +S,65,200 +S,66,201 +S,67,202 +S,68,203 +S,69,204 +S,70,205 +S,71,206 +S,72,207 +S,73,208 +S,74,209 +S,75,210 +S,76,211 +S,77,212 +S,78,213 +S,79,214 +S,80,215 +S,81,216 +S,82,217 +S,83,218 +S,84,219 +S,85,220 +S,86,221 +S,87,222 +S,88,223 +S,89,224 +S,90,225 +S,91,226 +S,92,227 +S,93,228 +S,94,229 +S,95,230 +S,96,231 +S,97,232 +S,98,233 +S,99,234 +S,100,235 +S,101,236 +S,102,237 +S,103,238 +S,104,239 +S,105,240 diff --git a/networks/GasLib135/training.ini b/networks/GasLib135/training.ini new file mode 100644 index 0000000..7bfce63 --- /dev/null +++ b/networks/GasLib135/training.ini @@ -0,0 +1,7 @@ +T0 = 12.0 +Rs = 520.0 +tH = 3600.0 +cp = 50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0;50.0 +up = 50.0;50.0;50.0;50.0;50.0;50.0 +uq = 1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0 +ut = 0 diff --git a/networks/GasLib24.net b/networks/GasLib24.net new file mode 100644 index 0000000..99b6446 --- /dev/null +++ b/networks/GasLib24.net @@ -0,0 +1,34 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,1,3,50000,1.1,0,0.00001 +P,16,8,50000,1.1,0,0.00001 +P,2,9,50000,1.1,0,0.00001 +S,9,10 +P,10,11,10,2.1,0,0.00001 +P,12,13,30000,0.9,0,0.00001 +P,13,15,30000,0.9,0,0.00001 +P,15,14,30000,0.9,0,0.00001 +P,13,16,30000,0.9,0,0.00001 +P,16,14,30000,0.9,0,0.00001 +P,14,17,30000,0.9,0,0.00001 +P,17,4,30000,0.9,0,0.00001 +P,17,18,30000,0.9,0,0.00001 +P,19,20,100000,0.9,0,0.000012 +P,20,23,50000,0.9,0,0.000012 +P,19,21,100000,0.85,0,0.000012 +P,21,23,50000,0.85,0,0.000012 +P,22,5,30000,0.5,0,0.00001 +P,24,6,50000,1.1,0,0.00001 +P,24,7,50000,1.1,0,0.00001 +S,3,10 +C,11,12 +C,18,19 +C,23,24 +V,21,22 +S,25,1 +S,26,2 +S,27,3 +S,4,28 +S,5,29 +S,6,30 +S,7,31 +S,8,32 diff --git a/networks/GasLib24/training.ini b/networks/GasLib24/training.ini new file mode 100644 index 0000000..41b8928 --- /dev/null +++ b/networks/GasLib24/training.ini @@ -0,0 +1,7 @@ +T0 = 20.0 +Rs = 530.0 +tH = 3600.0 +cp = 50.0;50.0;50.0 +up = 50.0;50.0;50.0 +uq = 20.0;20.0;20.0;20.0;20.0 +ut = 0 diff --git a/networks/GasLib40.net b/networks/GasLib40.net new file mode 100644 index 0000000..7b9079a --- /dev/null +++ b/networks/GasLib40.net @@ -0,0 +1,78 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,1,6,13071.0852297,1,0,0.00005 +P,33,19,76893.5507568,0.8,0,0.00005 +P,38,16,21557.5661917,1,0,0.00005 +P,16,17,6998.05377872,1,0,0.00005 +P,17,13,58218.9695531,0.8,0,0.00005 +P,28,29,86690.2655668,0.8,0,0.00005 +P,29,12,16579.3259985,0.6,0,0.00005 +P,12,21,10022.7829812,0.6,0,0.00005 +P,29,7,35218.8390867,0.6,0,0.00005 +P,7,23,20322.2054259,0.6,0,0.00005 +P,21,9,32868.2025259,0.8,0,0.00005 +P,28,40,47488.2838523,0.8,0,0.00005 +P,9,10,3802.5866770499997,0.6,0,0.00005 +P,9,25,39036.0418114,0.8,0,0.00005 +P,10,27,38659.824363,0.4,0,0.00005 +P,25,4,18017.8496012,0.6,0,0.00005 +P,27,24,3067.54743994,0.6,0,0.00005 +P,24,15,12015.8748344,0.4,0,0.00005 +P,10,8,14043.1135378,0.4,0,0.00005 +P,8,20,20634.698268800003,0.6,0,0.00005 +P,20,7,10586.1294733,0.6,0,0.00005 +P,20,11,10452.031178000001,0.6,0,0.00005 +P,6,26,12397.3521636,0.8,0,0.00005 +P,11,23,19303.1920196,0.6,0,0.00005 +P,28,23,66036.5946309,0.6,0,0.00005 +P,28,18,18969.412711099998,1,0,0.00005 +P,18,32,36061.0098747,0.8,0,0.00005 +P,32,31,22224.1532472,0.8,0,0.00005 +P,32,5,31179.6191038,0.8,0,0.00005 +P,5,18,12766.7034136,1,0,0.00005 +P,32,39,32921.259815,0.8,0,0.00005 +P,36,22,49866.1483875,0.8,0,0.00005 +P,22,35,3479.45466552,0.8,0,0.000012 +P,36,37,3418.00825125,1,0,0.000012 +P,30,37,32449.372045300002,1,0,0.00005 +P,30,22,26427.4816453,0.8,0,0.00005 +P,13,14,18136.5972918,1,0,0.00005 +P,13,34,65057.174267899994,0.8,0,0.00005 +P,13,35,65532.2127112,0.8,0,0.00005 +C,38,28 +C,14,33 +C,22,34 +C,3,36 +C,2,39 +C,6,40 +S,41,1 +S,42,2 +S,43,3 +S,4,44 +S,5,45 +S,6,46 +S,7,47 +S,8,48 +S,9,49 +S,10,50 +S,11,51 +S,12,52 +S,13,53 +S,14,54 +S,15,55 +S,16,56 +S,17,57 +S,18,58 +S,19,59 +S,20,60 +S,21,61 +S,22,62 +S,23,63 +S,24,64 +S,25,65 +S,26,66 +S,27,67 +S,28,68 +S,29,69 +S,30,70 +S,31,71 +S,32,72 diff --git a/networks/GasLib40/training.ini b/networks/GasLib40/training.ini new file mode 100644 index 0000000..99f9149 --- /dev/null +++ b/networks/GasLib40/training.ini @@ -0,0 +1,7 @@ +T0 = 15.0 +Rs = 530.0 +tH = 3600.0 +cp = 50.0;50.0;50.0;50.0;50.0;50.0 +up = 50.0;50.0;50.0 +uq = 15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0;15.0 +ut = 0 diff --git a/networks/GasLib4197.net b/networks/GasLib4197.net new file mode 100644 index 0000000..fca5222 --- /dev/null +++ b/networks/GasLib4197.net @@ -0,0 +1,5487 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,1025,1026,2049.06969634,0.3,0,0.0001 +P,1021,1029,4976.87364663,1,0,0.00001 +P,1032,2295,581.915468519,0.3,0,0.0001 +P,2296,1032,586.518371345,0.3,0,0.0001 +P,2284,1033,2190.16752529,0.3,0,0.0001 +P,1040,1035,1812.2975421800002,2,0,0.00001 +P,1036,1031,2396.77806564,0.3,0,0.00001 +P,1037,1036,629.413328777,0.3,0,0.00001 +P,1039,1038,1805.4187159199998,0.3,0,0.0001 +P,1039,13,1622.17184729,0.3,0,0.0001 +P,1028,1040,1400.85480278,0.3,0,0.00001 +P,1042,1041,449.608518364,0.3,0,0.0001 +P,1042,2296,594.126866222,0.3,0,0.0001 +P,2297,1042,597.3392431,0.3,0,0.0001 +P,1043,2286,547.445229787,0.3,0,0.0001 +P,1044,2281,1837.6297961100001,0.3,0,0.0001 +P,2291,1044,629.413328777,0.15,0,0.0001 +P,1046,1045,1272.47696428,0.15,-70,0.0001 +P,2281,1046,2521.76575374,0.3,0,0.0001 +P,1051,1047,540.171436586,0.15,0,0.0001 +P,1048,1047,1065.7817730900001,0.15,0,0.00001 +P,1049,2327,1245.9426139500001,0.15,0,0.0001 +P,1050,1051,530.147786271,0.3,0,0.0001 +P,1052,1053,3306.60358075,0.15,14,0.0001 +P,1055,370,1070.74712749,0.3,0,0.0001 +P,1056,1057,991.892373029,0.15,0,0.0001 +P,16,1057,5349.85033866,0.15,-80,0.0001 +P,1057,1058,577.864551989,0.15,0,0.0001 +P,371,2338,629.628869762,0.5,-1,0.0001 +P,17,371,461.287055727,0.3,0,0.0001 +P,1059,17,5374.7995964,0.3,-40,0.0001 +P,2338,16,617.2208514079999,0.3,13,0.0001 +P,3635,906,6360.07037777,0.5,3,0.00001 +P,1062,3640,1331.58755643,0.5,4,0.00001 +P,1060,1061,10,0.3,0,0.00001 +P,1060,3639,2523.83096936,0.3,1.5,0.0001 +P,2917,628,2486.1331397000004,0.3,0,0.0001 +P,1063,1445,5208.45857405,0.5,-128.39999,0.0001 +P,1336,1064,4457.96136655,0.5,-32.60001,0.0001 +P,1065,1067,968.702625011,0.5,0,0.0001 +P,4076,1066,498.370589832,0.5,0,0.0001 +P,1068,1067,1143.0773466599999,0.5,0,0.0001 +P,1157,3440,10,0.15,0,0.0001 +P,1412,1069,1111.0496216400002,0.3,0,0.0001 +P,1947,1070,1134.4545328,0.15,0,0.0001 +P,1072,1071,561.108672329,0.15,1,0.00001 +P,1072,2104,576.140549624,0.15,1,0.00001 +P,1073,1072,1140.68252265,0.15,-5,0.00001 +P,1255,1073,1240.3261273199998,0.15,-1,0.00001 +P,1074,2490,1974.95269408,0.5,1,0.0005 +P,2480,1074,500.10323903099993,0.3,-3.4000000000000057,0.00001 +P,1248,2918,10,0.15,0,0.0001 +P,1075,1249,461.394139556,0.3,0,0.00001 +P,2918,1075,921.4731475059999,0.3,2,0.0001 +P,1076,4034,4402.91520805,0.5,-14,0.0001 +P,4035,1076,424.681064414,0.5,-7,0.00001 +P,1077,3941,1218.00696095,0.75,0,0.0001 +P,3946,1077,696.243425879,0.5,0,0.00001 +P,1110,1078,1155.7691950399999,0.3,-0.4000000000000057,0.0001 +P,1079,4089,581.147755393,0.5,-0.5,0.00001 +P,1007,1079,1146.7358575599999,0.75,-0.20000000000000284,0.0005 +P,1080,1081,10,0.15,0,0.0001 +P,1081,18,1027.6425502499999,0.15,0,0.0001 +P,3054,1082,594.560347126,0.3,2.5,0.00001 +P,1083,689,2350.34218204,0.3,-7.5,0.0001 +P,19,3054,584.62963977,0.3,-10,0.00001 +P,690,19,3565.69296299,0.3,13,0.0001 +P,1084,2962,1369.63689328,0.15,-0.5999999999999943,0.0001 +P,668,1084,387.03955659900004,0.3,1,0.00001 +P,1085,3024,1967.61396012,0.5,28.799999999999997,0.00001 +P,3021,1085,642.616057512,0.5,6.200000000000003,0.00001 +P,1086,2890,591.541067882,0.3,-0.6000000000000014,0.0001 +P,2891,1086,592.629944787,0.3,0,0.00001 +P,1087,2827,3195.40006248,0.5,-0.6000000000000014,0.00001 +P,1088,2899,959.586380282,0.15,0.30000000000000426,0.0001 +P,1321,1088,575.161910073,0.15,-0.5,0.00001 +P,1089,3888,680.4601697740001,0.75,0.20000000000000284,0.0001 +P,963,1089,1348.37781365,0.5,0.6000000000000014,0.00001 +P,1090,97,590.042170989,0.3,1.5999999999999979,0.00001 +P,1389,1090,1227.83490727,0.3,-3.1999999999999993,0.00001 +P,1093,1092,513.582323411,0.3,-2.299999999999997,0.00001 +P,706,1093,4125.85662685,0.3,-1.6000000000000014,0.0001 +P,1094,20,528.082787209,0.15,2,0.0001 +P,455,1094,545.86703537,0.15,1,0.0001 +P,3635,1095,504.919123441,0.15,0,0.00001 +P,1096,3912,1418.07433346,0.5,0,0.0001 +P,3913,1096,706.188805534,0.5,1.2000000000000028,0.0001 +P,1097,2870,1608.33149987,0.3,-3,0.0001 +P,1098,1097,541.243305286,0.3,8,0.00001 +P,2895,1098,1098.78877163,0.3,-14,0.00001 +P,1099,21,433.546672351,0.15,2,0.00001 +P,3810,1099,1719.93621988,0.15,0,0.0001 +P,1100,4110,3088.0963478500003,0.3,-17,0.0001 +P,3064,1100,639.471716973,0.3,-3,0.00001 +P,1101,61,5891.0757484,0.5,-18.75,0.0001 +P,3066,1101,5856.59705799,0.5,-18.75,0.0001 +P,23,968,520.762042039,0.3,0,0.0001 +P,3947,23,557.641260521,0.3,0,0.0001 +P,1103,2641,1048.17287476,0.15,-67,0.0001 +P,2642,1103,529.6332703960001,0.15,-24,0.00001 +P,1104,781,757.766712662,0.5,2,0.00001 +P,782,1104,726.608366045,0.5,0,0.0001 +P,1105,902,2129.24133316,0.15,2,0.0001 +P,1106,1107,1037.3377159299998,0.3,-0.5,0.0001 +P,1107,902,1623.17854564,0.5,0,0.0001 +P,1194,1107,983.3301255680001,0.5,1,0.0001 +P,1428,1108,531.122337915,0.3,0.5,0.0001 +P,777,776,616.337994896,0.5,5,0.0001 +P,1109,47,1482.56430064,0.3,8.799999999999997,0.0001 +P,706,1109,515.42806935,0.3,-3.3999999999999986,0.0001 +P,1111,2473,2488.58550986,0.5,33.199999999999996,0.0005 +P,1112,1111,1217.23333045,0.5,-2.1999999999999957,0.0005 +P,1113,1112,585.088715072,0.5,-8.200000000000003,0.0005 +P,447,1113,586.0308417159999,0.5,3.8999999999999986,0.0005 +P,1115,447,1621.77076715,0.5,-0.19999999999999574,0.0005 +P,1116,1117,1198.75034687,0.5,-10.799999999999997,0.0005 +P,2473,1116,634.8804537,0.5,0,0.0005 +P,1117,2464,588.8696108119999,0.5,-3,0.0005 +P,2815,615,935.8786806679999,0.3,0,0.0001 +P,1118,48,427.28142823499996,0.3,0,0.0001 +P,1119,1118,426.2320074,0.3,-1,0.0001 +P,615,1119,417.919200093,0.3,-0.5,0.0001 +P,2864,1120,746.425895849,0.3,0,0.0001 +P,2532,1122,516.512965122,0.3,-9,0.0001 +P,1123,2472,532.692522923,0.75,-2,0.0005 +P,2482,1123,507.237622171,0.5,-0.09999999999999432,0.0005 +P,1124,2481,504.02241414,0.3,5.6000000000000085,0.0005 +P,2482,1124,502.70494857500006,0.5,-14.5,0.00001 +P,1125,2607,4949.595117010001,0.75,99.59999,0.0005 +P,2606,1125,560.088950919,0.75,2.799999999999997,0.00001 +P,2608,49,497.43423029,0.3,2.799980000000005,0.0001 +P,2571,50,1013.32577826,0.75,20.200000000000003,0.0001 +P,1126,2571,2111.48641155,0.75,9.299999999999997,0.0001 +P,504,1126,488.384786149,0.5,12.5,0.0001 +P,1127,504,933.699761433,0.75,0.20000000000000284,0.0001 +P,2609,1127,467.186465848,0.5,-16.200000000000003,0.0001 +P,1128,51,537.797301663,0.15,0,0.0001 +P,2665,1128,545.200327099,0.15,0,0.0001 +P,1129,2665,564.582179108,0.15,-3,0.0001 +P,2680,1129,578.957133054,0.15,-3.1000099999999975,0.0001 +P,1130,2670,608.462598392,0.3,18,0.00001 +P,2672,1130,1165.57883503,0.3,20,0.0001 +P,1131,2585,1172.78263019,0.5,-34,0.0001 +P,2586,1131,581.7187635270001,0.5,34,0.00001 +P,1132,2151,675.360157208,0.3,0,0.0001 +P,3666,1133,668.707844098,0.3,1.5,0.0001 +P,1134,1571,352.483962133,0.15,0,0.00001 +P,1135,1572,942.9994088630001,0.15,0,0.0001 +P,1136,3354,5841.87215557,1,7.899999999999999,0.00001 +P,1573,1136,4071.86903683,1,1,0.00001 +P,1137,663,3717.45546611,0.5,-75.7,0.0001 +P,2979,1137,531.113790907,0.5,-0.5,0.00001 +P,1138,595,523.86004558,0.3,-1,0.00001 +P,2812,1138,1007.69801103,0.3,-7.700000000000003,0.0001 +P,1174,1141,1089.1602919700001,0.3,0,0.00001 +P,1141,1139,1089.1602919700001,0.3,0,0.00001 +P,1140,1141,1089.1602919700001,0.5,0,0.00001 +P,1022,1160,969.553890489,0.5,0,0.00001 +P,1158,1176,2329.79558688,0.3,0,0.00001 +P,2081,1143,2841.3092283,0.5,0,0.00001 +P,1601,1145,10,1,0,0.00001 +P,1146,2470,526.837819234,0.5,-4.699999999999989,0.0005 +P,2472,1146,519.409473942,0.5,-3.9000000000000057,0.00001 +P,1147,3991,677.708348057,0.75,3,0.00001 +P,4020,1147,3336.38198034,0.75,-40,0.0001 +P,1148,2507,2109.43298195,0.3,2,0.0001 +P,451,1148,548.8575286729999,0.3,-1,0.00001 +P,1149,1964,1818.33410071,0.3,26,0.0001 +P,1150,1149,1240.94274125,0.3,2,0.0001 +P,1958,1150,634.3678009419999,0.3,0.7000000000000028,0.0001 +P,1153,1152,1465.96215758,0.15,0,0.0001 +P,1154,1153,1468.5422965599998,0.15,0,0.0001 +P,1162,1161,5386.47488058,1,14,0.00001 +P,1166,1990,1128.3859707499998,0.5,0,0.00001 +P,1165,1166,1161.03539862,0.5,13,0.00001 +P,1169,2824,585.498221806,0.5,0,0.0001 +P,1167,1170,1136.4219242,0.5,0,0.00001 +P,58,3080,3696.63539348,0.75,0,0.00001 +P,1172,58,1224.00027137,0.75,4,0.00001 +P,1173,1177,8796.1432535,0.75,8,0.00001 +P,61,1159,4110.962770259999,0.5,3.6000000000000014,0.0001 +P,1179,4129,466.064030834,1,0,0.00001 +P,4130,1180,466.064030834,1,0,0.00001 +P,3986,2178,605.835745132,0.5,4,0.0005 +P,2101,1182,1103.56169194,0.15,-5,0.00001 +P,1181,2100,1148.38394495,0.15,1,0.00001 +P,1184,1183,10,0.3,0,0.00001 +P,1183,65,1117.81217222,0.3,1,0.0001 +P,1185,3856,481.407437332,0.3,2,0.0001 +P,3857,1185,481.683360322,0.3,-0.8999999999999986,0.0001 +P,1186,3144,942.253573809,0.5,-8.5,0.0001 +P,3145,1186,469.701303322,0.5,-8.5,0.0001 +P,1187,3406,10,0.15,0,0.0001 +P,1188,3591,10,0.15,0,0.0001 +P,1189,3885,10,0.15,0,0.0001 +P,3657,66,1295.7976978400002,0.3,-2,0.0001 +P,1190,628,383.60666297200004,0.15,-4.5,0.0001 +P,2905,1190,419.38715354,0.15,-3.5,0.0001 +P,1192,1191,3944.0283047700004,0.3,0,0.0001 +P,902,1193,592.59924614,0.5,0,0.0001 +P,3280,1461,469.518678144,0.3,0,0.0001 +P,1195,1329,8498.68854873,0.5,-151.59999,0.0001 +P,1331,1195,7238.96334639,0.5,72.39999,0.0001 +P,1196,3029,1644.69133521,0.5,7.200000000000003,0.00001 +P,1198,1197,8340.48958759,0.5,6.099999999999994,0.00001 +P,3030,1198,6200.201145020001,0.5,-13.299999999999997,0.00001 +P,1199,3010,5595.670700850001,0.5,52.8,0.00001 +P,1200,1199,6252.783543789999,0.5,18.700000000000003,0.00001 +P,675,1200,5186.4800436,0.5,5.5,0.00001 +P,1201,548,9307.1901748,1,-0.6999999999999957,0.00001 +P,1387,1201,10520.6473443,1,-17.1,0.00001 +P,1202,2116,9262.61768603,1,-165.60001,0.00001 +P,1203,1202,7063.77515526,1,-113.10000000000002,0.00001 +P,80,1203,9638.82915853,1,-21.29998999999998,0.00001 +P,1204,3059,7659.96573568,0.3,1.7999999999999972,0.0001 +P,1205,1204,7559.29097879,0.3,-2.0999999999999943,0.0001 +P,696,1206,6309.199762179999,0.3,-0.7000000000000028,0.0001 +P,1207,1605,9514.86108878,0.3,-19.5,0.0001 +P,1208,1207,5688.024141829999,0.3,32,0.0001 +P,3072,1208,7102.03704612,0.3,-1.8999999999999986,0.0001 +P,1209,2148,8653.548246010001,1,26.93,0.00001 +P,4100,1209,5136.44634969,1,-3.9299999999999997,0.00001 +P,1210,4100,4784.41078838,1,-18.5,0.00001 +P,1211,1210,8692.8947591,1,11.200000000000003,0.00001 +P,1009,1211,6242.985968630001,1,-1.7000000000000028,0.00001 +P,3061,1212,9958.696722179999,0.3,11.399999999999999,0.00001 +P,1213,3061,4366.04124203,0.3,-6.600000000000001,0.00001 +P,695,1213,8828.35633928,0.3,32.6,0.00001 +P,1214,696,8427.2275283,0.3,8.600000000000001,0.00001 +P,1215,2191,4425.93249066,0.75,-0.5,0.00001 +P,1216,2805,9859.409253360001,0.75,-6,0.00001 +P,1218,1217,7548.99982747,0.75,23,0.00001 +P,2806,1219,6548.69900952,0.75,5,0.00001 +P,1220,3254,10869.5551547,0.5,-74.89999,0.00001 +P,1221,1220,11551.0945084,0.5,2,0.00001 +P,3255,1221,11311.934403000001,0.5,-75,0.00001 +P,1222,2181,8027.018867260001,0.5,-3.020000000000003,0.00001 +P,1170,1222,6210.546725290001,0.5,-7.979999999999997,0.00001 +P,1223,2841,3444.72086825,0.75,9.399999999999999,0.00001 +P,605,1223,7810.03498141,0.75,-1.3999999999999986,0.00001 +P,1177,597,6539.41397277,0.75,0.8999999999999986,0.00001 +P,1224,2119,10048.2364639,0.3,-52,0.0001 +P,1604,1224,7757.3166787499995,0.3,15.5,0.0001 +P,1655,121,585.2054997529999,0.15,2,0.00001 +P,1225,1720,835.9907997629999,0.3,-0.3999999999999986,0.0001 +P,1721,1225,1313.38816838,0.5,4,0.0001 +P,1721,1226,811.720877262,0.15,0,0.0001 +P,1228,1227,1419.05106366,0.3,5.600000000000001,0.0001 +P,1228,1232,502.443962432,0.3,2,0.0001 +P,1229,1228,1735.89000342,0.3,-6,0.0001 +P,1230,1229,1332.14825042,0.3,0,0.0001 +P,3091,1230,3860.75444052,0.3,0,0.0001 +P,1232,1231,375.632694439,0.3,0,0.0001 +P,2730,1017,762.3748504370001,0.5,0,0.0001 +P,1233,2186,997.695123062,0.15,0,0.0001 +P,1234,3504,1278.9919374400001,0.3,0,0.0001 +P,1420,3505,1780.74569472,0.5,0.5,0.0001 +P,855,1235,943.4734479819999,0.15,0,0.0001 +P,1237,3458,1279.86249113,0.15,0,0.0001 +P,3499,1238,1046.6652671900001,0.15,-0.5,0.0001 +P,1239,3458,677.464048452,0.15,-2,0.0001 +P,855,1239,619.72292019,0.15,0.5,0.0001 +P,225,226,563.106575873,0.75,0,0.00001 +P,1240,225,583.897356565,0.75,-1,0.00001 +P,1240,68,589.922571707,0.75,0,0.00001 +P,3079,1240,8550.02299365,0.75,-5.600000000000001,0.00001 +P,1241,1243,10,0.15,0,0.0001 +P,1242,1243,1130.85802769,0.3,8.799999999999997,0.0005 +P,1244,69,473.927827193,0.15,-8.299999999999997,0.0005 +P,1245,1244,479.576813845,0.15,0.20000000000000284,0.0005 +P,2478,1245,1013.4596852,0.15,11,0.0005 +P,1246,70,478.534302432,0.3,0,0.0001 +P,1246,3274,4489.10146908,0.5,-10.199999999999989,0.0001 +P,3131,1246,605.3597449719999,0.5,-4.800000000000011,0.0001 +P,424,71,611.060979422,0.5,-22,0.0001 +P,422,424,615.37957676,0.5,-34,0.0001 +P,71,2415,3659.0853671,0.5,-45,0.0001 +P,1247,1629,1053.27685328,0.5,0,0.00001 +P,2478,1247,547.70486502,0.75,-3.299999999999997,0.00001 +P,1249,72,457.679092176,0.3,2,0.0001 +P,2924,1250,1236.93703318,0.3,0,0.0001 +P,1252,1251,513.180060206,0.15,-1,0.0001 +P,1253,1252,1048.58791574,0.3,3,0.0001 +P,2106,1254,609.308856054,0.15,-2,0.00001 +P,1256,653,4262.18837925,0.5,-7,0.0001 +P,1257,73,561.6978566500001,0.5,-6,0.0001 +P,2952,1257,1120.97070862,0.5,-6,0.0001 +P,1258,2566,1009.9046193900001,0.5,0,0.0001 +P,1259,1258,519.0185227439999,0.75,-13,0.0001 +P,74,1259,1089.86643822,0.5,-1,0.0001 +P,1260,74,10,0.5,0,0.0001 +P,1261,2568,2404.82084315,0.75,-57,0.0001 +P,1757,1674,555.0399530980001,0.3,1,0.00001 +P,1262,1770,3311.77396949,0.3,0,0.0001 +P,159,1262,631.452315095,0.3,-5,0.00001 +P,1273,1274,10,0.15,0,0.0001 +P,1263,1275,594.5584744409999,0.15,1,0.0001 +P,1266,1263,1180.74044482,0.3,27,0.00001 +P,1264,2212,609.203811144,0.15,-9,0.00001 +P,2213,1264,614.716738268,0.15,2,0.00001 +P,1265,2213,615.073169206,0.3,21,0.0001 +P,2214,1265,617.758274174,0.15,16,0.0001 +P,1267,1266,600.122873571,0.3,2,0.0001 +P,1268,1267,599.345473133,0.15,5,0.0001 +P,1269,1268,604.910973371,0.15,-1,0.0001 +P,2212,1269,600.163498292,0.3,7,0.0001 +P,1270,2214,1245.4648323,0.15,2,0.0001 +P,1271,1270,621.8441154120001,0.15,0,0.0001 +P,1272,1271,626.727139732,0.15,1,0.0001 +P,1274,1272,1274.37873523,0.15,0,0.0001 +P,1275,2210,590.444657007,0.15,3,0.0001 +P,1275,2211,541.247628129,0.3,1,0.0001 +P,2195,75,560.719190917,0.15,0,0.0001 +P,1276,3842,1368.76182294,0.3,0,0.0001 +P,3843,1277,682.478941183,0.5,0,0.0001 +P,1278,1279,732.2540210760001,0.5,0,0.0001 +P,2803,1279,2969.67918397,0.5,4,0.0001 +P,3841,1280,732.2540210760001,0.5,0,0.0001 +P,1281,3865,10,0.3,0,0.0001 +P,3838,1283,908.797819498,0.5,0,0.0001 +P,1282,3838,512.498934019,0.5,-1,0.0001 +P,3836,1282,604.4452296229999,0.5,0,0.0001 +P,3837,1287,890.604272374,0.5,0,0.0001 +P,1284,3837,589.231249312,0.5,-1,0.0001 +P,3825,1284,563.238944832,0.5,0,0.0001 +P,3826,3825,1175.79639903,0.3,0,0.0001 +P,1286,1285,1066.8261692600001,0.15,0,0.0001 +P,3835,3836,574.207159782,0.5,0,0.0001 +P,1019,4141,1178.79537197,0.3,3,0.0001 +P,1288,3828,894.380030827,0.5,-3,0.0001 +P,4140,1291,542.326970837,0.5,0,0.0001 +P,1289,1290,894.380030827,0.5,-3,0.0001 +P,1019,1635,668.521487227,0.3,0,0.0001 +P,1292,1296,10,0.15,0,0.0001 +P,3829,1295,1109.83495756,0.5,-2,0.0001 +P,1296,76,1415.57851955,0.3,0,0.0001 +P,2221,1019,5293.32284506,0.3,6,0.0001 +P,2284,2282,639.911978306,0.3,0,0.0001 +P,2282,1297,433.017411418,0.15,0,0.0001 +P,1298,3005,10,0.3,0,0.0001 +P,1299,2809,1556.8819644300002,0.3,-5,0.0001 +P,591,1299,539.052347988,0.3,1,0.0001 +P,3402,3366,1111.5188356600001,0.3,1,0.0001 +P,1300,1301,10,0.15,0,0.0001 +P,1301,1418,888.611915072,0.15,0,0.0001 +P,79,77,448.565012241,0.15,0,0.0001 +P,79,78,504.238809309,0.15,0.5,0.0001 +P,1371,79,490.251706647,0.15,-4,0.0001 +P,1302,3211,734.4286073300001,1,-3.8000000000000114,0.00001 +P,3213,1302,4668.10212948,0.5,-59.19999999999999,0.00001 +P,1303,1304,604.974311305,0.5,1.5,0.0001 +P,2814,1303,6567.86012483,0.3,-9.600000000000001,0.0001 +P,1304,1305,2428.25456045,0.3,10.899999999999999,0.0001 +P,3074,1305,537.125241418,0.3,-4.200000000000003,0.0001 +P,1306,3076,602.0788320979999,0.3,4.200000000000003,0.0001 +P,1305,1306,619.6281202629999,0.3,0,0.0001 +P,1310,1308,1116.9858706,0.75,0,0.00001 +P,1308,1307,619.812733612,0.75,0,0.00001 +P,1307,4129,1237.08462546,0.75,3,0.00001 +P,1309,1308,1116.9858706,0.75,0,0.00001 +P,3085,1312,2428.76827782,0.75,6,0.00001 +P,1311,3086,2881.32798839,0.75,4,0.00001 +P,1313,1315,633.828399278,0.15,0,0.0001 +P,1314,1313,1190.49642931,0.15,-5,0.0001 +P,2522,4040,1190.49642931,0.75,-5,0.0001 +P,1315,4041,4193.78708007,0.3,107,0.0001 +P,80,3255,11434.1556624,0.5,3,0.00001 +P,2141,80,770.942081662,1,-4,0.00001 +P,1316,2897,545.289595688,0.15,0,0.0001 +P,1317,1316,957.575630876,0.15,1,0.0001 +P,2898,1318,1614.07075788,0.3,-3,0.0001 +P,1320,1319,2285.94944171,0.15,-4,0.0001 +P,2899,1320,1210.19462778,0.15,-3.6000000000000014,0.0001 +P,1321,81,490.102666618,0.15,0.20000000000000284,0.0001 +P,2900,1321,529.193537891,0.15,-0.20000000000000284,0.0001 +P,1322,82,454.925468727,0.15,-1,0.0001 +P,625,1322,448.56867577300005,0.15,0,0.0001 +P,3456,83,1288.73921199,0.3,2,0.0001 +P,3443,3456,1349.14749137,0.3,0,0.0001 +P,1323,84,518.17117264,0.3,2.625,0.0001 +P,469,1323,989.450045129,0.5,0,0.0001 +P,84,2530,514.183740088,0.3,0.875,0.0001 +P,2525,84,580.381344081,0.3,-22.375,0.0001 +P,4028,85,389.38830534699997,0.3,2,0.0001 +P,1439,1324,534.873596078,0.15,2,0.0001 +P,1327,1325,1056.11817008,0.5,-7.5,0.0001 +P,1444,1443,576.5789372859999,0.3,0,0.0001 +P,1326,1327,1124.99186887,0.5,6,0.0001 +P,1328,1444,5810.41371596,0.5,-99.30000000000001,0.0001 +P,1330,2306,551.4540215730001,0.15,109,0.0001 +P,2381,2307,1263.88009076,0.15,-2,0.0001 +P,1330,2308,1148.0788550900002,0.15,-5,0.0001 +P,2307,1330,615.4280374010001,0.15,0,0.0001 +P,1334,1332,3525.12099302,0.5,35.10001,0.0001 +P,1333,1532,1271.1695465399998,0.3,-0.3999900000000025,0.0001 +P,1335,1334,3585.42600146,0.5,65.39999,0.0001 +P,1337,1708,1153.43103901,0.3,44.5,0.0001 +P,1529,1338,3365.88443249,0.3,12.5,0.0001 +P,1339,1531,525.699398918,0.15,-2.6999999999999886,0.0001 +P,1709,1339,559.641066494,0.15,-2.699990000000014,0.0001 +P,1340,86,460.35116163,0.15,0,0.0001 +P,1526,1340,439.530746841,0.15,-0.09999999999999432,0.0001 +P,1342,1712,609.5525636719999,0.3,6.3999999999999915,0.0001 +P,1525,1341,619.337947752,0.3,-2.3999999999999915,0.0001 +P,1713,1342,619.337947752,0.3,-2.3999999999999915,0.0001 +P,1344,3217,1218.05626236,0.5,49.2,0.00001 +P,1345,1344,1092.48146944,0.5,-4,0.00001 +P,796,1345,4026.3772592200003,0.5,-56.2,0.00001 +P,1347,1346,1364.98024822,0.15,0,0.0001 +P,4021,980,424.199618665,0.3,-9,0.0001 +P,1350,989,884.054915789,0.15,2.6999999999999886,0.0001 +P,1350,1348,10,0.15,0,0.0001 +P,4023,1349,1388.40830606,0.75,1,0.0001 +P,1351,4022,1281.92290755,0.75,0,0.0001 +P,1832,1831,10,0.15,0,0.0001 +P,1471,1500,1314.0654088699998,0.3,-3,0.00001 +P,1352,87,1120.77034452,0.3,0,0.00001 +P,1353,87,318.45288189400003,0.15,-3,0.00001 +P,1842,1354,565.121633139,0.15,0,0.0001 +P,1836,1837,10,0.3,0,0.0001 +P,222,1836,565.121633139,0.3,0,0.0001 +P,2090,250,550.7146092500001,0.15,0,0.00001 +P,1357,3564,1121.1099902899998,0.3,0,0.0001 +P,3604,1358,324.690661948,0.3,0,0.0001 +P,3895,1359,515.645896488,0.3,0,0.0001 +P,1844,1467,2873.12698976,0.3,13.29998999999998,0.0001 +P,1846,1362,2118.11663474,0.15,0.3999900000000025,0.00001 +P,1847,88,1048.3252781600002,0.3,0,0.0001 +P,1363,1370,10,0.15,0,0.0001 +P,1364,2516,2392.00641271,0.15,5.5,0.0001 +P,1366,1365,538.840732755,0.15,1.4000000000000057,0.0001 +P,1367,1366,524.964363158,0.15,0,0.0001 +P,1368,1367,1032.54030654,0.15,2.9999999999999964,0.0001 +P,1369,1368,506.998680434,0.3,-0.1999999999999993,0.0001 +P,1370,1369,1367.25669565,0.15,0,0.0001 +P,2492,463,1158.59813839,0.3,2.6999999999999993,0.0001 +P,3971,89,482.64300335400003,0.15,5.800000000000004,0.0001 +P,2065,3971,481.613122854,0.15,1.7999999999999972,0.0001 +P,801,1371,453.04980934,0.15,-3.5,0.0001 +P,90,1472,1417.26216178,1,30,0.00001 +P,3235,90,9776.54510984,1,-32,0.00001 +P,2395,1373,1204.6642935300001,0.3,11.600009999999997,0.0001 +P,1374,1375,10,0.3,0,0.00001 +P,1375,91,3731.2675639199997,0.15,-18.79998999999998,0.00001 +P,1376,2389,1198.55075391,0.3,93.39999,0.0001 +P,410,1376,600.114117782,0.3,7.399999999999977,0.0001 +P,1377,410,1784.2466331599999,0.3,-45.5,0.0001 +P,1379,1378,3002.3813183499997,0.3,149.30002000000002,0.00001 +P,1380,1776,2817.4139025599998,0.3,-56.69999999999999,0.0001 +P,1381,1380,573.435504417,0.5,-1.3000000000000114,0.0001 +P,1384,1381,1240.89432667,0.3,14.399990000000003,0.0001 +P,1383,1382,10,0.15,0,0.0001 +P,1385,1778,666.916554563,0.5,0.6999900000000139,0.0001 +P,1780,1385,1324.76183417,0.3,-80.89999,0.0001 +P,1386,92,468.052190337,0.15,0,0.00001 +P,1386,93,482.201350032,0.3,0,0.00001 +P,704,1386,466.110431128,0.3,0,0.00001 +P,703,94,479.588383739,0.3,0,0.00001 +P,1387,95,485.185199848,0.15,-0.09999999999999432,0.00001 +P,703,1387,606.157589465,1,0.29999999999999716,0.00001 +P,2736,96,480.396736472,0.3,1.6000000000000014,0.00001 +P,3568,3560,1950.3698026,0.3,7,0.0001 +P,3534,3532,1282.79770852,0.3,0,0.0001 +P,3601,3594,1136.37514729,0.3,-2.3000000000000007,0.0001 +P,3798,1388,465.70127626000004,0.5,0,0.0001 +P,1636,1389,1167.6947611599999,0.3,0.29999999999999716,0.00001 +P,1390,98,520.953490641,0.3,17.299999999999997,0.0001 +P,3368,1390,585.203787608,0.3,-4.899999999999999,0.0001 +P,1391,3368,1183.9111491200001,0.15,0.29999999999999716,0.00001 +P,1392,3368,539.9926579849999,0.3,0.29999999999999716,0.0001 +P,1393,1392,528.3878842810001,0.5,0,0.0001 +P,4160,1393,1033.10083186,0.5,0,0.0001 +P,1394,3377,1153.51411549,0.5,-0.3000000000000007,0.00001 +P,3771,3765,523.172067497,0.3,2,0.0005 +P,1396,1395,965.150995851,0.15,-0.10000000000000142,0.00001 +P,1606,1641,849.4062257300001,0.75,0,0.00001 +P,1398,1397,969.946256723,0.3,0,0.00001 +P,1400,1399,643.993519172,0.3,1,0.0001 +P,1620,1619,5314.09817544,0.3,-3,0.0001 +P,1611,1401,1158.09424969,0.3,-8,0.0001 +P,1403,1402,554.626950506,0.3,0,0.0001 +P,1403,1439,555.204283785,0.3,0,0.0001 +P,1440,1403,537.991240998,0.3,1,0.0001 +P,1404,1442,2183.8597338,0.3,1,0.0001 +P,1405,99,528.325107877,0.3,-4.699979999999982,0.0001 +P,1405,1969,3792.49953324,0.5,-18.29998999999998,0.0001 +P,1520,1405,4256.43399372,0.5,97.29998999999998,0.0001 +P,1406,1464,525.115131062,0.3,-22.100009999999997,0.0001 +P,1834,1406,1626.03809738,0.3,-68,0.0001 +P,1410,1876,1357.36299874,0.3,-110.2,0.00001 +P,1508,1407,1074.28346534,0.3,-5.799999999999997,0.0001 +P,1408,90,632.5211199400001,0.3,2,0.00001 +P,1409,1983,3819.6436236000004,1,12.5,0.00001 +P,1423,1422,1547.6747481,0.3,0,0.0001 +P,1426,1427,664.805645764,0.3,1,0.0001 +P,1428,3390,1216.36170714,0.75,-2,0.00001 +P,1419,1429,1647.32544828,0.15,-1,0.0001 +P,1430,1431,560.106603921,0.3,1,0.0001 +P,1434,1435,585.704448416,0.3,-1.8000000000000007,0.0001 +P,1436,1437,614.467096929,0.5,0,0.0001 +P,1439,1438,543.601295221,0.3,0,0.0001 +P,1442,1440,2615.27486945,0.3,2,0.0001 +P,1442,1441,1082.11036376,0.3,-2,0.0001 +P,105,1446,612.716700727,0.15,-0.5999899999999911,0.0001 +P,1974,1448,3937.8576867300003,0.5,-48,0.0001 +P,1462,1449,7359.2793513,0.5,17.79998999999998,0.0001 +P,1854,1450,2347.8121534800002,0.15,-10.100009999999997,0.0001 +P,1451,1850,1723.20058357,0.3,9.5,0.0001 +P,1456,1452,1634.86943909,0.3,51.89999999999998,0.0001 +P,1767,1453,605.632305152,0.3,0,0.0001 +P,1454,1483,1785.28774471,0.3,-1,0.0001 +P,1876,1455,1830.28082692,0.3,131,0.0001 +P,1795,1457,548.974686757,0.3,-0.6000000000000014,0.0001 +P,1459,1458,562.083418323,0.3,0,0.0001 +P,1461,102,467.960738438,0.3,0,0.0001 +P,104,785,2799.6751147,0.5,0,0.00001 +P,103,104,5268.60031198,0.5,0,0.00001 +P,1452,1499,2746.03835029,0.3,52.09998999999999,0.0001 +P,1463,1970,5508.40938299,0.5,219,0.0001 +P,1464,1833,1070.7081049,0.3,24.600009999999997,0.0001 +P,1759,1465,1119.45973039,0.5,-2,0.0001 +P,1466,1842,2520.73927976,0.15,16,0.0001 +P,1467,1843,2520.73927976,0.3,16,0.0001 +P,1657,1468,610.666743637,0.5,0,0.0001 +P,1469,1463,2494.6329333000003,0.5,25,0.0001 +P,1470,1727,752.998379651,0.3,-2,0.0001 +P,1659,1473,1128.1107850600001,0.3,0,0.0001 +P,1688,1474,3217.27109329,0.3,2.1000000000000014,0.0001 +P,1476,1746,1179.54548153,0.3,0,0.00001 +P,1701,1477,1525.00198941,0.3,3,0.0001 +P,1700,1478,513.1947183999999,0.3,8,0.0001 +P,1479,1789,712.4368705300001,0.3,-2.200000000000003,0.0001 +P,1949,1480,1475.68621124,0.3,1.7000000000000028,0.0001 +P,1481,1931,3341.51963585,0.3,-63.29999000000001,0.0001 +P,1750,1482,2255.85612235,0.3,8.5,0.0001 +P,152,1965,1829.24648894,0.3,0.29999999999999716,0.0001 +P,1487,1484,616.804603016,0.3,-7.599989999999991,0.0001 +P,1486,1485,580.7291275370001,0.15,-8.099989999999991,0.0001 +P,1896,1486,577.717917525,0.15,0,0.0001 +P,1897,1487,616.052263843,0.3,0,0.0001 +P,1906,105,597.9057018379999,0.15,0,0.0001 +P,1923,1488,572.11388874,0.3,0,0.0001 +P,1879,1489,570.367802391,0.15,21.900000000000006,0.0001 +P,1893,1490,585.707844662,0.15,1.3999900000000025,0.0001 +P,1892,1491,1706.8611145999998,0.3,1.3999900000000025,0.0001 +P,1497,1492,1884.07669983,0.5,-71.5,0.0001 +P,1971,1493,6764.925658,0.5,-38,0.0001 +P,1494,1972,5296.80460461,0.5,-5,0.0001 +P,1495,1870,2801.2938476299996,0.3,-285.29999,0.0001 +P,1496,1820,594.651703137,0.3,-2.6000000000000014,0.0001 +P,1510,1498,527.831595688,0.3,0,0.0001 +P,1501,1860,1227.3336319799998,0.3,54.099999999999994,0.0001 +P,1502,1875,3404.3854389099997,0.3,-38.80000000000001,0.0001 +P,1503,1973,6429.2807057,0.5,92,0.0001 +P,1504,190,665.978871892,0.3,-1.2999999999999972,0.0001 +P,1505,1868,610.645306721,0.3,-5.599999999999994,0.0001 +P,1506,1507,606.932019371,0.3,0.19999999999999574,0.0001 +P,1865,1508,1189.55845693,0.3,-0.10000000000000142,0.0001 +P,1509,1510,3245.8683175799997,0.3,-48.5,0.0001 +P,1498,1760,1054.39656601,0.3,121.20000000000002,0.0001 +P,1512,1849,1197.91275325,0.3,-229.60001,0.0001 +P,1513,1859,941.3462041429999,0.3,-229.19998999999999,0.0001 +P,1515,1514,1467.26733834,0.3,-1.7000000000000028,0.0001 +P,1857,1516,1208.69922993,0.3,1.5,0.0001 +P,1848,1518,1090.7729683,0.3,0,0.00001 +P,1858,1517,1298.73065631,0.3,0.10000000000000853,0.0001 +P,1516,1519,584.945376464,0.3,0,0.0001 +P,1450,1466,2624.2480395099997,0.15,13.5,0.0001 +P,1844,1451,556.928584291,0.3,0.19997999999998228,0.0001 +P,1738,1521,5640.26981803,0.3,43.5,0.0001 +P,1522,142,4707.297836999999,0.3,-121.60001,0.0001 +P,1523,1717,1179.79125417,0.15,-45.099990000000005,0.0001 +P,1524,1713,1737.38491275,0.3,-64.79999000000001,0.0001 +P,1704,106,494.38347209700004,0.15,0,0.0001 +P,1712,1526,1202.4249339,0.3,8,0.0001 +P,1532,1527,1652.3365233,0.3,62.79998999999998,0.0001 +P,1528,1707,6789.827610609999,0.3,143.70001000000002,0.0001 +P,1709,1530,1714.62953696,0.3,52.800009999999986,0.0001 +P,1534,2746,2138.73595962,0.5,0,0.00001 +P,1533,2056,3689.37587084,1,0,0.00001 +P,1535,1536,1120.67369431,1,0,0.00001 +P,1538,1537,1015.3229810199999,1,0,0.00001 +P,2020,1539,1022.0619985899999,1,0,0.00001 +P,1587,1541,562.118668171,1,0,0.00001 +P,1540,1542,1055.86605596,1,0,0.00001 +P,1544,1543,711.683614536,0.5,0,0.00001 +P,1546,1545,537.8119954250001,0.3,-0.5,0.0001 +P,1548,1547,490.79388625800004,0.5,0.10000000000000142,0.00001 +P,1550,1551,534.808443166,0.75,-0.29999999999999716,0.00001 +P,1552,1553,555.505755785,0.3,-0.10000000000000142,0.0001 +P,1554,107,741.846780427,0.5,0.5,0.00001 +P,1556,1555,1116.1342484200002,0.15,0.20000000000000284,0.0001 +P,1558,1557,978.460406528,0.3,0,0.0001 +P,1559,1560,444.699135136,0.3,-0.10000000000000142,0.0001 +P,1561,1562,962.212067378,0.3,0,0.0001 +P,1564,1563,1028.91193488,0.15,0,0.0001 +P,1566,1565,1464.71769984,1,-0.3999999999999986,0.00001 +P,1568,1567,567.8390505689999,0.5,0,0.0001 +P,1570,1569,1091.8670155,0.5,0,0.0001 +P,1573,1574,1245.01499785,1,0,0.00001 +P,1576,1575,1417.02068932,0.5,0.3000000000000007,0.00001 +P,1577,1578,1161.34045034,0.3,0,0.0001 +P,1579,1580,1183.2047154900001,0.3,-0.3999999999999986,0.0001 +P,1581,1582,1171.81667692,0.3,-0.20000000000000284,0.0001 +P,1583,1584,1084.2565470700001,1,0.1999999999999993,0.00001 +P,1586,1585,1236.00478603,0.5,1.5,0.00001 +P,1542,1596,563.584538479,1,0,0.00001 +P,1592,1587,548.159733441,1,0,0.00001 +P,1591,1590,570.2667214950001,1,0,0.00001 +P,1592,1591,556.683568663,1,0,0.00001 +P,1588,4191,1785.15526652,1,0,0.00001 +P,1589,1588,590.65080314,1,0,0.00001 +P,1590,1589,565.094663553,1,0,0.00001 +P,1597,1590,1031.62899559,1,0,0.00001 +P,1593,1591,1157.0618455699998,1,0,0.00001 +P,1595,1592,1113.06073359,1,0,0.00001 +P,1594,1598,408.602392492,1,0,0.00001 +P,1594,1596,609.851909116,1,0,0.00001 +P,108,1594,622.69033696,1,0,0.00001 +P,1599,1600,328.288472377,0.75,-0.19999999999998863,0.00001 +P,1607,1615,2274.88768017,0.3,-1,0.0001 +P,1619,1608,511.73551822499996,0.15,0,0.0001 +P,1619,1611,1188.2636666399999,0.3,3,0.0001 +P,1611,1609,519.1430317830001,0.15,0,0.0001 +P,1610,1618,2280.79325132,0.3,4,0.0001 +P,1612,1621,2430.38580229,0.3,7,0.0001 +P,1613,1612,610.386849175,0.3,-1,0.0001 +P,1614,1613,626.9699740880001,0.3,7,0.0001 +P,1615,1614,643.993519172,0.3,1,0.0001 +P,1618,1616,2725.12597324,0.3,-22,0.0001 +P,1618,1617,526.035031956,0.15,0,0.0001 +P,1621,1620,1816.6176447999999,0.3,21,0.0001 +P,1621,110,506.332136614,0.15,0,0.0001 +P,1622,111,479.648755766,0.3,0,0.00001 +P,3325,1622,414.67078122099997,0.5,0,0.0001 +P,1622,112,419.45422723499996,0.3,0,0.0001 +P,113,1623,1188.7021036200001,0.5,0,0.0001 +P,1624,1625,518.890129385,0.75,-0.09999999999999964,0.00001 +P,1626,1627,525.242638864,0.15,0,0.0001 +P,2622,1628,1051.9060933199999,0.75,0,0.00001 +P,1630,1631,1188.7021036200001,0.5,0,0.0001 +P,1632,1630,1065.33172947,0.5,-51.80000000000001,0.00001 +P,2590,1632,1098.24551696,0.5,-16.19999999999999,0.0001 +P,1632,114,386.83912567899995,0.5,-0.30000000000001137,0.0001 +P,1633,1634,781.518239529,0.15,0,0.0001 +P,1637,2172,1581.3937868300002,1,0,0.00001 +P,1638,1639,1173.7611509600001,1,-0.1999999999999993,0.00001 +P,1638,1640,727.6458766579999,1,-0.1999999999999993,0.00001 +P,1644,4187,350.646067992,0.75,0,0.00001 +P,4186,1645,350.646067992,0.75,0,0.00001 +P,2573,118,500.128158915,0.15,7.5,0.0001 +P,1646,1647,2063.80380883,1,-1.1999999999999993,0.00001 +P,1648,1646,2266.69545539,1,1.0999999999999996,0.00001 +P,3154,1652,2862.1524973,0.15,8.399990000000003,0.0001 +P,151,1656,491.10656745,0.15,2,0.00001 +P,1690,132,2893.07805871,0.15,0,0.0001 +P,1658,123,748.573001318,0.15,0.9000000000000057,0.0001 +P,1663,3253,1294.05370414,1,0,0.00001 +P,1662,1663,11585.2097644,1.3,-12,0.00001 +P,1686,1665,572.7820546099999,0.3,-0.10000000000000142,0.00001 +P,130,1680,1111.92455958,0.3,0.29999999999999716,0.00001 +P,1666,131,286.86452754000004,0.15,1.2000000000000028,0.0001 +P,1687,1666,599.005825074,0.15,0,0.0001 +P,1697,1667,499.89516914999996,0.15,0,0.0001 +P,1668,133,498.185708529,0.3,0,0.0001 +P,1669,1668,511.419311583,0.15,0,0.0001 +P,1675,1669,524.034059004,0.15,0.6000000000000014,0.0001 +P,1670,134,1031.65404741,0.15,0.10000000000000142,0.0001 +P,1676,1670,533.752102358,0.15,0.29999999999999716,0.0001 +P,1671,1676,559.959717673,0.15,0.20000000000000284,0.0001 +P,136,1671,1116.85372766,0.3,0,0.0001 +P,1672,135,501.48074232999994,0.15,0.10000000000000142,0.0001 +P,1673,1672,493.690654876,0.3,1,0.0001 +P,136,1673,452.06854963300003,0.3,0,0.0001 +P,1674,136,557.892717832,0.3,0.5,0.0001 +P,1676,1675,1028.9120711799999,0.15,2.3999999999999986,0.0001 +P,1677,137,525.677089448,0.15,0,0.0001 +P,1678,1677,552.4312146430001,0.15,0.10000000000000142,0.0001 +P,1678,138,475.72477510799996,0.15,0.4000000000000057,0.0001 +P,1679,1678,539.542015449,0.15,0.8999999999999986,0.0001 +P,1680,1679,612.866803494,0.15,0,0.0001 +P,1687,1680,1113.64073011,0.3,3,0.0001 +P,1682,139,538.837182268,0.15,2.3000000000000043,0.0001 +P,1681,1682,1646.2538416000002,0.15,0,0.0001 +P,1683,1682,1646.2538416000002,0.15,0,0.0001 +P,1684,1702,2852.9741374699997,0.3,2.1000000000000014,0.0001 +P,1685,1664,2916.13773615,0.3,-2.3000000000000043,0.0001 +P,1686,1685,1320.61168725,0.3,0,0.00001 +P,1478,1687,504.41914457,0.3,-7.600000000000001,0.0001 +P,140,1689,1192.30443779,0.3,-2.1000000000000014,0.0001 +P,1697,140,619.8468749819999,0.3,-0.20000000000000284,0.0001 +P,1691,1692,477.728229824,0.15,0.3999999999999986,0.00001 +P,1693,1692,491.014729004,0.15,-0.29999999999999716,0.00001 +P,141,1693,1327.54009065,0.15,0,0.00001 +P,1696,1703,1182.4695614700001,0.15,0.6999999999999957,0.0001 +P,1695,1694,479.498257624,0.15,0,0.00001 +P,1696,1695,876.020726285,0.15,0,0.00001 +P,1698,1697,608.035388014,0.3,0.20000000000000284,0.0001 +P,1699,1698,1529.26710928,0.3,2.6000000000000014,0.0001 +P,1477,1699,853.607164061,0.3,-2.6000000000000014,0.0001 +P,1715,1714,1289.4525570399999,0.15,-3.9000000000000057,0.0001 +P,1715,1704,511.529204197,0.15,0.09999999999999432,0.0001 +P,1717,1716,588.020063013,0.15,0,0.0001 +P,1531,143,508.471095542,0.15,-5.200000000000003,0.0001 +P,1706,1705,530.108626806,0.3,-3.5,0.0001 +P,1706,144,547.609765616,0.15,0,0.0001 +P,1707,1706,556.43001982,0.3,-0.5,0.0001 +P,1707,145,549.5581032499999,0.3,12.70001000000002,0.0001 +P,1708,1532,1812.1070479900002,0.3,-14.199999999999989,0.0001 +P,1708,146,532.45574724,0.3,6.600000000000023,0.0001 +P,1710,1709,603.456201827,0.3,4.3999900000000025,0.0001 +P,1710,147,499.444162765,0.15,0,0.0001 +P,1711,1710,1780.16148273,0.3,17.400000000000006,0.0001 +P,1712,148,895.993102353,0.15,7.6000000000000085,0.0001 +P,1714,149,969.165137658,0.15,-1.2999999999999972,0.0001 +P,1716,1715,585.2954331320001,0.15,-6.599999999999994,0.0001 +P,1717,150,528.289283769,0.15,-7.099999999999994,0.0001 +P,1718,1523,1119.4932819100002,0.15,0,0.0001 +P,1719,1523,1119.4932819100002,0.15,0,0.0001 +P,1720,4139,801.093615014,0.3,1.3999999999999986,0.0001 +P,1722,1721,1332.26236312,0.5,-3.5,0.0001 +P,1722,151,324.103016433,0.15,0.5,0.00001 +P,1724,1722,1037.82620572,0.5,-1.5,0.0001 +P,1724,1723,5473.81229367,0.5,0,0.0001 +P,1726,1472,7903.96594457,1,0,0.00001 +P,1726,1725,619.736356205,1,-10,0.00001 +P,1725,1471,699.698678383,0.3,19,0.00001 +P,1741,1657,3048.40563863,0.5,1,0.0001 +P,1727,1728,1653.46886978,0.3,-41,0.0001 +P,2140,1729,3594.41479523,0.3,2,0.0001 +P,1511,153,2239.03256896,0.3,-14.400000000000006,0.0001 +P,1743,1742,1679.36509965,0.5,0,0.0001 +P,1745,1744,5126.00688933,0.5,-42.5,0.0001 +P,1747,1748,807.272304036,0.15,-0.10000000000002274,0.0001 +P,1748,154,504.966078887,0.15,0,0.0001 +P,1502,1748,807.272304036,0.15,-0.10000000000002274,0.0001 +P,1749,1482,853.5002261320001,0.15,0,0.00001 +P,1482,1751,1208.45142953,0.3,68.5,0.0001 +P,1751,1470,1747.1806119999999,0.3,0,0.0001 +P,1753,1752,670.020385539,0.15,9.100000000000001,0.0001 +P,1755,1754,670.020385539,0.3,9.100000000000001,0.00001 +P,1483,155,501.46496367399993,0.3,0.10000999999999749,0.0001 +P,1756,156,521.280836388,0.15,0.10000000000000142,0.0001 +P,1810,1756,541.457642609,0.15,0.5,0.0001 +P,1768,1757,588.9181091720001,0.15,1,0.0001 +P,1758,1835,1037.81030487,0.3,2,0.0001 +P,1839,1759,2245.6645382899997,0.5,-3,0.0001 +P,1761,1509,598.261807149,0.3,0,0.0001 +P,1860,1761,583.8668230129999,0.5,0,0.0001 +P,1508,1864,574.2807077049999,0.3,-1.6999999999999957,0.0001 +P,1762,157,431.435927204,0.15,0.20000000000000284,0.0001 +P,1504,1762,337.10452061200004,0.3,1.9000000000000057,0.0001 +P,1764,1763,585.4009037530001,0.15,0,0.0001 +P,1873,1764,561.192454373,0.15,0.10000000000000853,0.0001 +P,1765,158,556.473964775,0.15,0,0.0001 +P,1873,1765,548.134015353,0.15,-0.09999999999999432,0.0001 +P,162,1777,642.196667578,0.3,0.6000099999999975,0.0001 +P,1453,1766,2437.5380147399997,0.3,139,0.0001 +P,1769,1768,1085.1341145,0.3,0,0.0001 +P,1771,159,504.020913722,0.3,0,0.0001 +P,1772,1771,610.581231562,0.3,0,0.0001 +P,1773,1772,674.887232424,0.3,0.5,0.0001 +P,1774,1773,3282.49020844,0.3,-0.5,0.0001 +P,1776,1775,1864.44781006,0.3,-71,0.0001 +P,1382,160,1186.91529912,0.15,3.3999900000000025,0.0001 +P,162,161,499.390174048,0.15,0,0.0001 +P,1779,163,498.71695529600004,0.15,-4,0.0001 +P,1778,162,2615.75939465,0.3,-42.30000000000001,0.0001 +P,1780,1779,481.678682967,0.15,-0.5,0.0001 +P,1766,1780,3870.80266449,0.3,-59.5,0.0001 +P,1781,164,506.74546792800004,0.15,1,0.0001 +P,1415,1781,511.372811429,0.15,4,0.0001 +P,1766,1415,514.967256227,0.15,0,0.00001 +P,1783,1782,1424.55897209,0.3,0.3999999999999986,0.0001 +P,1783,165,530.030153457,0.15,0.10000000000000142,0.0001 +P,1784,1783,1342.28751061,0.3,-1.3999999999999986,0.0001 +P,167,1785,1623.92981878,0.3,-4.299999999999997,0.0001 +P,167,166,582.2449757630001,0.15,0,0.0001 +P,1786,167,2623.32272057,0.3,1.5,0.0001 +P,1789,1787,666.08212054,0.3,0,0.0001 +P,1789,1788,1175.94482629,0.3,-6.599999999999994,0.0001 +P,1412,168,1129.98100185,0.15,3.8999999999999986,0.0001 +P,1790,1479,714.4185785029999,0.3,-1.7000000000000028,0.00001 +P,1790,169,445.959388826,0.15,0,0.0001 +P,1791,1790,724.5671486089999,0.3,1,0.0001 +P,1792,170,358.611272938,0.3,0,0.0001 +P,1793,1792,673.6955733699999,0.3,0,0.0001 +P,1791,1792,696.002716438,0.3,0,0.0001 +P,1794,1793,633.040326596,0.3,-0.7999999999999972,0.0001 +P,1457,1794,1813.65416884,0.3,0,0.0001 +P,1795,171,404.056059223,0.15,0,0.0001 +P,1796,1795,1111.24162716,0.3,1.8000000000000043,0.0001 +P,1417,172,470.909542921,0.15,-1.0999999999999943,0.0001 +P,1796,1417,448.62134206999997,0.15,0,0.00001 +P,1796,1797,1117.53895074,0.3,0.9000000000000057,0.0001 +P,1797,173,483.219045595,0.15,2.5,0.0001 +P,1798,1797,559.020583737,0.3,5,0.0001 +P,1799,1798,1124.5280981600001,0.3,-0.5999999999999943,0.0001 +P,1801,174,514.307553786,0.15,0,0.0001 +P,1800,1801,926.467438847,0.15,0,0.00001 +P,1802,1801,926.467438847,0.15,0,0.00001 +P,1804,1803,1119.31337758,0.3,-1.3000000000000043,0.0001 +P,1806,175,507.32713438300004,0.15,0,0.0001 +P,1805,1806,937.417220423,0.15,0,0.00001 +P,1807,1806,937.417220423,0.15,0,0.00001 +P,1809,1808,2679.85851642,0.3,2.5,0.0001 +P,1809,176,562.8520529770001,0.15,0,0.0001 +P,1810,1809,1101.5123159099999,0.3,-4.299999999999997,0.0001 +P,1811,1810,1072.92212327,0.3,-0.10000000000000142,0.0001 +P,1813,1812,1082.05609834,0.3,-4.100000000000001,0.0001 +P,1813,177,551.370574837,0.15,0,0.0001 +P,1814,1813,534.7816623069999,0.3,0,0.0001 +P,155,1814,2479.39809672,0.3,-151.00001,0.0001 +P,1416,178,490.336111134,0.15,0,0.0001 +P,155,1416,523.172030211,0.15,0,0.0001 +P,1816,179,542.377153256,0.3,0,0.0001 +P,1816,1815,1604.16848557,0.15,-0.09999999999999432,0.0001 +P,1817,1816,1604.16848557,0.3,0.09999999999999432,0.00001 +P,1820,1818,1073.51957337,0.15,0,0.00001 +P,1820,1819,1073.51957337,0.15,0,0.0001 +P,1496,180,485.32157877799995,0.15,-0.30000000000000426,0.0001 +P,1821,1496,1177.19424365,0.3,-5.099999999999994,0.0001 +P,1823,1822,577.911435791,0.3,0,0.0001 +P,1824,1823,1102.2444834,0.3,-2.200000000000003,0.0001 +P,1825,1824,999.7378382320001,0.3,0,0.0001 +P,1978,1825,1713.5596157799998,0.3,-148.5,0.0001 +P,1827,1826,583.5016146150001,0.15,0,0.0001 +P,1828,1827,2534.26259178,0.15,-148.5,0.0001 +P,1829,1978,1203.5121096300002,0.15,0,0.0001 +P,1830,221,1203.5121096300002,0.3,0,0.0001 +P,1831,181,1251.2026623900001,0.15,6.699999999999989,0.0001 +P,1739,1835,2245.6645382899997,0.3,-3,0.0001 +P,1841,1838,324.22300098700003,0.3,0,0.0001 +P,1843,1841,623.934724963,0.3,0,0.0001 +P,1852,1845,912.7148440469999,0.3,-0.10000000000002274,0.00001 +P,1850,1852,604.018727995,0.3,0,0.00001 +P,1849,1848,1135.31606106,0.3,0,0.00001 +P,1851,1850,1108.56890242,0.3,0.6000000000000227,0.0001 +P,1513,1449,1014.3875647,0.3,-0.5,0.0001 +P,1853,1852,1150.46646134,0.3,-0.20001999999999498,0.0001 +P,1856,1855,1810.30232284,0.15,0.3000200000000177,0.0001 +P,1514,182,923.961448195,0.3,1.7000000000000028,0.0001 +P,1519,183,557.14288998,0.3,0,0.0001 +P,1859,1858,1368.0536218599998,0.3,0,0.0001 +P,1511,184,397.29447592099996,0.15,3.8999999999999915,0.0001 +P,1509,1511,565.852989768,0.3,-39.89999999999999,0.0001 +P,1861,185,542.387980808,0.15,0.20000000000000284,0.0001 +P,1862,1861,540.82527324,0.3,2.3999999999999915,0.0001 +P,1862,186,552.4144355029999,0.3,2,0.0001 +P,1863,1862,563.338509564,0.3,0.7000000000000028,0.0001 +P,1864,1863,580.474948082,0.3,0.3999999999999986,0.0001 +P,1866,187,535.26693416,0.3,1,0.0001 +P,1867,1866,531.848624675,0.3,-0.8000000000000043,0.0001 +P,1867,188,495.03176534100004,0.15,0.09999999999999432,0.0001 +P,1506,1867,518.4879954200001,0.3,0,0.0001 +P,1868,1506,1765.74410764,0.3,5,0.0001 +P,1869,1505,1148.15825881,0.3,-1,0.0001 +P,190,1658,1148.15825881,0.3,-1,0.0001 +P,1501,1504,670.546208698,0.3,0.5999999999999943,0.0001 +P,1870,1501,598.4667463549999,0.3,0,0.0001 +P,1871,1495,3265.40424994,0.3,0,0.0001 +P,1875,1872,3245.97851365,0.3,154.79998999999998,0.0001 +P,1874,1873,609.600393429,0.15,-0.10000000000000853,0.0001 +P,1874,191,450.47080344399996,0.15,0.5,0.0001 +P,1875,1874,1788.22194836,0.15,-128.1,0.0001 +P,1876,192,405.316445361,0.15,0,0.0001 +P,1899,1896,603.944728617,0.15,0,0.0001 +P,1877,1918,1242.2620118300001,0.3,41.89999,0.0001 +P,1878,1877,1248.11431494,0.15,0,0.0001 +P,205,1879,939.4806221389999,0.3,0,0.0001 +P,1880,193,505.13403209700004,0.15,-10.600009999999997,0.0001 +P,1881,1880,526.841678321,0.15,10.200009999999992,0.0001 +P,1881,194,416.300438224,0.15,0,0.0001 +P,1882,1881,504.9439304410001,0.15,0.9000000000000057,0.0001 +P,1878,1882,624.0608097319999,0.15,0,0.0001 +P,1489,1882,592.227636725,0.15,0,0.00001 +P,1883,195,712.7941002590001,0.15,1.2999999999999972,0.0001 +P,1963,1883,159.683500769,0.3,-0.5,0.0001 +P,1884,196,540.12379809,0.15,0,0.0001 +P,198,1884,1676.2303913800001,0.15,-5.8999900000000025,0.0001 +P,198,197,567.0070714960001,0.15,-5.299980000000005,0.0001 +P,1490,198,593.370614379,0.15,0.3999900000000025,0.0001 +P,1885,1886,1625.3388545100001,0.15,0.700019999999995,0.0001 +P,1886,199,741.7158840230001,0.3,-0.6000099999999975,0.0001 +P,1887,200,541.263443671,0.3,3.599989999999991,0.0001 +P,1887,201,562.0632635740001,0.15,0,0.0001 +P,1889,1887,1129.77862002,0.15,9.699990000000014,0.0001 +P,1888,1889,996.228486293,0.15,0,0.00001 +P,1890,1889,996.228486293,0.15,0,0.00001 +P,1891,202,546.983078841,0.15,0,0.0001 +P,1491,1891,1713.1425143000001,0.3,0.19999999999998863,0.0001 +P,1484,1892,584.6218885320001,0.3,0,0.0001 +P,1894,1893,1016.6003775900001,0.15,0,0.0001 +P,1895,1894,1592.4527080999999,0.15,0.5,0.0001 +P,1903,1897,651.5011026450001,0.3,0,0.0001 +P,1902,203,425.297993313,0.15,0,0.0001 +P,1898,1899,4974.39413317,0.15,7.899999999999977,0.0001 +P,1900,1899,485.351879908,0.15,0,0.0001 +P,1901,1900,514.0629883209999,0.15,0,0.0001 +P,1902,1901,525.686844662,0.15,0,0.0001 +P,1903,1902,543.41653709,0.3,0,0.0001 +P,1904,1903,4799.31819832,0.3,7.899999999999977,0.0001 +P,1905,1904,1593.6492953000002,0.3,-1.3000099999999861,0.0001 +P,1916,1906,2360.4980010699996,0.15,-0.10000999999999749,0.0001 +P,1907,1459,2887.1964533,0.3,8,0.0001 +P,1908,1907,604.929101619,0.3,0,0.0001 +P,1909,1908,1239.5061837300002,0.3,0,0.0001 +P,1920,1910,1249.8959704099998,0.3,-1,0.0001 +P,1911,1912,960.8850207529999,0.15,0,0.0001 +P,1912,204,513.094521946,0.15,0,0.0001 +P,1913,1912,518.644177013,0.15,0,0.0001 +P,1914,1913,926.226315932,0.15,0,0.0001 +P,1918,1915,421.243268244,0.15,0,0.0001 +P,1917,1916,590.329547552,0.15,0,0.0001 +P,1918,1917,2468.2887562,0.15,6.1000099999999975,0.0001 +P,1920,1919,470.720139355,0.15,0.299980000000005,0.0001 +P,1488,1920,2384.4519849400003,0.3,63.50001,0.0001 +P,1921,205,1636.20022801,0.3,0.6999999999999886,0.0001 +P,1922,1924,1047.42601304,0.3,0,0.0001 +P,1924,1923,572.812520029,0.3,0,0.0001 +P,1931,1926,583.585949207,0.3,-0.6999999999999886,0.0001 +P,1926,1925,1040.82513006,0.15,0,0.0001 +P,1927,1926,1040.82513006,0.15,0,0.0001 +P,1929,1928,929.986061935,0.15,0.6000000000000014,0.00001 +P,1936,1929,527.960068817,0.3,0,0.00001 +P,1961,1930,1218.1473675,0.3,15,0.0001 +P,1932,206,561.4178605320001,0.15,0.9000100000000089,0.0001 +P,1481,207,535.54706875,0.15,0.40001000000000886,0.0001 +P,1932,1481,583.6292305329999,0.3,0.19999000000001388,0.0001 +P,1933,1932,2263.2677645500003,0.3,-1.5,0.0001 +P,1934,1933,3226.3859684699996,0.3,107.69999999999999,0.0001 +P,1935,208,480.720639927,0.15,0.3999999999999986,0.0001 +P,1418,209,451.76720959,0.15,0,0.0001 +P,1411,210,552.179691771,0.3,0,0.0001 +P,1936,1411,518.151674756,0.15,0,0.0001 +P,1413,211,445.403574916,0.15,0,0.0001 +P,1937,1413,375.974842627,0.15,0,0.0001 +P,1937,1936,1129.91487881,0.3,2.6000000000000014,0.0001 +P,1938,1937,1019.8020653699999,0.3,5.799999999999997,0.0001 +P,212,1939,3213.71245279,0.3,9,0.0001 +P,1941,212,504.21602577900006,0.3,0,0.00001 +P,1941,1940,957.0818470270001,0.15,0,0.00001 +P,1942,1941,957.0818470270001,0.15,0,0.00001 +P,1944,1943,505.070442313,0.15,-2.799999999999997,0.0001 +P,1945,1944,2537.63872113,0.15,2.299999999999997,0.0001 +P,1947,1946,10,0.15,0,0.00001 +P,1480,1948,526.264679405,0.3,-0.6000000000000014,0.0001 +P,1480,213,543.935505355,0.15,6.299999999999997,0.0001 +P,1951,1950,1472.23378295,0.3,-8,0.0001 +P,1951,214,517.606675991,0.15,2.8999999999999986,0.0001 +P,1952,1951,1056.7080274,0.3,-0.30000000000000426,0.0001 +P,1954,215,471.499713084,0.3,0,0.0001 +P,1954,1953,874.120196286,0.15,0,0.0001 +P,1955,1954,874.120196286,0.15,0,0.0001 +P,1957,1956,1030.11502197,0.3,0,0.0001 +P,1957,216,386.430104815,0.3,-1.4000000000000057,0.0001 +P,1958,1957,624.544266385,0.3,1.4000000000000057,0.0001 +P,1959,217,496.837937272,0.15,-0.5999899999999911,0.0001 +P,1959,218,498.130442845,0.15,11.400010000000009,0.0001 +P,1960,1959,1068.5926641,0.3,36.39999,0.0001 +P,1960,219,372.98814624100004,0.15,3,0.0001 +P,1961,1960,508.454226616,0.3,20.599999999999994,0.0001 +P,1962,1961,1294.0847897600001,0.3,5.5,0.0001 +P,1964,1963,623.154351908,0.3,-4.099999999999994,0.0001 +P,1414,220,503.259122771,0.15,0,0.0001 +P,1964,1414,504.149104667,0.15,0,0.0001 +P,1965,1958,671.21062122,0.15,0,0.0001 +P,1969,1966,411.20176264,0.5,0,0.0001 +P,1977,1967,10,0.3,0,0.00001 +P,1968,1476,4163.52325183,0.3,3,0.0001 +P,1476,1469,3348.60465177,0.5,44,0.0001 +P,1976,1975,9443.4351654,0.5,19,0.0001 +P,1462,1977,687.750720202,0.5,2,0.00001 +P,1603,1142,1647.95858224,0.5,-1.5999999999999943,0.00001 +P,1991,3680,541.40848686,0.3,0,0.0001 +P,1993,1991,526.46666599,0.3,0,0.0001 +P,1992,1993,1560.19193484,0.3,12,0.0001 +P,1994,224,388.336987038,0.15,2.3799999999999955,0.00001 +P,1994,2628,1225.49756097,0.5,-2.8900000000000006,0.00001 +P,2147,2081,1722.51762122,0.5,-1.5999999999999943,0.00001 +P,2755,3988,512.7155283440001,0.5,1,0.0005 +P,1996,3102,581.19428459,0.75,0,0.00001 +P,2136,1997,581.19428459,0.75,0,0.00001 +P,1998,2143,653.656164748,0.75,0,0.00001 +P,308,1999,653.656164748,0.75,0,0.00001 +P,2001,2000,797.110762033,1,0,0.00001 +P,2732,2787,1909.8827597200002,0.5,0,0.00001 +P,4109,2789,1261.74180206,0.5,0,0.00001 +P,2003,2013,512.539494564,1,0,0.00001 +P,2020,2003,1629.33962775,1,0,0.00001 +P,2004,2733,1987.15936232,0.5,0,0.00001 +P,2005,2004,799.843648664,0.5,0,0.00001 +P,2006,2005,749.8566800399999,0.5,0,0.00001 +P,2007,2006,635.500983206,0.5,0,0.00001 +P,2015,2007,1025.69399974,0.5,0,0.00001 +P,2008,1602,1517.98119868,0.5,-1.5999999999999943,0.00001 +P,2009,2008,716.323293907,0.5,0,0.00001 +P,2011,2009,645.4305489449999,0.5,0,0.00001 +P,2010,2785,672.02849164,0.5,0,0.00001 +P,2018,2010,1313.46215658,0.5,0,0.00001 +P,2019,2011,812.674062228,0.5,0,0.00001 +P,2013,2012,430.426753516,1,0,0.00001 +P,2041,2047,1593.44893437,1,0,0.00001 +P,2044,2798,791.825291597,1,0,0.00001 +P,2029,2030,1357.1718067,1,0,0.00001 +P,2016,2017,2072.84971283,0.5,0,0.00001 +P,2798,2050,845.2190366980001,1,0,0.00001 +P,2022,2021,797.110762033,1,0,0.00001 +P,2030,2026,294.37414385,1,0,0.00001 +P,2047,2055,1029.21344276,1,0,0.00001 +P,2024,2023,1167.1407624,1,0,0.00001 +P,2025,2024,294.37414385,1,0,0.00001 +P,2034,2031,1103.17340031,1,0,0.00001 +P,2033,2032,1937.3745841,1,0,0.00001 +P,2051,2034,845.2190366980001,1,0,0.00001 +P,2745,2036,1876.73563506,0.5,0,0.00001 +P,2036,2035,289.095036995,0.5,0,0.00001 +P,2038,2037,2338.69346288,1,0,0.00001 +P,2035,2040,707.753763738,0.5,0,0.00001 +P,2040,2039,619.480736265,0.5,0,0.00001 +P,2052,2046,1029.21344276,1,0,0.00001 +P,2046,2045,1184.2082311899999,1,0,0.00001 +P,2049,2048,620.618108466,1,0,0.00001 +P,2054,2049,622.804973628,1,0,0.00001 +P,2058,2054,665.6997824360001,1,0,0.00001 +P,2053,2054,609.141601095,0.5,0,0.00001 +P,2060,2058,2090.62891195,1,0,0.00001 +P,2056,2060,1047.25991887,1,0,0.00001 +P,2057,2058,825.294323359,0.5,0,0.00001 +P,2680,2061,476.126912011,0.15,0,0.0001 +P,2062,2101,1110.68436558,0.15,0,0.00001 +P,1641,1132,922.902514264,0.75,0,0.00001 +P,4092,2069,1062.22852787,0.5,0,0.0005 +P,2071,239,458.555843995,0.15,0,0.0001 +P,2071,2421,594.896382119,0.5,0,0.0001 +P,2070,2071,1719.10855716,0.5,0,0.0001 +P,2073,2072,635.878781523,0.5,-1,0.0001 +P,2188,2074,484.413919393,0.3,0,0.0001 +P,2075,2076,624.6181489119999,0.3,-1.8999999999999986,0.0001 +P,2080,2079,417.375291024,0.3,0,0.0001 +P,3160,2084,496.748510458,0.15,10,0.0001 +P,2084,240,567.994373002,0.15,0,0.0001 +P,2084,2083,552.0542668590001,0.15,0,0.0001 +P,3121,2086,608.638408549,0.3,0.10000000000002274,0.0001 +P,2086,241,430.462359097,0.3,0,0.0001 +P,2086,2085,1744.9318549099999,0.3,-98.70001000000002,0.0001 +P,1599,242,497.662127971,0.75,0.4000000000000057,0.00001 +P,2087,2986,2528.30707029,0.15,0,0.0001 +P,243,2087,2262.37021805,0.5,2.700000000000003,0.0001 +P,2088,2089,654.908659409,0.15,0,0.00001 +P,2090,244,602.187639439,0.15,0,0.00001 +P,2091,245,499.841491372,0.15,0,0.00001 +P,2088,246,458.734342479,0.15,0,0.00001 +P,2093,247,438.95601781,0.15,0,0.00001 +P,2094,248,423.625944511,0.15,8,0.00001 +P,2095,249,393.938301559,0.15,6,0.00001 +P,2091,2090,633.1687938890001,0.15,0,0.00001 +P,2092,2091,1259.0402510000001,0.15,0,0.00001 +P,2093,2088,643.330296841,0.15,0,0.00001 +P,2094,2093,627.452313351,0.15,-6,0.00001 +P,2095,2094,596.215186915,0.15,0,0.00001 +P,2096,2095,553.8234729530001,0.15,7,0.00001 +P,2096,2098,1736.30284783,0.15,7,0.00001 +P,2385,2096,1218.13598613,0.15,-1,0.00001 +P,2097,2386,1209.7582353,0.15,-48,0.00001 +P,2098,251,378.89549280200004,0.15,0,0.00001 +P,2099,2098,1287.24273957,0.15,-21,0.00001 +P,2099,252,471.882514692,0.15,0,0.00001 +P,2100,2099,635.5728704559999,0.15,16,0.00001 +P,2100,253,571.006263385,0.15,0,0.00001 +P,2101,254,579.4249345559999,0.15,0,0.00001 +P,2062,255,582.26100314,0.15,0,0.00001 +P,2102,2062,1116.0985033499999,0.15,0,0.00001 +P,2102,256,572.821687963,0.15,0,0.00001 +P,2103,2102,601.968598742,0.15,-14,0.00001 +P,2103,257,294.865119112,0.15,0,0.00001 +P,2104,2103,1140.63136888,0.15,-8,0.00001 +P,2104,258,581.532249617,0.15,0,0.00001 +P,2105,259,568.64204734,0.15,5,0.00001 +P,2105,260,508.95030005599995,0.15,-3,0.00001 +P,2106,2105,1077.2563719,0.15,15,0.00001 +P,2107,2106,633.135972682,0.15,0,0.00001 +P,2107,261,432.337948734,0.15,0,0.00001 +P,2110,2107,3714.3208632700002,0.15,-141,0.00001 +P,2109,262,373.894456074,0.15,-8,0.00001 +P,2109,2108,3623.20780662,0.3,-83,0.00001 +P,2110,2109,3091.02854351,0.3,-54,0.00001 +P,411,2110,1261.3274063,0.3,-8,0.00001 +P,2112,2111,1131.41186892,0.3,1,0.0001 +P,2117,2114,614.999958571,0.5,1,0.00001 +P,2115,2117,1327.90960631,0.3,0,0.00001 +P,3273,2126,6250.87088353,1,0,0.00001 +P,306,2128,1309.94648233,1,0,0.00001 +P,306,2170,1055.9922055299999,0.5,0,0.00001 +P,2131,2129,579.728584507,0.75,0,0.0001 +P,2130,2131,604.246978811,0.75,-2,0.0001 +P,2132,2133,1169.86610739,0.75,0,0.0001 +P,2134,2137,1371.10338634,0.3,0,0.00001 +P,3102,2135,594.66286161,0.3,0,0.00001 +P,2136,267,1239.77435417,0.75,0.7999999999999972,0.00001 +P,2138,2137,593.826774455,0.3,0,0.00001 +P,3202,2140,1715.4879928,0.3,2,0.0001 +P,2142,2143,608.9544670780001,0.75,0,0.00001 +P,2144,3252,1286.9820735199999,0.75,0,0.00001 +P,2145,1142,5932.61405453,0.5,-4.599999999999994,0.00001 +P,100,1599,4989.27690729,0.75,11.099999999999994,0.00001 +P,2149,1981,468.406056686,1,0,0.00001 +P,2151,268,675.258772289,0.3,-0.3000000000000007,0.0001 +P,4188,2152,1481.67902221,0.5,0,0.00001 +P,2163,2016,10,0.5,0,0.00001 +P,2165,2788,1433.73495112,0.5,0,0.00001 +P,2746,2745,892.3914882490001,0.5,0,0.00001 +P,2165,4108,1047.25991887,1,0,0.00001 +P,1599,2166,534.094763811,0.75,0.4000000000000057,0.00001 +P,2166,2167,370.732202112,0.5,1,0.00001 +P,2791,2035,2105.0981264,0.5,0,0.00001 +P,2168,2785,1350.42690701,0.5,0,0.00001 +P,2793,2057,2365.64658056,0.5,0,0.00001 +P,2169,2039,1562.90014401,0.5,0,0.00001 +P,2796,2053,1588.96021761,0.5,0,0.00001 +P,307,4111,1164.7852844699999,0.3,0,0.00001 +P,2178,3985,605.774615107,0.5,3,0.0005 +P,2811,313,496.275575731,0.15,0,0.0001 +P,595,2811,504.294873386,0.3,-0.29999999999999716,0.0001 +P,2182,3621,618.217379776,0.15,0,0.0001 +P,871,1236,1016.0924655100001,0.15,0,0.0001 +P,1420,2183,997.695123062,0.3,0,0.0001 +P,2184,2185,1263.3214989399999,0.5,1,0.0001 +P,2189,2188,433.311659111,0.3,0,0.0001 +P,2190,2188,441.832919981,0.3,0,0.0001 +P,2192,2193,1180.34405773,0.3,24,0.0001 +P,2194,3110,1681.27934987,0.3,-67,0.0001 +P,2199,325,510.18058351999997,0.15,0,0.0001 +P,2210,2195,582.563942287,0.3,0,0.0001 +P,2197,2196,2838.62988365,0.3,52,0.0001 +P,2198,2197,575.174369675,0.3,0,0.0001 +P,2208,2198,619.1163957030001,0.3,0,0.0001 +P,2208,2199,2956.7331222400003,0.15,0,0.0001 +P,2209,326,436.091291369,0.15,0,0.0001 +P,2200,327,2213.30619702,0.15,0,0.0001 +P,2201,2200,1643.35495441,0.3,0,0.0001 +P,2204,2201,523.265422678,0.3,0,0.0001 +P,2202,2209,611.482261458,0.15,0,0.0001 +P,2203,2202,2919.60954591,0.3,0,0.0001 +P,2204,2203,628.892698342,0.3,0,0.0001 +P,2205,2204,620.5200613879999,0.3,0,0.0001 +P,2206,2205,580.228215975,0.3,0,0.0001 +P,2207,2206,589.2347591419999,0.3,0,0.0001 +P,2215,2207,1231.91933209,0.3,-57,0.0001 +P,2209,2208,1216.0623607900002,0.3,0,0.0001 +P,2216,2139,4179.67964576,0.3,3,0.0001 +P,3830,2216,571.963829238,0.3,0,0.0001 +P,329,2218,1723.59771133,0.5,17,0.00001 +P,3306,2221,624.445464784,0.3,-1,0.0001 +P,3787,2222,438.73655065400004,0.5,0.8999999999999986,0.0005 +P,2235,2236,475.868309023,0.15,0,0.0001 +P,2225,338,532.8427991880001,0.15,0,0.0001 +P,2225,2223,1090.87090121,0.15,0,0.0001 +P,2223,339,537.1206758440001,0.15,0,0.0001 +P,2224,340,1107.6028585899999,0.3,2,0.0001 +P,2224,341,499.410028384,0.3,3,0.0001 +P,2228,2224,424.62966792599997,0.3,0.29999999999999716,0.0001 +P,2228,2227,510.98010106500004,0.15,0.29999999999999716,0.0001 +P,2226,2225,1522.25041037,0.3,6,0.0001 +P,2227,2226,458.315055483,0.15,0,0.0001 +P,2229,2228,761.4295926899999,0.15,-0.29999999999999716,0.0001 +P,2230,2229,515.359328861,0.3,0,0.0001 +P,2232,2230,1029.97325172,0.15,2,0.0001 +P,2232,2231,529.126143583,0.15,0,0.0001 +P,2233,2232,492.73955067699995,0.15,2,0.0001 +P,2234,2233,487.010553426,0.3,0,0.0001 +P,2235,2234,480.352489634,0.3,0,0.0001 +P,2236,342,964.369709953,0.15,0,0.0001 +P,2240,2246,1957.1863844,0.3,5,0.0001 +P,2237,345,825.6423340059999,0.15,0,0.0001 +P,2238,343,486.943308657,0.3,0.8000000000000043,0.0001 +P,2239,2238,506.571522217,0.15,0.6999999999999957,0.0001 +P,2239,344,528.213155263,0.15,1.5,0.0001 +P,345,2241,543.2370802739999,0.3,1,0.0001 +P,345,2254,552.7857719230001,0.15,1,0.0001 +P,2245,346,519.021088945,0.15,0,0.0001 +P,2245,347,500.92979571899997,0.15,0,0.0001 +P,2246,2244,524.554715806,0.15,0,0.0001 +P,2242,2239,1003.6165453100001,0.15,3.6000000000000014,0.0001 +P,2242,348,516.7974009029999,0.15,1,0.0001 +P,2251,2250,516.375228216,0.15,-1,0.0001 +P,2240,2251,513.791992863,0.15,0,0.0001 +P,2241,2240,1752.3746908599999,0.3,6,0.0001 +P,2244,2242,536.934759195,0.15,0,0.0001 +P,2243,349,507.46841873399995,0.15,0,0.0005 +P,2244,2243,531.118234534,0.3,0,0.0001 +P,2247,2245,538.9779655069999,0.15,0,0.0001 +P,2247,2246,350.79074098899997,0.15,0,0.0001 +P,2250,2247,1626.5095402,0.15,6,0.0001 +P,2248,350,467.77978584699997,0.15,0.5,0.0001 +P,2249,2248,477.334587867,0.3,0,0.0001 +P,2250,2249,493.1581915,0.15,0.5,0.0001 +P,2253,2251,1566.72015164,0.15,4,0.0001 +P,2252,351,451.54529576699997,0.15,0.5,0.0001 +P,2253,2252,436.965146476,0.15,0.5,0.0001 +P,2254,2253,558.936377443,0.15,2,0.0001 +P,2255,2254,2101.64899338,0.15,1,0.0001 +P,2255,352,478.193984568,0.15,0,0.0001 +P,2256,2255,1358.78294571,0.15,4,0.0001 +P,2256,353,601.3897627790001,0.3,0,0.0001 +P,354,1660,933.900264904,0.3,0,0.0001 +P,2258,355,512.69199575,0.15,0,0.0001 +P,2259,2258,523.319348161,0.15,0,0.0001 +P,2261,2259,542.831961192,0.15,-13,0.0001 +P,2261,2260,495.94097250500005,0.15,0,0.0001 +P,2262,2261,535.834922185,0.15,-3,0.0001 +P,2380,2262,1041.0338531500001,0.15,0,0.0001 +P,2264,2263,849.726981573,0.15,0,0.00001 +P,2328,2374,1120.53602956,0.15,4,0.0001 +P,2321,2322,1857.4362606299999,0.3,72,0.0001 +P,2265,2289,594.9196326910001,0.3,0,0.0001 +P,2279,2265,1071.08255724,0.15,0,0.0001 +P,2267,2266,603.232926185,0.3,0,0.00001 +P,2268,2297,588.0527201880001,0.3,0,0.0001 +P,2269,2268,603.232926185,0.3,0,0.0001 +P,2283,2269,610.0231176570001,0.3,0,0.0001 +P,2271,2270,574.788124968,0.3,0,0.00001 +P,2272,2304,559.136428313,0.3,0,0.0001 +P,2273,2272,574.788124968,0.3,0,0.0001 +P,2288,2273,553.969279324,0.3,0,0.0001 +P,1052,2332,611.7949913179999,0.15,0,0.0001 +P,370,2274,3158.29097974,0.3,14,0.0001 +P,2349,2353,836.558384207,0.15,-56,0.0001 +P,2275,381,6657.25996873,0.3,4,0.0001 +P,2281,2276,405.014225023,0.15,0,0.0001 +P,400,2284,1198.28170526,0.3,0,0.0001 +P,2277,2283,517.6633909560001,0.15,0,0.0001 +P,2302,2376,3191.4079960100003,0.3,41,0.0001 +P,2302,356,440.236747094,0.15,-2,0.0001 +P,2278,357,538.90906942,0.15,0,0.0001 +P,2298,2278,496.76988199,0.15,0,0.0001 +P,2298,358,2455.24281586,0.15,0,0.0001 +P,2304,359,557.03165542,0.3,0,0.0001 +P,2280,2279,514.007411684,0.15,0,0.0001 +P,2289,2291,578.322919301,0.3,0,0.0001 +P,2295,2293,625.8177008619999,0.3,0,0.0001 +P,2283,2282,634.383060322,0.3,0,0.0001 +P,2284,2285,2314.86132186,0.3,0,0.0001 +P,2286,359,554.486586258,0.3,0,0.0001 +P,2285,2300,558.316569947,0.3,0,0.0001 +P,2287,2286,558.7054279409999,0.3,0,0.0001 +P,2288,2299,547.668731956,0.3,0,0.0001 +P,2290,2289,397.604224654,0.3,0,0.0001 +P,2292,2291,699.003399909,0.3,0,0.0001 +P,2292,2293,633.66888455,0.3,0,0.0001 +P,2294,2293,476.563545451,0.15,0,0.0001 +P,2321,2298,5206.82807854,0.15,0,0.0001 +P,2301,2299,1101.3886328199999,0.3,0,0.0001 +P,2301,2300,546.807726427,0.3,0,0.0001 +P,2367,2302,3091.88547938,0.3,-155,0.0001 +P,1043,2303,1045.90530728,0.3,0,0.0001 +P,2305,360,556.2273307109999,0.15,-1,0.0001 +P,2383,2305,1210.2035533199999,0.15,0,0.0001 +P,2306,361,553.5433339269999,0.15,0,0.0001 +P,2307,2384,633.144923582,0.15,2,0.0001 +P,2308,362,555.5905180560001,0.15,2,0.0001 +P,2309,363,471.433552012,0.15,0,0.0001 +P,2387,2309,1213.35729816,0.15,-3,0.0001 +P,2348,364,465.21223642800004,0.15,0,0.0001 +P,2310,2347,619.370975757,0.3,0,0.0001 +P,2311,2310,598.0872664809999,0.3,0,0.0001 +P,2312,2311,599.187444979,0.3,0,0.0001 +P,2348,2312,1255.19436721,0.3,-91,0.0001 +P,2323,2326,1248.79785722,0.3,8,0.0001 +P,2333,2349,737.17940094,0.3,12,0.0001 +P,2313,365,532.836789812,0.15,0.20001999999999498,0.0001 +P,2314,2313,543.016423334,0.15,0.3999900000000025,0.0001 +P,2314,366,462.996187422,0.15,2,0.0001 +P,381,2320,1345.26942929,0.3,2,0.0001 +P,392,2314,535.567316285,0.15,0,0.0001 +P,392,2338,3672.15507113,0.3,9,0.0001 +P,2376,367,526.0310912140001,0.15,0,0.0001 +P,2371,368,589.7198880999999,0.15,0,0.0001 +P,2371,2325,1165.59092197,0.3,2,0.0001 +P,2315,2356,481.75134111700004,0.3,2,0.0001 +P,2316,2315,459.75069491,0.3,0,0.0001 +P,2357,2316,462.068210769,0.3,7,0.0001 +P,13,369,439.390985142,0.15,0,0.0001 +P,13,2318,2272.00469085,0.3,-23,0.0001 +P,371,2317,1336.81927491,0.5,-2,0.0001 +P,2368,372,581.62148903,0.15,3,0.0001 +P,2368,386,4164.386956310001,0.3,110,0.0001 +P,2318,1054,2310.38818524,0.3,-45,0.0001 +P,2318,373,448.627284728,0.15,8,0.0001 +P,2319,2377,525.051234913,0.3,-1,0.0001 +P,2319,2379,488.12697456800004,0.15,-1,0.0001 +P,2378,2319,2243.27493814,0.3,14,0.0001 +P,2378,374,574.60002435,0.15,0,0.0001 +P,2320,375,509.014980554,0.15,3,0.0001 +P,2320,2372,1188.62378983,0.3,3,0.0001 +P,383,376,532.54884721,0.15,0,0.0001 +P,383,377,2760.9145528500003,0.3,0,0.0001 +P,2346,378,348.93106928099996,0.15,0,0.0001 +P,2346,2321,1248.63705222,0.3,-5,0.0001 +P,2327,2323,638.173314773,0.15,0,0.0001 +P,2324,379,538.0541846619999,0.15,-1,0.0001 +P,1050,2324,534.786165787,0.15,0,0.0001 +P,2325,380,585.057941264,0.15,0,0.0001 +P,2325,2370,4718.44550153,0.3,0,0.0001 +P,1025,382,569.133746031,0.15,0,0.0001 +P,2326,383,3557.27058544,0.3,0,0.0001 +P,2326,384,506.43605205099993,0.15,0,0.0001 +P,2329,2328,849.726981573,0.15,0,0.0001 +P,2330,2329,604.089539533,0.15,0,0.0001 +P,2331,2330,613.556813913,0.3,0,0.0001 +P,2332,2331,649.09466743,0.3,0,0.0001 +P,2334,2333,400.346335761,0.3,35,0.0001 +P,2335,2334,435.193212865,0.3,0,0.0001 +P,2354,2335,415.959341348,0.3,36,0.0001 +P,2336,385,1217.26929266,0.15,0,0.0001 +P,2354,2336,579.957045863,0.15,0,0.0001 +P,386,401,605.340634508,0.3,0,0.0001 +P,2337,387,484.490055065,0.15,0,0.0001 +P,2359,2337,502.65718878499996,0.3,0,0.0001 +P,2359,394,474.931490038,0.15,0,0.0001 +P,2341,2364,557.0465200619999,0.3,-5,0.0001 +P,2340,2339,541.380469435,0.3,0,0.0001 +P,2342,2341,541.380469435,0.3,0,0.0001 +P,2343,2342,1051.69042677,0.3,-4,0.0001 +P,2343,388,562.1974814439999,0.15,0,0.0001 +P,2344,2343,907.627714819,0.3,-56,0.0001 +P,2345,2344,492.79171265499997,0.3,0,0.0001 +P,2375,2345,472.482846978,0.3,-56,0.0001 +P,2375,389,518.6311458810001,0.15,0,0.0001 +P,2347,2346,641.2393905690001,0.3,-6,0.0001 +P,2347,390,399.926714655,0.15,0,0.0001 +P,2349,2348,1383.25221903,0.3,0,0.0001 +P,2350,391,469.161323136,0.15,-56,0.0001 +P,2351,2350,451.010051302,0.15,0,0.0001 +P,2352,2351,460.317708455,0.15,0,0.0001 +P,2353,2352,452.445855935,0.15,0,0.0001 +P,2365,392,2329.00117844,0.3,-149,0.0001 +P,2365,2366,494.599751028,0.15,1,0.0001 +P,2355,2354,494.589766948,0.3,11,0.0001 +P,2356,2355,494.503937778,0.3,17,0.0001 +P,2356,393,396.003379876,0.15,5,0.0001 +P,394,2388,457.03882059399996,0.15,0,0.0001 +P,2358,2357,471.57773489299996,0.3,0,0.0001 +P,2360,2358,510.99610808200003,0.3,0,0.0001 +P,2360,2359,513.49408236,0.15,0,0.0001 +P,2361,2360,516.368568151,0.3,1,0.0001 +P,2362,2361,1014.64178681,0.3,0,0.0001 +P,2364,2362,531.765980321,0.3,2,0.0001 +P,2363,399,538.121376661,0.15,0,0.0001 +P,2364,2363,574.143852057,0.15,0,0.0001 +P,2366,395,1036.03128366,0.15,0,0.0001 +P,2367,2365,599.0410026879999,0.3,-1,0.0001 +P,2367,2366,487.74782098000003,0.15,0,0.0001 +P,2370,2368,618.229000913,0.3,10,0.0001 +P,2370,2369,579.511726629,0.15,0,0.0001 +P,2372,2371,593.223674978,0.3,7,0.0001 +P,2372,396,569.957292541,0.15,0,0.0001 +P,2373,1025,1655.79067707,0.3,2.3000000000000114,0.0001 +P,2374,2373,1164.6084719,0.3,-2.3000000000000114,0.0001 +P,2374,397,457.071038306,0.15,0,0.0001 +P,1058,1052,619.234355292,0.15,0,0.0001 +P,1058,398,470.219289416,0.15,0,0.0001 +P,16,2375,1583.2500642100001,0.3,38,0.0001 +P,2377,2376,1277.365614,0.3,0,0.0001 +P,2377,2379,616.050936673,0.15,0,0.0001 +P,2379,2382,3203.11291081,0.15,-108,0.0001 +P,2398,413,1806.14606326,0.3,-143,0.0001 +P,412,2395,606.241856351,0.3,15.399990000000003,0.0001 +P,2396,403,579.368966377,0.15,0,0.0001 +P,411,404,368.120310387,0.15,0,0.0001 +P,411,2401,2448.88175507,0.3,116,0.0001 +P,406,2393,1225.59309453,0.3,0.7000100000000202,0.0001 +P,408,2390,3097.6619025600003,0.3,-209,0.0001 +P,2390,405,651.875429163,0.3,-4.800000000000011,0.0001 +P,2402,406,603.441742251,0.3,-4.8999900000000025,0.0001 +P,2397,407,560.064790898,0.15,21,0.0001 +P,2397,2391,500.68352506799994,0.15,0,0.0001 +P,2393,408,1852.8673879,0.3,146.79998999999998,0.0001 +P,2393,2392,466.96647297600003,0.15,-0.40002000000004045,0.0001 +P,2395,409,466.02254402,0.15,0,0.0001 +P,1372,2394,1235.2187244699999,0.3,106,0.0001 +P,2399,2396,1116.46203352,0.15,0,0.0001 +P,2399,2397,501.324150082,0.15,0,0.0001 +P,2401,2398,613.450468524,0.3,1,0.0001 +P,2400,2399,544.355992973,0.15,-10,0.0001 +P,2401,2400,1601.6545789000002,0.15,-145,0.0001 +P,413,412,598.21650185,0.3,0,0.0001 +P,1168,2403,1017.0935572899999,0.5,0,0.00001 +P,2404,1168,774.047262552,0.5,0,0.00001 +P,2405,779,657.472387009,0.5,-1,0.0001 +P,2409,2408,982.110367805,0.5,3,0.0001 +P,2410,2409,498.70165241300003,0.5,1.6000099999999975,0.0001 +P,2410,2428,509.4368710179999,0.75,-0.3999900000000025,0.0001 +P,2411,414,499.44977799099996,0.15,0,0.0001 +P,2412,2411,514.405437949,0.15,0,0.0001 +P,2412,2416,5851.9487124,0.5,77,0.0001 +P,2429,2419,2715.95848841,0.5,0,0.0001 +P,429,2423,574.76129829,0.5,0,0.0001 +P,2417,2412,5095.22138038,0.5,0,0.0001 +P,2413,415,497.60326113499997,0.15,0,0.0001 +P,2417,2413,520.460964975,0.15,0,0.0001 +P,2415,2455,621.338303434,0.3,0,0.0001 +P,2415,2414,498.863414517,0.5,0,0.0001 +P,416,423,597.663033132,0.5,0,0.0001 +P,2416,416,598.468552951,0.5,0,0.0001 +P,2419,2417,2778.83443185,0.5,0,0.0001 +P,2419,2418,510.969802945,0.15,0,0.0001 +P,2421,2420,484.764356904,0.15,0,0.0001 +P,2421,2430,1697.00384474,0.5,0,0.0001 +P,2422,2425,1021.5701113299999,0.3,-41,0.0001 +P,2422,417,517.72684236,0.15,0,0.0001 +P,2423,2070,588.089234748,0.5,0,0.0001 +P,2423,2422,2893.26372698,0.3,0,0.0001 +P,419,418,483.711564709,0.15,0,0.0001 +P,2424,419,950.558703499,0.15,0,0.0001 +P,2424,420,504.137201423,0.15,0,0.0001 +P,425,2424,1662.22031345,0.15,0,0.0001 +P,425,2431,769.9451877470001,0.3,0,0.0001 +P,425,2432,1848.30509121,0.5,-120,0.0001 +P,2425,421,532.326631571,0.15,1,0.0001 +P,2425,2433,520.647972066,0.3,16,0.0001 +P,423,422,1815.4477104,0.5,-1,0.0001 +P,2427,425,4399.72440051,0.5,0,0.0001 +P,2427,2426,404.98662622499995,0.5,0,0.0001 +P,2428,2427,535.0266314510001,0.75,0,0.0001 +P,2430,2429,2180.18054765,0.5,0,0.0001 +P,2430,426,505.021630486,0.15,0,0.0001 +P,2431,427,463.145107396,0.3,0,0.0001 +P,2431,428,504.182771867,0.15,0,0.0001 +P,2432,429,2757.68246741,0.5,0,0.0001 +P,2432,430,468.40056705,0.15,0,0.0001 +P,2433,431,539.484817257,0.3,0,0.0001 +P,2433,432,506.95510847,0.15,25,0.0001 +P,2437,2446,532.031094233,0.3,-51,0.0001 +P,2434,433,2183.68350149,0.3,33,0.0001 +P,2434,434,542.891112361,0.15,3,0.0001 +P,2441,2435,632.5377317650001,0.3,-105,0.0001 +P,2441,2440,557.486660994,0.5,-45,0.0001 +P,2435,2434,608.869518227,0.3,4,0.0001 +P,2435,435,532.6949536,0.15,3,0.0001 +P,2436,2454,1225.10919106,0.3,0,0.0001 +P,2436,2449,613.8208579989999,0.5,0,0.0001 +P,2438,2437,534.214288426,0.3,-13.699999999999989,0.0001 +P,2450,2438,559.734906531,0.3,11.899999999999977,0.0001 +P,2450,436,485.946367025,0.15,-1.3000000000000114,0.0001 +P,2444,437,492.221335459,0.15,0,0.0001 +P,2444,2443,3026.62456424,0.5,-37,0.0001 +P,2448,438,503.512087104,0.15,0,0.0001 +P,2448,2447,638.268780802,0.5,2,0.0001 +P,2440,2439,540.263541808,0.5,0,0.0001 +P,2442,439,537.19740758,0.15,-2,0.0001 +P,2443,2441,1230.06571123,0.5,0,0.0001 +P,2443,2442,549.1747482009999,0.3,-87.19999999999999,0.0001 +P,2452,2444,2471.6939565099997,0.5,-10,0.0001 +P,2445,440,520.689407307,0.15,3,0.0001 +P,2452,2445,526.6265855849999,0.3,0,0.0001 +P,2446,441,1045.71327045,0.3,0,0.0001 +P,2447,442,495.949511143,0.15,1,0.0001 +P,2447,2453,647.831621758,0.5,-0.6000099999999975,0.0001 +P,443,2448,2459.63209006,0.5,-33,0.0001 +P,2449,443,1843.1081284699999,0.5,0,0.0001 +P,2451,2450,549.151726235,0.3,-0.19999999999998863,0.0001 +P,2453,2451,560.8525060300001,0.3,49.60001,0.0001 +P,2453,2452,1276.2132642,0.5,108.60001,0.0001 +P,2490,444,467.04966533199996,0.15,1.9000000000000057,0.0005 +P,2456,2458,561.760409247,0.3,-3,0.0005 +P,2456,445,520.470467748,0.3,0,0.0005 +P,2461,2457,557.685646337,0.5,-1,0.0001 +P,2457,2460,547.436529847,0.5,0,0.0005 +P,2459,2458,564.327514435,0.3,-2,0.0005 +P,2460,2459,1608.4696104,0.5,0,0.0005 +P,2463,2461,1135.61709784,0.5,0,0.0005 +P,2463,2462,518.623372388,0.3,0,0.0005 +P,2464,2463,2328.74333111,0.5,-5,0.0005 +P,2473,446,399.689170429,0.3,1.7000000000000028,0.0005 +P,2466,2465,474.407330759,0.15,0,0.0005 +P,2466,447,1239.26605175,0.5,-1.8999999999999986,0.0005 +P,2470,2466,2346.6155167,0.5,-15.900000000000006,0.0005 +P,2468,2467,443.12633385099997,0.15,0,0.0005 +P,2469,2468,439.64994400200004,0.15,0,0.0005 +P,2470,2469,457.25993623799997,0.15,1.0999999999999943,0.0005 +P,2472,2471,450.0112991,0.15,-8.5,0.0005 +P,2476,2474,1066.2928674300001,0.75,16.599999999999994,0.0005 +P,2483,2475,520.407397351,0.3,0,0.0005 +P,2483,2479,1056.00856842,0.75,-0.5,0.0005 +P,2477,2476,527.290928943,0.75,3.6000000000000085,0.0001 +P,2478,2477,547.5371634,0.75,-19.700000000000003,0.0005 +P,2481,2480,510.9718465600001,0.3,-0.20000000000000284,0.0005 +P,2484,2483,1470.61194776,0.75,34.3,0.0005 +P,2485,2484,481.4535471,0.75,0,0.0001 +P,2486,2485,479.472031857,0.75,0,0.0005 +P,2487,2486,475.749060137,0.75,0,0.0001 +P,2488,2487,482.856009421,0.75,0,0.0005 +P,2489,2488,488.641743233,0.75,0,0.0001 +P,2490,2489,987.356208242,0.75,10.900000000000006,0.0005 +P,2505,2503,988.529324403,0.15,0,0.0001 +P,2509,2491,547.208443137,0.15,0,0.0001 +P,2492,2495,573.556819462,0.5,-0.1999999999999993,0.0001 +P,2516,466,4306.698631079999,0.3,-0.7999999999999972,0.0001 +P,2493,2501,554.093609787,0.3,0,0.0001 +P,2502,2493,560.624393459,0.3,0,0.0001 +P,2521,2494,1025.78202921,0.15,-9,0.0001 +P,2495,2515,1154.74138044,0.3,5.699999999999996,0.0001 +P,2498,448,454.743731042,0.3,0,0.0001 +P,2496,2518,1593.58567527,0.15,-1.7000000000000028,0.0001 +P,2497,2496,526.8816277090001,0.3,0,0.0001 +P,2498,2497,1542.86641009,0.3,0.29999999999999716,0.0001 +P,2499,2498,479.716668695,0.15,-0.09999999999999432,0.0001 +P,2499,466,438.702806966,0.15,-0.5999999999999943,0.0001 +P,2504,2500,505.954409308,0.15,0,0.0001 +P,2501,454,1682.21785328,0.3,5,0.0001 +P,2503,2502,1127.48205208,0.15,5,0.0001 +P,2505,2504,508.38542385600005,0.15,-1,0.0001 +P,2507,449,550.6317932569999,0.15,1,0.0001 +P,2507,2520,1014.1558098500001,0.3,0,0.0001 +P,2520,2506,747.664471046,0.15,1,0.0001 +P,451,450,547.4106353880001,0.15,-3,0.0001 +P,453,451,2635.55203902,0.15,-2,0.0001 +P,453,452,542.235593429,0.15,0,0.0001 +P,455,453,1112.43675846,0.15,4,0.0001 +P,454,457,593.155992727,0.15,-3,0.0001 +P,454,2510,1120.40352596,0.15,7,0.0001 +P,457,455,1147.05925433,0.15,2,0.0001 +P,2508,456,525.80265076,0.15,0,0.0001 +P,457,2508,534.369410615,0.3,0,0.0001 +P,2510,2509,562.6788977279999,0.15,-3,0.0001 +P,2510,458,504.29452304,0.15,2,0.0001 +P,2511,459,515.3337939730001,0.15,0,0.0001 +P,2516,460,458.17524081,0.15,0,0.0001 +P,2512,2513,527.1212244520001,0.15,0,0.0001 +P,2512,2511,531.510699855,0.15,-1,0.0001 +P,2514,2513,1151.9146057,0.15,2,0.0001 +P,2515,2514,579.7276706389999,0.3,1.7000000000000028,0.0001 +P,2515,461,513.1938557980001,0.15,-0.29999999999999716,0.0001 +P,1366,462,525.5988014879999,0.15,1.4000000000000057,0.0001 +P,2517,2516,1413.5353399399999,0.15,1.8999999999999986,0.0001 +P,2517,464,517.4241926889999,0.15,2.299999999999997,0.0001 +P,2518,2517,539.968273157,0.15,-0.19999999999999574,0.0001 +P,2518,465,531.839828601,0.3,0.20000000000000284,0.0001 +P,466,2519,1191.37202406,0.15,0.6999999999999957,0.0001 +P,2563,2524,502.17969274100005,0.3,3.0999999999999943,0.0001 +P,2525,467,361.19451098599995,0.3,0,0.0001 +P,2542,2525,570.477610618,0.3,-6,0.0001 +P,2526,2558,529.956900336,0.3,24,0.0001 +P,2560,2526,544.4443444030001,0.3,0,0.0001 +P,2553,470,464.15656267400004,0.15,2,0.0001 +P,2547,2541,424.76781224,0.15,2,0.0001 +P,2527,468,515.259168744,0.3,-2.5,0.0001 +P,2529,2527,487.09082205600004,0.3,-2.5,0.0001 +P,2529,2528,472.165378528,0.15,0,0.0001 +P,2530,2529,942.616715783,0.3,3.5,0.0001 +P,2542,2531,432.97274111900003,0.15,0,0.0001 +P,2541,2546,460.074771973,0.3,38,0.0001 +P,2540,470,451.855661553,0.3,3,0.0001 +P,2540,2539,556.160079217,0.5,-29,0.0001 +P,2532,471,552.1092252779999,0.15,8,0.0001 +P,2533,2532,545.689525426,0.3,-8,0.0001 +P,2535,2533,544.1813379069999,0.5,0,0.0001 +P,2535,2534,518.865816325,0.15,0,0.0001 +P,2536,2535,2167.3127303,0.5,66,0.0001 +P,2536,472,518.620481379,0.15,0,0.0001 +P,2537,2536,583.312185419,0.5,-11,0.0001 +P,2537,473,512.375086053,0.15,-9,0.0001 +P,2539,2537,585.0352160770001,0.5,-50,0.0001 +P,2539,2538,448.493383574,0.15,-2,0.0001 +P,2553,2540,549.12299591,0.5,-1,0.0001 +P,474,2541,399.77781668399996,0.3,2,0.0001 +P,474,2543,541.235540692,0.3,34,0.0001 +P,474,2547,574.482359238,0.3,0,0.0001 +P,2543,2542,578.5233247479999,0.3,2,0.0001 +P,2543,2555,588.081982826,0.3,8,0.0001 +P,2544,475,507.15446884899995,0.3,3.5,0.0001 +P,2545,2544,535.167592611,0.3,3.5,0.0001 +P,2545,476,1486.44659503,0.15,8,0.0001 +P,2546,2545,966.179537217,0.3,-22,0.0001 +P,2546,477,500.09173201400006,0.15,-8,0.0001 +P,2548,2547,591.127775231,0.3,10,0.0001 +P,2549,2548,591.9512696,0.3,0.5,0.0001 +P,2550,2549,586.710048469,0.3,0.5,0.0001 +P,2550,2551,593.2811673040001,0.3,0,0.0001 +P,2551,478,496.22338287,0.3,9,0.0001 +P,2556,479,504.37712430000005,0.3,-4,0.0001 +P,2552,2551,1149.2397944,0.3,-5,0.0001 +P,2556,2552,559.92205598,0.3,0,0.0001 +P,2554,2553,534.6108144379999,0.5,-11.5,0.0001 +P,2555,2554,1105.08564211,0.3,-11.5,0.0001 +P,2555,480,456.86915842800005,0.3,-2,0.0001 +P,2557,2556,553.310399173,0.3,8,0.0001 +P,2558,2557,542.5696349030001,0.3,15,0.0001 +P,2559,481,507.37398576100003,0.15,1.8999900000000025,0.0001 +P,2560,2559,540.171666513,0.3,-2,0.0001 +P,2561,2560,556.598021492,0.3,15,0.0001 +P,2562,2561,527.3992876140001,0.3,8.099999999999994,0.0001 +P,2563,2562,518.04773917,0.3,8,0.0001 +P,2564,2576,521.630238079,0.5,-1.5999899999999911,0.0001 +P,485,2564,494.647906978,0.5,-14.100009999999997,0.0001 +P,505,2569,416.035568052,0.75,14,0.0001 +P,2598,2597,1214.3238595700002,0.5,0,0.0001 +P,2623,482,455.357259826,0.5,0,0.0001 +P,2585,2565,526.328990801,0.3,34,0.0001 +P,2585,2584,1744.67981094,0.5,0,0.0001 +P,2567,2604,2755.60503165,0.75,58,0.0001 +P,2568,2567,664.924513265,0.5,0,0.0001 +P,2617,2570,502.266495526,0.15,0,0.0001 +P,2617,2616,580.881089557,0.15,0,0.0001 +P,2596,513,637.571502491,0.75,0,0.0001 +P,498,2595,631.3661642769999,0.75,0,0.0001 +P,512,2621,566.048425285,0.75,0,0.0001 +P,508,507,425.766331222,0.75,0,0.0001 +P,2571,2608,1147.88953092,0.75,86.80001,0.0001 +P,494,2594,2368.2596330300003,0.75,0,0.0001 +P,2573,2572,553.694922043,0.15,0,0.0001 +P,2574,2573,536.185079428,0.15,-11.5,0.0001 +P,2618,483,531.1842260679999,0.15,0,0.0001 +P,2618,484,491.76600983000003,0.15,0,0.0001 +P,2575,2574,542.406187362,0.15,-2,0.0001 +P,2575,2590,588.536200671,0.5,-19,0.0001 +P,485,2575,1032.57106538,0.5,30,0.0001 +P,2576,486,570.5961884589999,0.15,3.1999999999999886,0.0001 +P,2577,2576,538.850413815,0.5,52.30000000000001,0.0001 +P,487,2577,544.5359435390001,0.5,0,0.0001 +P,488,487,596.196772822,0.5,0,0.0001 +P,2579,2578,647.254932736,0.5,0,0.0001 +P,2580,488,647.254932736,0.5,0,0.0001 +P,2581,2580,638.2642886,0.5,0,0.0001 +P,2581,489,547.653757776,0.15,0,0.0001 +P,490,2581,611.987929433,0.5,0,0.0001 +P,2582,490,1173.12583666,0.5,0,0.0001 +P,2583,2582,1149.75701961,0.5,0,0.0001 +P,491,2583,1146.63430116,0.5,0,0.0001 +P,2584,491,1150.2815613799999,0.5,0,0.0001 +P,2587,2586,585.926783273,0.5,0,0.0001 +P,2588,2587,587.542330946,0.5,0,0.0001 +P,492,2588,588.540266968,0.5,0,0.0001 +P,2589,492,585.802474443,0.5,0,0.0001 +P,2591,2589,592.688255253,0.5,0,0.0001 +P,2590,493,351.879828246,0.3,-15,0.0001 +P,2592,2591,588.868432814,0.5,0,0.0001 +P,2593,2592,595.5063574229999,0.5,0,0.0001 +P,2594,2593,593.486125834,0.5,0,0.0001 +P,495,494,1184.87701145,0.5,0,0.0001 +P,496,495,607.063163891,0.5,0,0.0001 +P,499,496,1800.52304627,0.5,0,0.0001 +P,497,500,615.693043914,0.75,0,0.0001 +P,2595,497,617.553733803,0.75,0,0.0001 +P,2623,498,646.423769728,0.75,0,0.0001 +P,501,2596,638.823889073,0.75,-2,0.0001 +P,2597,499,598.215253787,0.3,0,0.0001 +P,500,2598,608.688270089,0.75,0,0.0001 +P,2599,501,637.883978058,0.75,-4,0.0001 +P,502,2599,648.081647052,0.75,-3,0.0001 +P,2600,502,650.040290423,0.75,0,0.0001 +P,2602,2600,676.50524333,0.75,0,0.0001 +P,2602,2601,428.74461489799995,0.15,0,0.0001 +P,2603,2602,1330.9970673,0.75,0,0.0001 +P,2604,503,405.144040163,0.3,0,0.0001 +P,2604,2603,706.283845706,0.75,0,0.0001 +P,514,2606,566.060933468,0.75,0,0.0005 +P,2606,2605,539.302941052,0.15,4,0.0005 +P,2608,2607,1137.24075901,0.75,-37.200019999999995,0.0001 +P,2609,505,450.116303981,0.75,6,0.0001 +P,506,2609,444.780716469,0.75,37,0.0001 +P,507,506,434.431971915,0.75,-30,0.0001 +P,2610,508,465.267269685,0.75,0,0.0001 +P,2613,2610,453.783813523,0.75,0,0.0001 +P,2612,2611,475.97047149400004,0.5,0,0.0001 +P,2614,2613,475.97047149400004,0.5,0,0.0001 +P,2615,2614,498.026031124,0.75,0,0.0001 +P,511,2615,991.252317129,0.75,0,0.0001 +P,2616,509,536.041285061,0.15,0,0.0001 +P,510,2617,587.1192219980001,0.15,0,0.0001 +P,2619,2618,508.576911026,0.15,0,0.0001 +P,2619,510,578.076222765,0.15,0,0.0001 +P,2621,511,549.139740897,0.75,0,0.0001 +P,2620,2619,559.589199043,0.3,0,0.0001 +P,2621,2620,1122.34731756,0.3,0,0.0001 +P,2622,512,1062.95937679,0.75,0,0.0001 +P,513,2623,649.041783864,0.75,0,0.0001 +P,2625,514,1073.72476608,0.75,-1,0.0005 +P,2625,2624,521.290770534,0.75,0,0.0005 +P,2628,2627,523.693638403,0.3,0,0.0001 +P,2628,3015,612.709069812,0.5,-0.7000000000000028,0.00001 +P,2708,2704,584.674603473,0.5,-5.5,0.0001 +P,2647,2645,599.242709871,0.15,-4.5,0.0001 +P,2636,2728,1093.06046414,0.3,0,0.0001 +P,2629,2635,593.2917714680001,0.15,2.5,0.0001 +P,2636,2629,610.621737769,0.3,2.5,0.0001 +P,541,2727,1161.84775444,0.5,-51,0.0001 +P,541,2710,613.511716673,0.5,2,0.0001 +P,2795,2630,602.3105779020001,0.15,1,0.0001 +P,2631,2795,861.732921147,0.3,12,0.0001 +P,2632,2631,517.763875019,0.3,12,0.0001 +P,2632,515,544.4901542919999,0.15,-1,0.0001 +P,2633,2632,595.802020934,0.3,50.5,0.0001 +P,2634,2633,640.4353424359999,0.15,50.5,0.0001 +P,2634,516,528.8061331690001,0.15,0,0.0001 +P,2635,2634,1197.85244413,0.15,-98,0.0001 +P,2635,517,963.603356966,0.15,-45,0.0001 +P,2637,2636,631.714019987,0.3,0,0.0001 +P,2637,518,386.175756316,0.3,-3,0.0001 +P,2638,2637,609.983881654,0.3,-23.5,0.0001 +P,2700,2638,595.913778949,0.15,-22.5,0.0001 +P,2700,2639,453.069296771,0.3,1.5,0.0001 +P,2661,2640,632.0380551769999,0.3,-2.6999999999999886,0.0001 +P,2640,2642,950.154499164,0.3,64,0.0001 +P,2640,2726,1161.21467917,0.3,2.8999900000000025,0.0001 +P,2641,519,510.54463373400006,0.15,2,0.0001 +P,2643,2642,514.6348899699999,0.15,-2,0.0001 +P,2643,520,523.2588591269999,0.15,1,0.0001 +P,2645,2643,556.533242276,0.15,-1,0.0001 +P,2645,2644,547.534065829,0.15,1,0.0001 +P,2648,2647,618.806001511,0.15,-4.5,0.0001 +P,2648,521,562.495932542,0.15,-4,0.0001 +P,2650,2648,612.652213353,0.15,-4,0.0001 +P,2649,522,554.393895466,0.15,0,0.0001 +P,2650,2649,612.2654283749999,0.15,0,0.0001 +P,2652,2650,633.0994264029999,0.15,-6,0.0001 +P,2652,2651,419.675847828,0.15,0,0.0001 +P,2653,2652,584.497822068,0.15,-2,0.0001 +P,2653,2654,517.576291485,0.15,0,0.0001 +P,2653,523,494.00101738399997,0.15,-6,0.0001 +P,2656,2654,465.33742656799996,0.15,-11,0.0001 +P,2655,524,413.68625985200003,0.15,2,0.0001 +P,2656,2655,422.26483274,0.15,2,0.0001 +P,2657,2646,528.3054754110001,0.3,0.299980000000005,0.0001 +P,2657,2656,432.075416444,0.3,-1.6000099999999975,0.0001 +P,2658,2657,1080.64158388,0.3,7.5,0.0001 +P,2659,2658,594.086034383,0.3,7.5,0.0001 +P,2659,525,525.021703627,0.3,-4.1000099999999975,0.0001 +P,2662,2659,642.068397309,0.3,0,0.0001 +P,2662,2660,532.663274625,0.3,0,0.0001 +P,2669,2664,741.8313080839999,0.3,18.899990000000003,0.0001 +P,2664,2661,687.9706488190001,0.3,-79.19999000000001,0.0001 +P,2663,2662,616.40890341,0.3,1.8999999999999773,0.0001 +P,2664,2663,598.776493391,0.3,1.8000200000000177,0.0001 +P,2665,2666,565.088413431,0.15,-2,0.0001 +P,2666,526,533.662404071,0.15,3,0.0001 +P,2666,2668,549.620040039,0.15,-15,0.0001 +P,2668,2667,537.950844082,0.15,0,0.0001 +P,2670,2669,656.810810856,0.3,2,0.0001 +P,2672,527,480.70043849,0.15,2,0.0001 +P,2671,528,531.097399918,0.15,-36,0.0001 +P,2673,2671,549.294109099,0.15,-36,0.0001 +P,2675,2672,590.087606641,0.3,-9,0.0001 +P,2674,2673,567.379623635,0.15,-23.5,0.0001 +P,2675,2674,585.3460769449999,0.15,-23.5,0.0001 +P,2677,2675,578.131900567,0.3,-1,0.0001 +P,2676,529,558.657523447,0.15,1,0.0001 +P,2677,2676,534.496943091,0.3,1,0.0001 +P,2678,2677,573.987430935,0.3,-5,0.0001 +P,2678,530,518.394068968,0.15,2,0.0001 +P,2679,2678,1112.2103754299999,0.3,-15,0.0001 +P,2679,531,545.100262159,0.15,-6,0.0001 +P,2681,2679,567.050991988,0.3,-10,0.0001 +P,2681,532,302.787608148,0.15,3,0.0001 +P,2685,2680,582.804915611,0.3,1.1000099999999975,0.0001 +P,2685,2681,616.977434982,0.3,-25,0.0001 +P,2686,2682,509.589111182,0.15,0,0.0001 +P,2686,2684,579.344006072,0.3,2,0.0001 +P,2684,2683,560.195949286,0.15,1,0.0001 +P,2687,2685,1182.3008948,0.3,29,0.0001 +P,2687,2686,584.62458514,0.3,12,0.0001 +P,2689,2687,1104.96125074,0.3,66,0.0001 +P,2688,533,565.0580783119999,0.15,0,0.0001 +P,2689,2688,598.01481786,0.3,0,0.0001 +P,2722,2689,549.870547895,0.3,30,0.0001 +P,2722,2690,565.707805231,0.15,5,0.0001 +P,2692,534,552.3390501949999,0.15,0,0.0001 +P,2692,2705,563.294736872,0.3,-14,0.0001 +P,2698,2694,534.56802735,0.15,-2,0.0001 +P,2698,2696,607.0788915210001,0.5,0,0.0001 +P,2695,2691,528.269275949,0.5,-3,0.0001 +P,2695,2692,572.605118938,0.3,0,0.0001 +P,2694,2693,531.1686574759999,0.15,0,0.0001 +P,2694,535,536.144153468,0.15,0,0.0001 +P,2696,2695,582.8636762179999,0.5,3,0.0001 +P,2696,2697,482.06875787300004,0.3,-11,0.0001 +P,2697,536,532.493187678,0.3,0,0.0001 +P,2699,2697,551.2523749379999,0.15,1,0.0001 +P,2699,537,491.13865840799997,0.15,-9,0.0001 +P,2702,2698,597.395393087,0.5,0,0.0001 +P,2702,2699,514.028855751,0.15,-12,0.0001 +P,2701,2700,1182.0063798200001,0.3,18.5,0.0001 +P,2708,2701,591.2904349209999,0.3,19.5,0.0001 +P,2703,2702,588.106606791,0.5,-5.5,0.0001 +P,2704,2703,583.659136982,0.3,0,0.0001 +P,2705,538,540.407959726,0.3,4,0.0001 +P,2705,539,537.674755581,0.3,12,0.0001 +P,2706,540,449.920718711,0.15,2,0.0001 +P,2707,541,627.1380859420001,0.5,24,0.0001 +P,2707,2706,355.200791921,0.15,8,0.0001 +P,2711,2707,649.330333703,0.5,131,0.0001 +P,2711,542,376.407195483,0.15,-2,0.0001 +P,2709,2708,585.697839681,0.3,11,0.0001 +P,2710,2709,606.269047544,0.5,11,0.0001 +P,2710,543,328.405949744,0.3,0,0.0001 +P,2712,2711,644.7385694110001,0.3,-57,0.0001 +P,2712,544,404.819788438,0.3,0,0.0001 +P,2714,2712,620.6036047570001,0.5,9,0.0001 +P,2713,545,530.940537623,0.5,-1.5,0.0001 +P,2714,2713,501.298879933,0.3,-1.5,0.0001 +P,2716,2714,594.2043320930001,0.3,2,0.0001 +P,2715,546,562.955652507,0.15,0,0.0001 +P,2716,2715,539.702608905,0.15,0,0.0001 +P,2718,2716,589.947673534,0.3,13,0.0001 +P,2718,2717,462.092560014,0.15,1,0.0001 +P,2719,2718,594.879119398,0.3,7,0.0001 +P,2723,2719,576.168895795,0.3,7,0.0001 +P,2721,2720,554.630288565,0.15,-0.5,0.0001 +P,2723,2721,573.8148081510001,0.15,-0.5,0.0001 +P,2725,2722,764.50153497,0.3,19,0.0001 +P,2724,2723,552.5395313180001,0.5,-9.5,0.0001 +P,2725,2724,905.372617777,0.3,9.5,0.0001 +P,2730,2729,964.0341769339999,0.3,0,0.00001 +P,2735,4092,1012.71871951,0.75,-1,0.0005 +P,2735,547,5994.34471327,0.75,16.700000000000003,0.0005 +P,2736,3071,4227.441939660001,1,3.6000000000000014,0.00001 +P,548,2736,3932.86471983,1,5.099999999999994,0.00001 +P,3324,549,1515.95461212,0.3,1,0.0001 +P,2737,550,429.670085312,0.3,0,0.0001 +P,2737,3393,595.6509784589999,0.3,-1.8999999999999986,0.0001 +P,551,2737,3325.66134244,0.3,8,0.0001 +P,1567,2067,892.7763738049999,0.75,0,0.0001 +P,1543,3334,409.240594878,0.3,0,0.0001 +P,3299,2804,364.372848322,0.3,0.09999999999999432,0.00001 +P,833,2804,357.51010923999996,0.3,-0.20000000000000284,0.00001 +P,2807,708,3214.85850156,0.75,0,0.00001 +P,709,2807,1872.5081005099998,0.75,4,0.00001 +P,2895,589,550.621410647,0.3,-6,0.0001 +P,696,7,533.503725897,0.3,-2,0.00001 +P,622,4122,929.432557601,1,0,0.00001 +P,591,590,531.0782523299999,0.3,0,0.0001 +P,2808,2809,528.975288087,0.3,0,0.0001 +P,2809,592,535.481630022,0.15,0,0.0001 +P,594,593,507.95296265199994,0.3,1,0.0001 +P,591,594,2080.92415323,0.3,3,0.0001 +P,2810,594,539.324601235,0.3,-0.29999999999999716,0.00001 +P,595,2810,531.244368775,0.3,-1,0.00001 +P,4114,2812,1210.6404931400002,0.3,-3,0.0001 +P,2813,691,2072.12425747,0.3,13,0.0001 +P,4116,2814,1304.82375826,0.3,5,0.0001 +P,8,4187,1228.26224116,0.75,0,0.00001 +P,2916,4125,1289.5835633499998,0.5,0,0.00001 +P,2865,2815,746.425895849,0.3,0,0.0001 +P,2892,2891,5002.20194264,0.3,4.600000000000001,0.0001 +P,2911,2909,571.601608151,0.15,1,0.0001 +P,2925,2816,546.703741128,0.3,0,0.0001 +P,2946,660,2859.0518391200003,0.5,30,0.0001 +P,2936,2935,549.221767223,0.5,0,0.0001 +P,2934,2931,557.558075987,0.5,3,0.0001 +P,2915,2923,3703.5734392599998,0.3,-11,0.0001 +P,2817,2906,1170.16086965,0.5,1,0.0001 +P,2818,2817,585.411730142,0.3,0,0.0001 +P,628,2818,1845.29538516,0.5,9,0.0001 +P,2904,2903,2871.50513538,0.3,-24,0.0001 +P,2900,625,1851.47207377,0.3,6,0.0001 +P,2898,2899,613.4354953220001,0.15,-0.3999999999999986,0.0001 +P,2844,2845,616.5266344419999,0.75,0,0.00001 +P,2855,2894,2528.68865297,0.3,-1,0.0001 +P,611,2856,1312.00667894,0.3,0,0.0001 +P,2852,2819,875.906987496,0.15,0,0.0001 +P,2854,2853,567.631153263,0.3,0,0.0001 +P,2871,2820,547.455039929,0.3,-1,0.0001 +P,2821,2873,589.0744005839999,0.3,0,0.0001 +P,2874,2821,591.744245497,0.3,0,0.0001 +P,2822,596,545.206526725,0.15,1,0.0001 +P,2872,2822,1149.05309515,0.3,0,0.0001 +P,2848,2823,826.460272638,0.3,0,0.0001 +P,597,4126,7735.9400166099995,0.75,5,0.00001 +P,9,2824,578.020735806,0.5,-3,0.0001 +P,2825,611,555.119134336,0.3,0,0.0001 +P,2826,2825,1539.09164981,0.5,1,0.0001 +P,622,2826,444.493659637,0.3,1,0.00001 +P,2827,622,9480.10769323,0.5,-5,0.00001 +P,2828,2827,3915.10310864,0.5,-11,0.00001 +P,2829,2828,519.4254481590001,0.3,0,0.0001 +P,622,2835,664.650590851,0.5,1,0.0001 +P,2836,2861,614.118074677,0.3,0,0.0001 +P,2830,2831,559.042031963,0.5,1,0.0001 +P,2831,2832,1129.3639814,0.5,-2,0.0001 +P,2832,4122,1388.50392899,0.5,-2,0.0001 +P,2834,2833,638.667639635,0.3,1,0.0001 +P,2835,2837,638.667639635,0.3,1,0.0001 +P,2837,2836,1217.80665465,0.3,0,0.0001 +P,2838,598,490.108902773,0.15,0,0.0001 +P,2838,599,4370.2622067699995,0.3,0,0.0001 +P,601,2838,1760.28840964,0.3,0,0.0001 +P,2839,600,468.23622449500004,0.15,0,0.0001 +P,601,2839,455.014957016,0.15,0,0.0001 +P,2841,2840,4210.56820196,0.75,3,0.00001 +P,2841,601,1769.24730518,0.3,1,0.0001 +P,2843,602,470.049488553,0.15,0,0.0001 +P,2843,607,1183.44441582,0.75,-1,0.00001 +P,2840,603,476.049078946,0.15,2,0.0001 +P,2840,4126,6611.15757105,0.75,-5,0.00001 +P,605,604,2789.35163594,0.15,0,0.0001 +P,607,605,1197.62111071,0.75,0,0.00001 +P,2842,606,464.834174007,0.15,0,0.0001 +P,607,2842,464.48112671300004,0.15,1,0.0001 +P,2844,2843,3555.75539709,0.75,-2,0.00001 +P,1016,2845,626.1117389489999,0.5,2,0.00001 +P,2846,1016,618.4985768370001,0.5,-1,0.00001 +P,2181,608,594.1409466939999,0.3,0,0.0001 +P,2181,2846,748.614973317,0.5,0,0.00001 +P,2897,609,567.0146055939999,0.3,1,0.0001 +P,2847,2849,556.9981504130001,0.3,0,0.0001 +P,2848,2847,582.640967742,0.3,0,0.0001 +P,2849,2850,509.86476968200003,0.3,0,0.0001 +P,2849,2857,558.104449783,0.3,0,0.0001 +P,2850,610,553.453707137,0.3,0,0.0001 +P,2851,610,522.909636797,0.3,0,0.0001 +P,2852,611,611.429690912,0.3,0,0.0001 +P,2853,2851,557.354537928,0.15,0,0.0001 +P,2853,2852,598.047688039,0.3,0,0.0001 +P,2857,2854,538.099059138,0.3,0,0.0001 +P,2856,2855,639.016001463,0.3,0,0.0001 +P,2861,2858,553.692680589,0.3,0,0.0001 +P,2858,2857,570.768761053,0.3,0,0.0001 +P,2859,2858,376.485700228,0.3,0,0.0001 +P,2860,2876,385.972446456,0.3,0,0.0001 +P,612,2861,659.068169722,0.3,0,0.0001 +P,612,2876,660.0268679980001,0.3,0,0.0001 +P,2862,612,575.597145962,0.3,0,0.0001 +P,2878,613,519.803774829,0.15,2,0.0001 +P,2879,614,1091.46422546,0.15,-2,0.0001 +P,2863,2862,1676.80186984,0.3,1,0.0001 +P,615,2863,591.434061702,0.3,1.5,0.0001 +P,2868,2865,1114.18018738,0.3,1.2999999999999972,0.0001 +P,2867,2866,565.806881577,0.3,-1.8999999999999986,0.0001 +P,2869,2868,565.806881577,0.3,-1.8999999999999986,0.0001 +P,2870,2869,546.990900089,0.3,-17.9,0.0001 +P,2877,616,541.787423619,0.3,0,0.0001 +P,2877,2871,573.378473452,0.3,0,0.0001 +P,2873,2872,582.250220439,0.3,0,0.0001 +P,617,2874,586.5412638610001,0.15,1,0.0001 +P,617,2887,608.356163326,0.3,0,0.0001 +P,2875,617,1839.33610093,0.3,-2,0.0001 +P,2876,2875,1311.29541509,0.3,-1,0.0001 +P,2883,2877,1731.21379286,0.3,11,0.0001 +P,2880,2878,500.975162934,0.15,0,0.0001 +P,2880,624,1233.63883724,0.3,2,0.0001 +P,2881,2879,575.288844304,0.15,0,0.0001 +P,2881,2880,1189.05563833,0.3,-2,0.0001 +P,2882,2881,530.1033619039999,0.3,-1,0.0001 +P,2886,2883,607.476101579,0.3,3,0.0001 +P,2885,2884,634.558967905,0.3,-1,0.0001 +P,2887,2886,634.558967905,0.3,-1,0.0001 +P,2888,618,513.1777664150001,0.15,1,0.0001 +P,2889,2888,523.97114105,0.3,0,0.0001 +P,2912,619,463.572100436,0.15,1,0.0001 +P,2912,2896,2850.60576991,0.3,3,0.0001 +P,2890,2889,2204.65276092,0.3,4,0.0001 +P,2890,620,534.612308168,0.3,1,0.0001 +P,2893,2892,651.040356849,0.3,0,0.0001 +P,621,2892,405.23411296200004,0.3,-3,0.0001 +P,2894,2893,631.15402141,0.3,0,0.0001 +P,624,622,1164.63647826,0.3,-4,0.0001 +P,624,623,439.74194108,0.15,0,0.0001 +P,2896,2895,1676.0683541800001,0.3,17,0.0001 +P,2900,2898,1229.83849017,0.3,0,0.0001 +P,2901,625,1831.62050858,0.3,5,0.0001 +P,2901,2914,1247.4229345,0.3,3,0.0001 +P,2902,2901,4163.38287354,0.3,-16,0.0001 +P,2904,626,519.977505612,0.15,-19,0.0001 +P,2903,2902,577.878127142,0.3,0,0.0001 +P,1633,627,879.917631889,0.15,-1,0.0001 +P,2906,2904,4039.19577836,0.3,8,0.0001 +P,2906,629,1002.9726525,0.15,-8,0.0001 +P,2910,630,598.106132342,0.15,0,0.0001 +P,2910,631,554.791338509,0.15,0,0.0001 +P,2907,632,563.6289262250001,0.15,1,0.0001 +P,2911,2907,511.078656348,0.15,1,0.0001 +P,2908,633,581.2931822239999,0.15,0,0.0001 +P,2909,2908,601.168744927,0.15,0,0.0001 +P,634,2910,1822.80135033,0.15,-12,0.0001 +P,634,2911,569.0236695450001,0.15,7,0.0001 +P,2913,634,1216.6475166599998,0.3,14,0.0001 +P,2914,2912,2367.42728457,0.3,7,0.0001 +P,2914,2913,2900.39649903,0.15,10,0.0001 +P,2926,2925,562.584815335,0.3,2,0.0001 +P,2926,635,537.47042289,0.3,0,0.0001 +P,2920,636,505.72530218800006,0.15,0,0.0001 +P,2920,2919,592.8984824,0.3,0,0.0001 +P,2915,637,440.25613947,0.15,3,0.0001 +P,2915,639,2518.5539313,0.3,7,0.0001 +P,639,638,313.998250498,0.15,-2,0.0001 +P,639,2917,662.526885312,0.3,0,0.0001 +P,640,2916,1915.34841493,0.5,-14,0.00001 +P,2917,640,642.956613715,0.3,0,0.0001 +P,2921,2930,1204.50446211,0.3,3,0.0001 +P,2919,2921,565.458209381,0.3,0,0.0001 +P,2919,641,496.60447551100003,0.15,-2,0.0001 +P,4124,2920,4153.54479316,0.3,-17,0.0001 +P,2922,2921,564.959411048,0.3,0,0.0001 +P,4124,2922,4659.700584980001,0.3,-17,0.0001 +P,2924,4124,1861.23510016,0.3,23,0.0001 +P,2928,642,510.45221005499997,0.15,2,0.0001 +P,2928,2927,4550.00088168,0.3,4,0.0001 +P,2927,2925,966.712361231,0.3,2,0.0001 +P,2927,2926,574.61025927,0.3,0,0.0001 +P,2930,2928,6419.96158022,0.3,-1,0.0001 +P,2929,643,497.091408027,0.15,0,0.0001 +P,2930,2929,502.5589505269999,0.15,0,0.0001 +P,2931,2933,1700.9377483899998,0.5,13,0.0001 +P,2932,2942,496.921631018,0.5,1,0.0001 +P,2932,650,591.78688676,0.3,10,0.0001 +P,645,644,1644.4423235000002,0.5,-18,0.0001 +P,2933,2932,592.190737304,0.5,-1,0.0001 +P,2943,2934,1114.9875462700002,0.5,4,0.0001 +P,2935,647,545.941968796,0.5,1,0.0001 +P,648,2936,546.707428927,0.5,1,0.0001 +P,2939,2941,1787.70265062,0.5,4,0.0001 +P,2938,2937,802.583939152,0.3,1,0.0001 +P,2940,2939,802.583939152,0.3,1,0.0001 +P,644,2940,560.590502986,0.5,-5,0.0001 +P,646,645,1649.0215260700002,0.5,-8,0.0001 +P,2944,646,547.8912577179999,0.5,-14,0.0001 +P,647,2947,1098.27561663,0.5,-8,0.0001 +P,2941,648,541.603955651,0.5,2,0.0001 +P,2942,649,491.203228443,0.15,-3,0.0001 +P,650,4123,2385.9202281,0.3,-5,0.0001 +P,651,2943,552.936592873,0.5,3,0.0001 +P,652,651,1099.31336276,0.5,5,0.0001 +P,2945,2944,1108.74160929,0.5,-30,0.0001 +P,2946,2945,561.5517487840001,0.5,0,0.0001 +P,2947,652,555.6031362829999,0.5,-2,0.0001 +P,2948,2970,518.801749848,0.3,7,0.0001 +P,2949,2948,506.98315071800005,0.15,7,0.0001 +P,2962,2949,531.159083424,0.3,7,0.0001 +P,2951,660,574.366753384,0.5,42,0.0001 +P,657,2957,610.131191874,0.5,26,0.0001 +P,2950,2958,612.3268119100001,0.5,0,0.0001 +P,2959,2950,613.44035543,0.5,0,0.0001 +P,2966,2967,490.075241252,0.3,0,0.0001 +P,658,2960,612.3921309680001,0.5,9,0.0001 +P,653,2951,1091.76760009,0.5,43,0.0001 +P,654,2952,1714.918798,0.5,-2,0.0001 +P,2953,654,1152.94819331,0.5,-2,0.0001 +P,655,2953,4109.09100577,0.5,-130,0.0001 +P,656,655,599.3502738689999,0.5,17,0.0001 +P,2954,656,605.666735912,0.5,-18,0.0001 +P,2955,2954,600.504093594,0.5,42,0.0001 +P,2956,2955,607.941711209,0.5,26,0.0001 +P,2957,2956,609.1307646600001,0.5,0,0.0001 +P,2958,657,611.35765702,0.5,9,0.0001 +P,2960,2959,606.397450829,0.5,0,0.0001 +P,659,658,1225.42135149,0.5,8.799999999999997,0.0001 +P,2971,659,632.096972584,0.5,-0.20000000000000284,0.0001 +P,2961,4112,1163.0355446600001,0.3,0,0.0001 +P,660,2961,597.687101435,0.3,-1,0.0001 +P,2963,661,473.888316454,0.15,11,0.0001 +P,2964,2963,475.00736082900005,0.15,5,0.0001 +P,2965,2964,472.287406927,0.15,9,0.0001 +P,2966,2965,485.097891033,0.15,0,0.0001 +P,2970,2967,517.69894719,0.15,0,0.0001 +P,2969,2968,509.574685176,0.15,-1,0.0001 +P,2970,2969,519.0629543460001,0.3,0,0.0001 +P,2977,2976,3793.4514519100003,0.5,5.5,0.0001 +P,2971,668,651.938025917,0.3,-0.8000000000000114,0.0001 +P,2972,2971,1017.1141400999999,0.5,5.200000000000003,0.0001 +P,2973,2972,2110.5621646100003,0.5,11.600000000000009,0.0001 +P,2974,2973,1632.71701636,0.5,1.3999999999999915,0.0001 +P,2976,2974,586.54511681,0.5,1.7000000000000028,0.0001 +P,2976,2975,347.475790903,0.5,-0.5,0.0001 +P,662,2977,2644.19127625,0.5,1,0.0001 +P,2978,662,528.857433691,0.5,-1,0.0001 +P,663,2978,1064.62467245,0.5,-1.2999999999999972,0.0001 +P,2980,2979,3223.96210763,0.5,5.5,0.0001 +P,2981,2980,2706.72946951,0.5,0,0.0001 +P,664,2981,1632.31650454,0.5,53,0.0001 +P,665,664,1641.0286568000001,0.5,0,0.0001 +P,2982,665,1641.90559224,0.5,0,0.0001 +P,2984,2982,2243.22606664,0.5,-5,0.0001 +P,2983,4120,749.475275106,0.3,2,0.0001 +P,2984,2983,465.763523606,0.3,-2,0.0001 +P,2985,2984,597.553589954,0.5,11.900000000000006,0.0001 +P,2986,2985,1242.1386291200001,0.5,-6.300000000000011,0.0001 +P,2987,243,546.043256102,0.5,-0.29999999999999716,0.0001 +P,2988,2987,1089.16613796,0.5,0,0.0001 +P,2989,2988,553.510657366,0.5,22.299999999999997,0.0001 +P,2989,666,512.3669919,0.15,1.5,0.0001 +P,2991,2989,1092.55740625,0.5,-1.7999999999999972,0.0001 +P,2991,667,495.92293554599996,0.15,20.5,0.0001 +P,668,4117,1423.41863248,0.3,-0.5999999999999943,0.0001 +P,2990,2992,1571.12587412,0.5,18,0.0001 +P,2992,2991,538.803628561,0.5,-20.5,0.0001 +P,4127,3003,985.118376077,0.3,-21,0.0001 +P,4115,4113,2858.59582434,0.5,35,0.00001 +P,3037,673,1942.9535074399998,0.5,-24,0.00001 +P,672,2997,1117.10996675,0.15,-1,0.0001 +P,3004,4121,471.81586230700003,0.3,0,0.0001 +P,2995,3000,2784.30663945,0.5,-37,0.0001 +P,2996,669,519.652143012,0.15,0,0.0001 +P,2996,2994,533.408986022,0.15,2,0.0001 +P,2999,2995,2223.7798261099997,0.5,62,0.0001 +P,2999,670,539.027671364,0.15,0,0.0001 +P,2997,2996,2102.26129946,0.15,-4,0.0001 +P,2997,671,481.57018143199997,0.15,0,0.0001 +P,2171,2998,546.8618066949999,0.5,-1,0.0001 +P,2998,672,8150.305493999999,0.5,6,0.0001 +P,672,2999,4448.47457137,0.5,0,0.0001 +P,3000,3001,1659.606415,0.5,-15,0.0001 +P,3001,3018,4865.4605674,0.5,48,0.0001 +P,3002,3049,1180.86836932,0.3,9,0.0001 +P,3003,3002,2001.53479314,0.3,0,0.0001 +P,673,3006,4149.06760435,0.5,45,0.00001 +P,3005,3004,978.422412569,0.3,0,0.0001 +P,3015,674,528.2086824060001,0.3,0,0.0001 +P,3015,3014,606.9404785380001,0.5,-13,0.00001 +P,3008,3007,594.747036698,0.5,0,0.00001 +P,3010,3009,594.747036698,0.5,0,0.00001 +P,3013,675,585.787053556,0.5,13,0.00001 +P,3012,3011,607.638002721,0.5,0,0.00001 +P,3014,3013,607.638002721,0.5,0,0.00001 +P,3016,1994,4478.618124469999,0.5,-28.409999999999997,0.00001 +P,1165,3017,500.117561022,0.3,0,0.0001 +P,3025,3021,612.829309994,0.5,0,0.00001 +P,3019,3018,573.006768771,0.5,-4,0.00001 +P,3022,2113,1131.41186892,0.5,-1,0.00001 +P,3020,1014,5034.84588036,0.5,0,0.00001 +P,676,3022,585.426205094,0.5,5,0.00001 +P,1014,676,959.700051446,0.5,0,0.00001 +P,3023,1165,1705.63074431,0.5,6,0.00001 +P,3024,3023,4081.9286665399995,0.5,-42,0.00001 +P,680,3025,647.179744554,0.5,5,0.00001 +P,3027,3026,8369.091147840001,0.5,6,0.00001 +P,3034,678,8369.091147840001,0.3,6,0.00001 +P,678,4128,562.4423017830001,0.3,-2,0.0001 +P,677,3028,591.111355689,0.5,-6,0.00001 +P,678,3031,591.111355689,0.3,-6,0.00001 +P,3029,329,2712.59349358,0.5,0,0.00001 +P,3035,3030,563.7010797739999,0.5,0,0.00001 +P,3031,679,5916.17451371,0.5,0,0.00001 +P,679,3037,3188.6462414899997,0.5,-3,0.00001 +P,3033,3032,2769.39626918,0.5,0,0.00001 +P,4106,3034,2769.39626918,0.3,0,0.00001 +P,3036,3035,3410.0266697300003,0.5,-16,0.00001 +P,3037,3036,2363.27797634,0.5,20,0.00001 +P,3038,3049,556.101951345,0.5,4,0.0001 +P,3039,3038,1109.10554338,0.5,5,0.0001 +P,3040,3039,567.611661731,0.5,0,0.0001 +P,3040,681,491.20868890699995,0.3,0,0.0001 +P,3043,3040,1132.0583958799998,0.5,0,0.0001 +P,3042,3041,571.080183305,0.3,0,0.0001 +P,3044,3043,571.080183305,0.3,0,0.0001 +P,3045,3044,556.0876039440001,0.5,0,0.0001 +P,3046,3045,544.035451977,0.5,0,0.0001 +P,3047,3046,539.528462512,0.5,3,0.0001 +P,3048,3047,1115.9113831900002,0.3,0,0.0001 +P,3049,682,608.604947879,0.5,0,0.0001 +P,3050,683,1411.04258675,0.15,0,0.0001 +P,3050,1013,1188.60892369,0.3,9,0.0001 +P,684,687,3381.43722829,0.3,15,0.0001 +P,689,685,1150.3115046100002,0.3,12,0.0001 +P,685,684,2868.4666732,0.3,-3,0.0001 +P,1015,3053,3295.40638117,0.3,-17.200000000000003,0.0001 +P,687,1015,8750.46421292,0.3,-42.8,0.0001 +P,687,686,437.700218373,0.15,-1,0.0001 +P,3051,3050,619.420186853,0.3,0,0.0001 +P,3053,3051,615.696107011,0.3,0,0.0001 +P,3052,688,466.28551049400005,0.15,0,0.0001 +P,3053,3052,442.938764159,0.3,0,0.0001 +P,691,690,610.616340662,0.3,-3,0.0001 +P,3055,692,499.721651737,0.3,1,0.0001 +P,3056,3055,505.62100928700005,0.3,0,0.0001 +P,3057,3056,3627.28100977,0.3,1,0.0001 +P,3062,3057,525.418551066,0.3,0,0.0001 +P,3058,693,3238.69372048,0.3,0,0.001 +P,3058,694,525.513954377,0.15,0,0.0001 +P,3058,695,2329.3112215899996,0.3,0,0.0001 +P,695,3063,1769.53354133,0.3,-2,0.0001 +P,3059,3060,600.424012886,0.3,2,0.0001 +P,3060,3064,8007.65774297,0.3,46,0.0001 +P,3063,3062,4319.099994390001,0.3,1,0.0001 +P,3063,697,482.737245126,0.15,1,0.0001 +P,3064,698,437.890089845,0.15,-4,0.0001 +P,3066,3065,561.4354949819999,0.15,0,0.0001 +P,3067,3066,1184.3832155300001,0.5,20.200000000000003,0.0001 +P,3068,3067,2961.52083154,0.5,5.799999999999997,0.0001 +P,4119,705,2973.33066668,1,8.5,0.00001 +P,701,699,521.3605567989999,0.15,1.2999999999999972,0.0001 +P,701,3069,6420.21134384,1,6.799999999999997,0.00001 +P,3069,4119,3082.09856819,1,15.400000000000006,0.00001 +P,3069,700,456.128528359,0.15,4.200000000000003,0.0001 +P,3070,701,4013.8181015,1,18.700000000000003,0.00001 +P,3070,702,529.990720064,0.15,2.1000000000000014,0.0001 +P,3070,266,4577.9030438400005,1,5.700000000000003,0.00001 +P,704,703,4092.11024076,1,-32.7,0.00001 +P,705,704,4721.45498808,1,11.200000000000003,0.00001 +P,3071,100,2594.95190196,0.75,2.1000000000000014,0.00001 +P,3077,706,3624.46004104,0.3,4.899999999999999,0.0001 +P,3073,3072,599.891560627,0.3,0.3999999999999986,0.0001 +P,3075,3073,1815.68165969,0.3,14.399999999999999,0.0001 +P,3076,3075,6044.9437397599995,0.3,-3.8999999999999986,0.0001 +P,2121,265,941.245604523,0.3,0,0.00001 +P,4130,3079,6315.5651367400005,0.75,1.6000000000000014,0.00001 +P,307,3081,3950.2204243399997,1,12.5,0.00001 +P,2120,264,941.245604523,0.3,0,0.00001 +P,3080,3085,614.643762863,0.75,-1,0.00001 +P,708,707,524.0967196700001,0.15,0,0.00001 +P,708,3083,1400.11365712,0.75,-0.5,0.00001 +P,3081,2149,561.239218576,1,0,0.00001 +P,3082,307,3291.57057953,1,-12.5,0.00001 +P,3087,3082,538.8747726,0.75,0,0.00001 +P,3083,2120,775.585156502,0.3,-0.5,0.00001 +P,3083,3088,4448.3418265400005,0.75,11.5,0.00001 +P,3084,710,9815.63382339,0.75,7,0.00001 +P,710,709,2871.0095333,0.75,2,0.00001 +P,3086,3084,6177.02804834,0.75,5,0.00001 +P,3088,3087,4930.75083534,0.75,0,0.00001 +P,3088,711,491.425487504,0.15,0,0.0001 +P,2149,3089,447.696056281,1,0,0.00001 +P,4186,1172,3696.31701803,0.75,0,0.00001 +P,3991,712,398.720309529,0.15,24,0.0001 +P,3991,3090,1853.44631428,0.75,-2,0.0001 +P,3093,3092,407.757675129,0.5,4,0.0001 +P,4094,4151,1195.6365541,0.3,0.9000000000000057,0.0001 +P,3854,4149,967.236681781,0.3,0,0.0001 +P,3130,3122,1760.89291392,0.5,-26.100009999999997,0.0001 +P,3151,4135,989.5378266509999,0.3,-0.2999899999999798,0.0001 +P,3323,3101,556.940741171,0.75,0,0.00001 +P,977,4132,2182.47154635,0.75,-25,0.0001 +P,716,713,1816.36164929,0.3,0,0.0001 +P,716,3099,1026.64930054,0.3,-1,0.0001 +P,3103,3094,372.557976377,0.3,0,0.0001 +P,3095,714,491.375366398,0.3,0.7000000000000028,0.0001 +P,3103,3095,481.195795107,0.3,0.5999999999999943,0.0001 +P,3096,715,467.814514446,0.3,-1,0.0001 +P,3097,3096,449.57007251,0.3,0,0.0001 +P,3099,3097,485.372495154,0.3,-1,0.0001 +P,3099,3098,480.115657335,0.15,0,0.0001 +P,3100,716,1572.37248997,0.3,-1,0.0001 +P,3101,3100,576.398804114,0.3,0,0.0001 +P,3101,3102,4812.1955866,0.75,17,0.00001 +P,3104,3103,445.093000018,0.3,-0.5999999999999943,0.0001 +P,267,3104,463.316096202,0.75,-0.7000000000000028,0.00001 +P,267,3105,614.428674172,0.75,0.20000000000000284,0.00001 +P,1651,3149,1133.79725781,0.15,-0.10000000000002274,0.0001 +P,3113,3106,399.003402833,0.3,-9,0.0001 +P,3107,3150,544.5571103670001,0.15,-34,0.0001 +P,3149,3107,562.871603057,0.15,-36.09997999999996,0.0001 +P,3108,717,504.54588835000004,0.15,-1.5,0.0001 +P,3147,3108,503.31215212,0.15,-1.5,0.0001 +P,3109,3127,580.703423646,0.5,16.19999999999999,0.0001 +P,3133,3109,1644.7090828399998,0.5,-73.20001000000002,0.0001 +P,3132,3133,1091.1030658700001,0.5,0.20001000000002023,0.0001 +P,3111,3135,1173.8688086299999,0.5,0,0.0001 +P,3139,3111,551.806535811,0.5,0,0.0001 +P,3112,3140,522.072353214,0.5,-21,0.0001 +P,3142,3112,1040.91184838,0.5,-7,0.0001 +P,3116,3113,417.487537593,0.3,-9,0.0001 +P,3115,3114,472.09322086599997,0.3,0,0.0001 +P,3114,718,472.279841525,0.3,-0.5,0.0001 +P,3116,3115,520.702083305,0.15,-0.5,0.0001 +P,3143,719,488.37284843099997,0.15,1,0.0001 +P,3143,3116,506.936898528,0.15,21,0.0001 +P,3128,720,495.684576511,0.15,0,0.0001 +P,3128,3117,581.0544232359999,0.3,0.5999899999999911,0.0001 +P,1017,721,308.68770426,0.15,-14,0.0001 +P,3125,3124,495.758642012,0.15,-5,0.0001 +P,3120,722,478.667741032,0.15,20,0.0001 +P,3120,3132,1649.29481587,0.5,0,0.0001 +P,3119,3118,405.620495217,0.15,0.10000000000002274,0.0001 +P,3121,3119,376.19531342700003,0.15,0,0.0001 +P,3122,3120,1157.02092563,0.5,-3.8999900000000025,0.0001 +P,3122,3121,1696.60170974,0.3,46.700019999999995,0.0001 +P,3130,4134,556.164599718,0.15,0,0.0001 +P,3124,723,455.37237037799997,0.15,7,0.0001 +P,3123,724,519.5607570200001,0.15,0,0.0001 +P,3124,3123,520.6200783300001,0.15,0,0.0001 +P,3126,725,425.950962027,0.15,0,0.0001 +P,3126,3125,495.851856318,0.15,-4,0.0001 +P,3127,3126,1825.88658361,0.15,1.8000000000000114,0.0001 +P,3127,3131,1723.8271621200001,0.5,28.80000000000001,0.0001 +P,3129,3128,586.9298777250001,0.3,12.199990000000014,0.0001 +P,2085,3129,1740.82488109,0.3,-4.8999900000000025,0.0001 +P,2085,726,456.639965731,0.15,0,0.0001 +P,3137,3130,616.3380998719999,0.5,0,0.0001 +P,3137,727,330.791944259,0.15,-10,0.0001 +P,3131,728,412.308965002,0.15,3,0.0001 +P,3132,729,520.958825357,0.15,0,0.0001 +P,3274,730,490.00499101900004,0.3,0,0.0001 +P,3141,731,530.094511486,0.15,0,0.0001 +P,3141,4136,477.784290959,0.15,0,0.0001 +P,3133,732,528.497900752,0.15,35.79998999999998,0.0001 +P,3135,3134,1746.6225125199999,0.3,38,0.0001 +P,3135,3138,1138.75042977,0.5,53,0.0001 +P,2194,3136,995.0966857620001,0.3,4.8999900000000025,0.0001 +P,2192,733,342.854441504,0.15,0,0.0001 +P,3138,3137,1200.24386763,0.5,-38,0.0001 +P,3138,2192,2392.64701287,0.3,-39,0.0001 +P,3140,3139,537.5886142210001,0.5,0,0.0001 +P,3142,3141,2005.25825955,0.3,-46,0.0001 +P,3144,3142,1606.75235589,0.5,-50,0.0001 +P,3144,3143,1009.40922042,0.15,-11,0.0001 +P,3145,1017,535.022196732,0.5,0,0.0001 +P,3146,734,502.67973508499995,0.15,1,0.0001 +P,3147,3146,517.6481935779999,0.3,1,0.0001 +P,3151,3152,479.482680002,0.3,2.6000000000000227,0.0001 +P,3152,3147,513.630717432,0.3,-0.8999900000000025,0.0001 +P,3148,735,514.18433122,0.15,0.8999900000000025,0.0001 +P,3149,3148,538.078112611,0.15,0.8000200000000177,0.0001 +P,3150,3153,527.009777966,0.15,-2.1000000000000227,0.0001 +P,3153,3151,517.227895206,0.15,0.19997999999998228,0.0001 +P,3153,3152,491.32969578300003,0.3,2.799980000000005,0.0001 +P,737,736,378.92236625199996,0.15,0,0.0001 +P,737,3155,1003.58867217,0.15,-20,0.0001 +P,3155,4133,1077.29758111,0.15,0,0.0001 +P,3155,3154,533.0864495799999,0.15,31,0.0001 +P,3156,737,568.973071353,0.15,-5,0.0001 +P,3157,3156,534.732499683,0.15,2.5,0.0001 +P,3158,3157,520.469198539,0.15,2.5,0.0001 +P,2083,3158,534.734926703,0.15,3,0.0001 +P,2083,3159,481.287273228,0.15,4,0.0001 +P,3171,3166,632.198338443,0.5,-2,0.0001 +P,3162,3161,1470.9679908599999,0.5,0,0.0001 +P,4137,3187,1470.9679908599999,0.3,0,0.0001 +P,3169,3168,608.317410476,0.5,-8,0.0001 +P,3163,2406,1587.8300835900002,0.5,0.19999999999998863,0.0001 +P,3167,3163,611.082937662,0.5,0,0.0001 +P,3164,738,498.788452722,0.15,8,0.0001 +P,744,3164,498.30535913800003,0.3,-8,0.0001 +P,3166,3165,464.979592891,0.15,0,0.0001 +P,3166,741,644.509516556,0.5,4,0.0001 +P,745,739,2525.35922723,0.5,-29,0.0001 +P,739,743,625.568108773,0.5,0,0.0001 +P,3168,3167,611.9707910249999,0.5,0,0.0001 +P,3170,3169,617.989832381,0.5,-25,0.0001 +P,741,3170,631.248609548,0.5,31,0.0001 +P,741,740,452.570750026,0.3,3,0.0001 +P,3172,3171,619.3455774089999,0.3,0,0.0001 +P,742,3172,619.4000749500001,0.5,2,0.0001 +P,743,742,1244.64663322,0.5,-52,0.0001 +P,746,3175,653.335161066,0.5,37,0.0001 +P,3173,744,504.27528483,0.3,8,0.0001 +P,3174,3173,509.26277660999995,0.15,0,0.0001 +P,3175,3174,515.277503654,0.15,-8,0.0001 +P,3175,745,653.010627011,0.5,0,0.0001 +P,747,746,1289.0294464,0.5,0,0.0001 +P,748,747,1273.6925428700001,0.5,-78,0.0001 +P,3176,748,1266.75182674,0.5,50,0.0001 +P,749,3176,626.732849095,0.5,20,0.0001 +P,752,749,638.389644855,0.5,0,0.0001 +P,3190,750,388.273801705,0.15,0,0.0001 +P,3190,766,6647.67755801,0.75,85,0.0001 +P,3184,3183,634.944896025,0.5,0,0.0001 +P,3177,751,517.30553964,0.3,-3,0.0001 +P,3178,3177,527.576848224,0.3,3,0.0001 +P,762,3182,671.701047601,0.5,-6,0.0001 +P,753,752,650.534598363,0.5,17,0.0001 +P,753,3178,535.573659441,0.3,-1,0.0001 +P,754,753,1290.93014465,0.5,-22,0.0001 +P,3179,754,1267.07221134,0.5,-5,0.0001 +P,755,3179,630.9504622899999,0.5,0,0.0001 +P,756,755,638.662439482,0.5,0,0.0001 +P,757,756,627.5151460579999,0.5,0,0.0001 +P,758,757,638.775797697,0.5,12,0.0001 +P,3180,758,654.071800079,0.5,0,0.0001 +P,3180,759,390.35297224299995,0.15,7,0.0001 +P,3181,3180,1932.1145210099999,0.5,-7,0.0001 +P,760,3181,637.968743581,0.5,-11,0.00001 +P,3182,760,660.529642245,0.5,-4,0.0001 +P,3182,761,389.974679106,0.3,0,0.0001 +P,3185,762,1285.59470274,0.5,0,0.0001 +P,3183,3186,632.599614536,0.5,-3,0.0001 +P,763,3184,4990.21774653,0.5,-103,0.0001 +P,764,763,1273.75642535,0.5,69,0.0001 +P,3188,764,623.910391537,0.5,0,0.0001 +P,3188,765,536.9056734310001,0.15,0,0.0001 +P,3186,3185,635.279273427,0.5,-7,0.0001 +P,3187,3200,621.172929352,0.5,0,0.0001 +P,766,3188,621.51892332,0.5,0,0.0001 +P,3189,767,534.551284153,0.15,0,0.0001 +P,768,3189,548.597358354,0.15,0,0.0001 +P,3191,3190,633.899713763,0.75,-5,0.0001 +P,3192,3191,625.1669998069999,0.5,5,0.0001 +P,3192,768,578.185779001,0.15,0,0.0001 +P,769,3192,5507.44500326,0.5,-25,0.0001 +P,3193,769,608.1979248279999,0.5,5,0.0001 +P,770,3193,1206.75034931,0.5,23,0.0001 +P,771,770,607.439875178,0.5,2,0.0001 +P,772,771,597.096835242,0.75,0,0.0001 +P,773,772,605.421756136,0.75,2,0.0001 +P,774,773,611.6591518470001,0.5,6,0.0001 +P,775,774,609.1794338760001,0.5,0,0.0001 +P,776,775,608.532416281,0.5,10,0.0001 +P,3195,777,614.023660329,0.5,1,0.0001 +P,3196,3195,613.8438668240001,0.3,0,0.0001 +P,3197,3196,609.017913723,0.5,-13,0.0001 +P,3198,3197,1232.3353944599999,0.5,0,0.0001 +P,778,3198,625.5125963319999,0.5,37,0.0001 +P,779,778,636.316649821,0.5,0,0.0001 +P,780,2405,695.497455488,0.5,2,0.0001 +P,781,780,738.126351906,0.5,1,0.0001 +P,783,782,701.402226988,0.5,0,0.0001 +P,113,783,1335.52605647,0.5,58,0.0001 +P,4138,3201,1198.02976904,0.3,0,0.0001 +P,2140,3201,617.417228421,0.3,0,0.0001 +P,2125,2123,520.679481234,0.5,0,0.00001 +P,811,784,1292.7744767,0.5,0,0.00001 +P,784,786,3679.1776076399997,0.5,0,0.00001 +P,785,3203,4041.91646846,0.5,0,0.00001 +P,786,103,2429.4014878,0.5,40,0.00001 +P,3203,787,414.82072214100003,0.3,0,0.0001 +P,3205,3203,684.861558244,0.3,0,0.0001 +P,3205,3204,2618.50371528,0.5,0,0.00001 +P,2124,2122,520.679481234,0.3,0,0.0001 +P,3204,2124,8943.49923969,0.5,0,0.00001 +P,3206,3205,1749.62938235,0.5,0,0.00001 +P,3206,788,1354.14529882,0.15,0,0.0001 +P,789,3206,5703.47985799,0.5,0,0.00001 +P,3207,801,7252.0353392,1,65,0.00001 +P,3230,3207,3177.43001468,1,162,0.00001 +P,3208,3227,2262.63562396,1,0,0.00001 +P,3228,3208,708.507480124,1,-1.5,0.00001 +P,3247,3209,758.797759959,0.5,0,0.00001 +P,1447,796,5217.35680178,0.5,-94,0.00001 +P,3215,790,419.713177876,0.15,-7,0.0001 +P,3215,3218,5302.5453903299995,0.5,72.5,0.00001 +P,3210,791,417.15995116199997,0.15,0.5,0.0001 +P,3219,3210,391.535794848,0.15,0.5,0.0001 +P,3219,3214,3026.71324054,0.5,-45,0.00001 +P,3212,792,427.494708877,0.15,0.5,0.0001 +P,3213,3212,398.959249137,0.15,0.5,0.0001 +P,3214,3213,6796.719384370001,0.5,117,0.00001 +P,3214,793,518.3170961919999,0.15,2,0.0001 +P,3217,3215,3530.914826,0.5,1,0.00001 +P,3216,794,515.334209943,0.15,0,0.0001 +P,3217,3216,504.399982153,0.15,0,0.0001 +P,796,795,440.076155365,0.15,0,0.0001 +P,3218,797,546.176580158,0.15,1.5,0.0001 +P,3218,799,2364.86930446,0.5,-8,0.00001 +P,799,3219,1817.52088596,0.5,-16.5,0.00001 +P,799,798,536.289917003,0.15,2.6000099999999975,0.0001 +P,3220,3232,605.3205716570001,1,4.5,0.00001 +P,3221,3220,592.116639756,1,0,0.00001 +P,3225,3221,3926.04670119,1,4.5,0.00001 +P,3223,3222,380.468667675,0.15,2,0.0001 +P,3224,3223,338.835833677,0.15,0,0.0001 +P,3225,3224,255.38750880799998,0.15,2,0.0001 +P,3226,3225,801.0314919040001,1,-1.5,0.00001 +P,3227,3226,755.6915920800001,0.75,0,0.00001 +P,3229,3228,1367.0187112800002,1,0.5,0.00001 +P,3238,3229,672.337711821,1,0.5,0.00001 +P,3230,1659,583.624468006,0.3,0,0.0001 +P,3232,3230,2603.58510748,1,24,0.00001 +P,3232,3231,568.970590401,0.3,6,0.00001 +P,1725,3237,5556.782527740001,1,-31,0.00001 +P,3233,3234,523.714810838,0.15,-1,0.0001 +P,1472,3233,519.36651449,0.3,0,0.0001 +P,3234,800,512.323577115,0.15,0,0.0001 +P,801,3235,5348.932402,1,0,0.00001 +P,3235,3236,518.511247815,0.15,0,0.0001 +P,3236,802,502.469188711,0.15,0,0.0001 +P,804,803,454.10483982299996,0.15,0,0.0001 +P,3237,4195,4231.0315719,1,-1,0.00001 +P,3237,804,411.947820438,0.15,0,0.0001 +P,3239,3238,3662.7543072900003,1,1,0.00001 +P,3240,3239,578.134172934,1,0,0.00001 +P,3241,3240,565.928265892,1,0,0.00001 +P,3242,3241,550.119984244,1,0,0.00001 +P,4196,3242,1148.8261875100002,0.75,0,0.00001 +P,3243,1662,619.157885714,1,0,0.00001 +P,308,3243,1248.2022762,0.75,0,0.00001 +P,3249,3244,503.733725924,0.75,0,0.00001 +P,3244,308,914.301897404,0.75,0,0.00001 +P,3245,4197,546.6391914,1.3,0,0.00001 +P,3246,3245,467.992476323,1,-2,0.00001 +P,805,3246,439.49683910100003,1,0,0.00001 +P,805,3247,424.43215514400003,0.5,0,0.00001 +P,3253,805,427.402658222,1,0,0.00001 +P,3248,2142,1218.46182809,0.5,0,0.00001 +P,3252,3249,531.184999879,0.75,0,0.00001 +P,3250,3251,571.33936501,0.5,0,0.00001 +P,3252,3250,605.2942080400001,0.75,0,0.00001 +P,3251,1662,577.850393802,1,0,0.00001 +P,3254,2407,1198.16376435,0.3,0.09998999999999114,0.00001 +P,3256,806,491.712056676,0.3,8,0.0001 +P,3257,3256,7384.08821635,0.3,-103,0.0001 +P,3259,3257,426.83724032,0.3,0,0.0001 +P,3259,812,1256.28161669,1,-118,0.00001 +P,2141,3260,442.492931949,0.3,1,0.00001 +P,3267,3258,4996.98966553,1,54,0.00001 +P,3258,2141,4108.366378500001,1,169,0.00001 +P,808,3259,4203.76745642,1,143.1,0.00001 +P,808,807,487.468073875,0.15,0.7999999999999972,0.0001 +P,3261,3262,1764.76196107,1,63,0.00001 +P,3264,3261,594.718348266,1,0,0.00001 +P,809,808,599.685951117,1,16.900000000000006,0.00001 +P,3262,809,1171.80116142,1,-59,0.00001 +P,810,3263,2099.50400009,0.3,-3,0.00001 +P,810,3264,1922.5852965800002,1,-23,0.00001 +P,810,3265,493.891072982,0.3,0,0.0001 +P,811,810,4411.17870033,1,23,0.00001 +P,3266,811,3851.75620304,1,0,0.00001 +P,3269,3266,3766.43097483,1,0,0.00001 +P,812,3267,4740.74127601,1,0,0.00001 +P,812,3268,416.262611815,0.15,0,0.0001 +P,813,3269,6909.9696559,1,49.3,0.00001 +P,813,1114,527.782386417,0.15,1.5999999999999943,0.0001 +P,3270,813,622.481077872,1,-26.299999999999997,0.00001 +P,3271,3270,605.053150892,0.75,0,0.00001 +P,3272,3271,599.946607481,1,0,0.00001 +P,2126,3272,605.308699354,1,0,0.00001 +P,3274,4095,1669.6675375500001,0.5,-145.1,0.0001 +P,3399,3275,1011.4713737600001,0.3,-1,0.0001 +P,3315,3337,609.592673914,0.75,-9.199999999999996,0.00001 +P,3284,3298,2526.99273176,1,5.799999999999997,0.00001 +P,3276,1565,1223.5843490500001,1,0,0.00001 +P,1583,3360,557.77825224,1,0,0.00001 +P,3277,3344,629.6367333129999,1,0,0.00001 +P,3305,3278,616.364774169,0.3,-0.5,0.0001 +P,3278,3306,1223.08540038,0.3,-0.5,0.0001 +P,2626,3279,538.523973989,1,-0.5,0.00001 +P,3279,1648,1872.71176647,1,-0.5,0.00001 +P,816,3280,1871.27760074,0.3,1,0.0001 +P,3281,3311,2255.7114758000002,1,-0.5,0.00001 +P,3282,3281,1307.50514416,1,-2.200000000000003,0.00001 +P,3283,3282,1798.173178,1,5.399999999999999,0.00001 +P,3329,3283,554.060372713,1,-2,0.00001 +P,3285,3284,625.796774525,1,0.20000000000000284,0.00001 +P,814,3285,1177.02927673,1,0.6000000000000014,0.00001 +P,3286,814,5280.396580459999,1,-0.3999999999999986,0.00001 +P,3287,3286,4409.27350882,1,0.7999999999999972,0.00001 +P,815,3287,2793.05411161,1,1.5,0.00001 +P,3288,815,3221.39771122,1,2,0.00001 +P,3288,4189,1210.46583932,1,2.5,0.00001 +P,1565,3289,3284.96716006,1,-0.10000000000000142,0.00001 +P,3289,1563,576.756246976,0.15,0,0.0001 +P,3289,1561,2586.25726906,1,1.5,0.00001 +P,3291,3290,532.376723405,0.5,-1.1000000000000014,0.0001 +P,3292,3291,545.122438643,0.3,0,0.0001 +P,3292,3337,665.525535125,0.5,0.20000000000000284,0.00001 +P,832,1550,898.300712798,0.75,1.2000000000000028,0.00001 +P,3293,3303,573.870797863,0.3,-0.10000000000000142,0.0001 +P,3294,3293,1149.2154830200002,0.3,0,0.0001 +P,3302,3295,598.245460347,0.3,0.5,0.0001 +P,3296,3308,5127.52295265,1,-20.1,0.00001 +P,3335,826,3073.12966254,0.75,16.6,0.00001 +P,3335,3317,554.055541899,0.3,0,0.0001 +P,3297,3296,3458.7915540699996,1,16.6,0.00001 +P,3298,3297,7026.27205748,1,0.29999999999999716,0.00001 +P,3333,816,338.32305991,0.5,0,0.0001 +P,3333,833,711.1972402299999,0.75,0,0.00001 +P,3299,3322,1521.51015911,0.3,1.2999999999999972,0.0001 +P,3300,3299,541.410832942,0.3,-0.09999999999999432,0.0001 +P,3301,3300,530.112752668,0.3,0,0.0001 +P,816,3301,387.110785228,0.5,-0.20000000000000284,0.00001 +P,1543,816,493.349353593,0.5,0.20000000000000284,0.0001 +P,3334,3302,694.050215351,0.3,0.30000000000000426,0.0001 +P,2221,817,356.534322007,0.15,1,0.0001 +P,3303,819,590.7486500719999,0.3,-0.5,0.0001 +P,819,818,385.013821801,0.15,2,0.0001 +P,819,3305,1785.4115424400002,0.3,2,0.0001 +P,3304,820,472.080471743,0.15,0,0.0001 +P,3305,3304,447.97162227999996,0.15,0,0.0001 +P,3306,821,384.520868571,0.15,1,0.0001 +P,1563,822,446.12254553500003,0.15,0,0.0001 +P,3316,3307,553.541433831,0.15,1,0.0001 +P,3308,3310,3272.4420581599998,1,-5.399999999999999,0.00001 +P,3338,3329,1191.84144631,0.75,-0.6000000000000014,0.00001 +P,3309,3338,1128.28456431,1,0.8000000000000043,0.00001 +P,3331,4147,526.450878816,0.3,0,0.0001 +P,3310,3309,1203.68233698,1,1,0.00001 +P,3319,823,404.450995118,0.15,1.3999999999999986,0.0001 +P,3327,3321,416.39180186699997,0.15,2.5,0.0001 +P,3312,824,1046.87710884,0.15,2.6000000000000014,0.0001 +P,825,828,1010.65502534,0.5,-5,0.00001 +P,3313,825,3191.88952188,0.3,0,0.00001 +P,3314,3313,4874.33472142,0.3,-5,0.00001 +P,3318,3314,601.962243493,0.3,0,0.00001 +P,1555,3315,2293.36519492,1,14.599999999999994,0.00001 +P,1555,3340,309.20913521299997,0.15,0.5,0.0001 +P,826,1552,551.0863231699999,0.3,-0.20000000000000284,0.0001 +P,826,834,4659.9820654800005,0.75,-20.400000000000006,0.00001 +P,828,827,1642.3216035799999,0.3,0,0.0001 +P,3317,3316,436.652659276,0.15,-0.6000000000000014,0.0001 +P,3317,1545,607.821334761,0.3,-0.8000000000000043,0.0001 +P,1545,3318,728.7760328029999,0.3,0.20000000000000284,0.00001 +P,3328,3319,322.039434093,0.15,0.30000000000000426,0.0001 +P,3328,1547,2021.83407861,0.75,-1.8999999999999986,0.00001 +P,3321,829,409.638019543,0.15,0,0.0001 +P,3321,3320,481.27533217700005,0.15,1,0.0001 +P,3322,830,1265.12114045,0.3,0,0.0001 +P,3324,3323,1896.32695758,0.75,4,0.00001 +P,3325,3324,672.157739102,0.75,-1,0.00001 +P,3326,831,419.09828393600003,0.3,2.3999999999999986,0.0001 +P,3326,3325,1297.43507221,0.75,4.399999999999999,0.00001 +P,3339,3326,1290.14528769,0.75,-5.699999999999996,0.00001 +P,3330,3327,348.862361336,0.15,-1.2999999999999972,0.0001 +P,3330,3328,1396.75185314,0.75,-1.5,0.00001 +P,1549,3330,1948.6814343,0.75,2.299999999999997,0.00001 +P,3332,832,1377.47170579,0.75,1.2999999999999972,0.00001 +P,3332,3331,641.1913975809999,0.3,0,0.0001 +P,833,3332,3103.91120825,0.75,-6,0.00001 +P,834,3333,848.1849902079999,0.75,0.20000000000000284,0.00001 +P,834,3334,1006.90965728,0.3,0,0.0001 +P,3336,3335,684.037697332,0.75,0,0.00001 +P,3337,3336,6521.53795772,0.75,1,0.00001 +P,1557,1555,1164.3153886999999,1,0.8000000000000043,0.00001 +P,1559,1557,5393.19210465,1,-0.5,0.00001 +P,1559,4145,529.071883568,0.3,0.30000000000000426,0.0001 +P,1561,1559,3935.71455861,1,0.8999999999999986,0.00001 +P,1550,1549,1204.30632346,0.75,1,0.00001 +P,3341,3339,2580.32993197,0.75,2.299999999999997,0.00001 +P,3341,835,421.508003908,0.15,0,0.0001 +P,3340,107,455.235230367,0.15,0,0.0001 +P,1547,3341,2591.57465956,0.75,6.600000000000001,0.00001 +P,3342,108,477.57468835,1,0.1999999999999993,0.00001 +P,1640,3342,580.957329391,1,0,0.00001 +P,1639,108,600.013263261,1,0.1999999999999993,0.00001 +P,3349,3353,880.3754479199999,1,1.5,0.00001 +P,1569,3343,409.44357212600005,0.3,11.3,0.0001 +P,3346,836,4834.52034603,1,-7,0.00001 +P,1579,1577,2699.54054614,1,5.600000000000001,0.00001 +P,2067,3344,2687.49288192,1,4.100000000000001,0.00001 +P,3354,1569,626.089104758,0.5,-0.1999999999999993,0.0001 +P,3354,2067,5119.28300316,1,-0.3999999999999986,0.00001 +P,836,3348,2497.58172656,1,1,0.00001 +P,3345,3351,4950.87540685,1,-0.1999999999999993,0.00001 +P,3347,3345,5686.414820589999,1,7.699999999999999,0.00001 +P,3355,3346,2635.72742006,1,6,0.00001 +P,3348,3347,3943.83837299,1,1,0.00001 +P,3350,3349,2315.97003764,1,1.3000000000000043,0.00001 +P,3351,3350,980.0400408510001,1,1.2999999999999972,0.00001 +P,4190,3352,689.252318035,0.15,-0.10000000000000142,0.0001 +P,3353,4190,1099.21332913,1,0.3999999999999986,0.00001 +P,1575,1573,2661.13194655,1,0.6999999999999993,0.00001 +P,1577,1575,5411.69459968,1,-6.699999999999999,0.00001 +P,3356,3355,2656.14263112,1,-11,0.00001 +P,1581,1579,2669.3302940599997,1,-10.800000000000004,0.00001 +P,3357,3356,6900.3212708500005,1,22.1,0.00001 +P,1585,1581,6974.0783758299995,1,20.800000000000004,0.00001 +P,3358,1585,1566.58043851,1,0.09999999999999964,0.00001 +P,1624,3358,563.4676049589999,1,0.10000000000000142,0.00001 +P,1626,1624,2400.0373864000003,1,1.1999999999999993,0.00001 +P,3359,1626,2083.08216624,1,-0.8000000000000007,0.00001 +P,4191,1583,2215.1430677500002,1,-0.1999999999999993,0.00001 +P,3360,3359,548.045422798,1,0,0.00001 +P,3365,3361,1345.8425003900002,0.3,0.7999999999999972,0.0001 +P,3361,3362,2166.27995776,0.3,-1.3999999999999986,0.0001 +P,3361,837,512.358733858,0.15,0.20000000000000284,0.0001 +P,838,3362,2229.2589134199998,0.3,-0.6000000000000014,0.0001 +P,838,3363,474.54286479,0.15,0.3999999999999986,0.0001 +P,3364,3365,1714.7692961100001,0.3,0.20000000000000284,0.0001 +P,3364,1428,1284.5113606500001,0.75,0.6000000000000014,0.00001 +P,551,3364,5229.64770429,0.75,-0.6000000000000014,0.00001 +P,3365,839,469.716095245,0.15,1.6999999999999957,0.0001 +P,1390,3367,625.691525466,0.15,0,0.0001 +P,1392,840,602.8138030470001,0.15,-0.7000000000000028,0.0001 +P,3381,3380,525.904023912,0.75,-2.1999999999999993,0.00001 +P,3370,4163,994.94350249,0.3,0,0.0001 +P,3370,3369,1866.7564078300002,0.3,0,0.0001 +P,3375,3370,354.731292258,0.3,1,0.0001 +P,3375,3372,710.4167570449999,0.75,1.3000000000000007,0.00001 +P,3372,3371,476.568027976,0.5,0,0.00001 +P,3372,3374,3146.6037778,0.75,5.699999999999999,0.00001 +P,3378,4161,5149.481061150001,0.3,3.700000000000003,0.0001 +P,3384,3373,516.2069281600001,0.5,-0.04999999999999716,0.00001 +P,3374,3382,1774.37542609,0.75,7.200000000000003,0.00001 +P,3376,3375,2313.98654954,0.75,-0.5,0.00001 +P,3379,3376,1153.51411549,0.75,-0.3000000000000007,0.00001 +P,3380,3378,911.787831437,0.3,0.1999999999999993,0.00001 +P,3380,3379,551.105697943,0.75,-2,0.00001 +P,3387,3381,1158.74532848,0.75,0,0.00001 +P,3382,4159,694.262924789,0.3,-0.20000000000000284,0.0001 +P,3383,3385,4175.5610260799995,0.5,61.55,0.00001 +P,3389,3388,1112.3812522800001,0.75,5,0.00001 +P,3385,3384,518.155795422,0.5,0.5,0.00001 +P,842,551,3513.1122047900003,0.75,-2,0.00001 +P,842,841,448.140172898,0.15,9,0.0001 +P,3386,842,1534.3746041299999,0.75,1.5,0.00001 +P,3390,3389,2191.46080155,0.75,-2,0.00001 +P,3391,4157,570.8755430220001,0.3,0.5,0.0001 +P,3393,3391,577.8754546709999,0.3,-0.10000000000000142,0.0001 +P,3393,3392,489.39862909199996,0.15,1.7999999999999972,0.0001 +P,3398,3395,471.462895882,0.3,0,0.0001 +P,3395,3394,511.33416565,0.3,0,0.0001 +P,3396,3399,3172.83088201,0.3,-5,0.0001 +P,3397,3396,574.6008151450001,0.3,0,0.0001 +P,3399,3398,444.77412774199996,0.3,0,0.0001 +P,3400,3402,1728.2059502,0.3,2,0.0001 +P,3402,3401,501.988433696,0.3,1,0.0001 +P,3559,1436,1221.53918218,0.5,0,0.0001 +P,3602,3604,597.8642153469999,0.3,-1.5,0.0001 +P,1155,2079,1523.03816249,0.3,0,0.0001 +P,3405,3403,657.400408476,0.3,0,0.0001 +P,3403,3521,686.190911569,0.3,0.5,0.0001 +P,3492,3429,458.990384694,0.3,0.19999999999999574,0.0001 +P,3458,843,447.19432081499997,0.15,2.5,0.0001 +P,3404,3464,563.009141796,0.3,0.5,0.0001 +P,3467,3404,589.629791956,0.3,0.5,0.0001 +P,3569,1156,508.232754222,0.15,-1,0.0001 +P,3522,3405,656.4273533940001,0.3,0.5,0.0001 +P,2078,3616,378.620793419,0.5,0,0.0001 +P,3406,844,1065.89091747,0.15,0,0.0001 +P,3592,1434,575.3719783570001,0.3,-1.9000000000000021,0.0001 +P,3630,3407,525.269869882,0.15,-0.29999999999999716,0.0001 +P,3407,845,531.0611086069999,0.15,-0.30000000000000426,0.0001 +P,3408,3626,636.191070355,0.3,0,0.0001 +P,4166,3408,1297.68267706,0.3,0,0.0001 +P,3594,3593,1701.99363814,0.3,0,0.0001 +P,3612,3410,476.556284649,0.15,-3.5,0.0001 +P,3410,3409,486.753600583,0.15,-3.5,0.0001 +P,3411,3589,562.499283646,0.3,0,0.0001 +P,3587,3411,561.0630507120001,0.3,0,0.0001 +P,3548,3412,607.685304695,0.3,0,0.0001 +P,3412,3547,610.265293141,0.3,1,0.0001 +P,3413,3544,580.776004159,0.3,0,0.0001 +P,3627,3413,585.4933265999999,0.3,0.5,0.0001 +P,3414,3555,627.1174614500001,0.3,-1.5,0.0001 +P,3531,3414,642.718058734,0.3,0,0.0001 +P,3530,3415,616.4996111730001,0.3,0,0.0001 +P,3532,3415,640.031664653,0.3,1.5,0.0001 +P,3416,3527,609.832150049,0.3,-0.5,0.0001 +P,3418,3416,589.6740745870001,0.3,0,0.0001 +P,3525,3417,620.503943802,0.3,1,0.0001 +P,3417,3524,633.539914376,0.3,1,0.0001 +P,3419,3418,585.089350094,0.3,0,0.0001 +P,3420,3419,599.8218338859999,0.3,0,0.0001 +P,3421,3420,633.594944002,0.3,0,0.0001 +P,3528,3421,660.29019197,0.3,-0.5,0.0001 +P,3523,3422,637.829382308,0.3,0,0.0001 +P,3422,3522,646.434074355,0.3,-1,0.0001 +P,3503,3499,635.6507883730001,0.15,-0.5,0.0001 +P,3501,2186,1681.59835952,0.3,0,0.0001 +P,3423,3472,595.43625809,0.3,0,0.0001 +P,3424,3423,1137.57680385,0.3,0,0.0001 +P,3609,3424,600.374532125,0.3,0,0.0001 +P,3425,3446,841.340331763,0.3,0,0.0001 +P,3448,3425,824.600001877,0.3,-1,0.0001 +P,3438,846,438.253161192,0.3,0.5,0.0001 +P,3426,3434,651.916305814,0.3,0,0.0001 +P,3427,3426,652.0099383009999,0.3,0,0.0001 +P,3435,3427,2546.3391288400003,0.3,-2,0.0001 +P,3485,3428,634.148545961,0.3,0,0.0001 +P,3540,3534,1945.71815402,0.3,-1,0.0001 +P,3504,871,659.7897398519999,0.15,1,0.0001 +P,3429,1018,875.1059147980001,0.3,0.30000000000000426,0.0001 +P,3558,3557,472.28294230899996,0.3,0,0.0001 +P,3561,3575,592.377014154,0.5,-0.5,0.0001 +P,3432,3431,469.559190291,0.15,0,0.0001 +P,3455,3432,444.639517257,0.15,0,0.0001 +P,3455,3454,1683.2895403599998,0.3,0,0.0001 +P,3433,4167,654.110424257,0.3,-2,0.0001 +P,3434,3433,646.187686189,0.3,0,0.0001 +P,3435,3444,2267.57197344,0.3,2,0.0001 +P,3437,3436,678.017666987,0.3,0,0.0001 +P,3436,3435,680.719081723,0.3,0,0.0001 +P,4165,3437,679.389459965,0.3,0,0.0001 +P,3440,3438,448.956210946,0.3,-0.19999999999999574,0.0001 +P,3449,3439,639.4641670780001,0.3,0,0.0001 +P,3439,3451,1222.68759014,0.3,1.3999999999999986,0.0001 +P,3442,3441,763.6269882370001,0.3,0,0.0001 +P,3445,3442,807.1840957320001,0.3,1.8999999999999986,0.0001 +P,3445,847,409.96060114799997,0.15,0,0.0001 +P,3447,848,501.196007808,0.15,0,0.0001 +P,4167,849,477.32304755999996,0.3,0,0.0001 +P,3444,850,309.689155276,0.15,0,0.0001 +P,3444,3448,1618.4032825200002,0.3,-2,0.0001 +P,3446,3445,1664.91402991,0.3,-1,0.0001 +P,3448,3447,460.268326186,0.15,2,0.0001 +P,3450,3449,1528.9306246200001,0.3,1.2000000000000028,0.0001 +P,3451,851,496.472195329,0.15,0,0.0001 +P,3452,3451,1625.3797400600001,0.3,0.5,0.0001 +P,852,4146,1062.6402769800002,0.3,-8,0.0001 +P,852,3452,1910.3950336799999,0.3,-3,0.0001 +P,3453,852,553.5122907,0.3,0,0.0001 +P,3454,3453,543.45930412,0.3,0,0.0001 +P,3456,3455,652.02551558,0.3,1,0.0001 +P,3457,853,564.5941095969999,0.15,0,0.0001 +P,3460,855,584.563032508,0.15,0.5,0.0001 +P,3459,854,506.654137819,0.15,2,0.0001 +P,3461,3460,1634.60277218,0.15,0,0.0001 +P,3490,1018,698.401961164,0.5,-0.7999999999999972,0.0001 +P,3462,3484,1497.6080714299999,0.3,-0.30000000000000426,0.0001 +P,3490,3462,869.028399878,0.5,-0.29999999999999716,0.0001 +P,3481,2184,1836.23796218,0.3,7,0.0001 +P,3463,4155,535.979568765,0.5,-3,0.00001 +P,3463,857,1109.91545821,0.5,0,0.00001 +P,857,3470,595.281205137,0.3,0,0.0001 +P,3464,856,545.624571058,0.3,0,0.0001 +P,3467,3465,491.257751863,0.3,0,0.0001 +P,3469,3466,449.901854109,0.15,0,0.0001 +P,3469,3467,595.327525444,0.3,0,0.0001 +P,3470,3468,400.53629681399997,0.15,0,0.0001 +P,3470,3469,621.526816411,0.3,-1,0.0001 +P,3471,857,1158.30729709,0.3,2,0.0001 +P,3471,858,487.68697748,0.15,-1,0.0001 +P,3472,859,587.3841905879999,0.3,-1,0.0001 +P,3472,3471,602.979982811,0.3,-1,0.0001 +P,3605,860,455.57036439800004,0.15,0,0.0001 +P,3605,3611,633.723877014,0.3,0,0.0001 +P,3478,3517,561.232935123,0.15,4.700000000000003,0.0001 +P,3473,3478,577.079021438,0.15,0.29999999999999716,0.0001 +P,3474,3473,605.177632278,0.15,0,0.0001 +P,3475,4164,1359.6247618999998,0.3,0,0.0001 +P,862,3475,698.0407574750001,0.3,0,0.0001 +P,862,861,478.474613138,0.15,0,0.0001 +P,3476,862,694.813433984,0.3,0,0.0001 +P,3520,3476,691.876103189,0.15,0,0.0001 +P,3477,3479,610.978901835,0.15,0.10000000000000142,0.0001 +P,3520,3477,611.919614706,0.3,0,0.0001 +P,3479,3478,607.9282936469999,0.15,0.19999999999999574,0.0001 +P,3480,3502,551.305388922,0.3,-0.5,0.0001 +P,2184,3480,796.260299743,0.3,-0.5,0.0001 +P,3538,3481,745.755654599,0.3,1,0.0001 +P,3538,3482,292.931772115,0.15,-1,0.0001 +P,3484,863,414.627841217,0.15,0,0.0001 +P,3483,3489,696.098896822,0.3,0.7999999999999972,0.0001 +P,3484,3483,734.348729177,0.5,0.8000000000000043,0.0001 +P,3485,864,511.9929696660001,0.15,0,0.0001 +P,3496,3485,1302.4577924,0.3,0,0.0001 +P,3496,865,461.76366679,0.15,0,0.0001 +P,3487,3486,440.366205974,0.15,0,0.0001 +P,3487,3497,723.4706466079999,0.3,22.299999999999997,0.0001 +P,3488,3487,724.0847143719999,0.3,2.700000000000003,0.0001 +P,3488,866,419.446939614,0.15,-2,0.0001 +P,3489,3488,705.0071052449999,0.3,-5,0.0001 +P,3491,3490,785.562525817,0.5,0,0.0001 +P,3492,3491,653.0504831679999,0.5,1.2999999999999972,0.0001 +P,3494,867,421.34008699,0.3,0,0.0001 +P,3493,3492,534.3631607269999,0.3,-0.5999999999999943,0.0001 +P,3495,3493,1137.46346793,0.5,-0.7000000000000028,0.0001 +P,3495,3494,652.543464782,0.3,-9,0.0001 +P,3497,3496,2073.1747668599996,0.3,-22,0.0001 +P,3497,868,403.73705701700004,0.3,0,0.0001 +P,3498,869,626.133420397,0.15,-5,0.0001 +P,3499,3498,640.486210907,0.15,-5,0.0001 +P,3504,3500,458.09743806499995,0.3,0.20000000000000284,0.0001 +P,3502,870,498.132290147,0.3,-8,0.0001 +P,3502,3501,554.600355696,0.3,0,0.0001 +P,871,3503,663.9276915099999,0.15,-0.5,0.0001 +P,3507,3506,514.0741265620001,0.3,0,0.0001 +P,3508,2187,2165.6367121,0.3,-12,0.0001 +P,2187,3507,1107.39189706,0.3,-2,0.0001 +P,3509,3508,659.836100386,0.3,7,0.0001 +P,3510,3509,642.3532811,0.3,0,0.0001 +P,873,3510,1298.9633943400001,0.3,7,0.0001 +P,3511,872,464.017283802,0.15,11.5,0.0001 +P,873,3511,386.151374045,0.15,11.5,0.0001 +P,3513,873,660.464163883,0.3,3.6999999999999993,0.0001 +P,3513,3512,376.350166881,0.15,0.6999999999999993,0.0001 +P,3514,3513,642.909040384,0.3,-12.7,0.0001 +P,3514,874,437.031748509,0.15,-6,0.0001 +P,3515,3514,623.2365964210001,0.3,1,0.0001 +P,3516,3515,631.350780055,0.3,8,0.0001 +P,3516,875,409.146624014,0.15,0,0.0001 +P,876,3516,1335.43619339,0.3,2,0.0001 +P,1426,3616,627.3452633620001,0.3,1,0.0001 +P,3517,877,602.7181082850001,0.15,12,0.0001 +P,1192,3518,470.933460338,0.15,0,0.0001 +P,3595,3519,396.307636613,0.15,0,0.0001 +P,3595,3557,710.256505856,0.3,0,0.0001 +P,3521,3520,1332.1548619500002,0.3,0,0.0001 +P,3521,878,466.47744318599996,0.15,2,0.0001 +P,3522,879,531.230368582,0.15,2,0.0001 +P,3524,3523,1910.77406777,0.3,-1,0.0001 +P,3524,880,552.960488399,0.15,0,0.0001 +P,3526,3525,614.637383672,0.3,0,0.0001 +P,3527,3526,611.815131943,0.3,0,0.0001 +P,3527,881,576.884869995,0.3,2,0.0001 +P,3528,3550,638.754918289,0.3,-5,0.0001 +P,3529,3528,604.386522494,0.3,1.5,0.0001 +P,3530,3529,605.713912604,0.3,0,0.0001 +P,3532,3531,1312.57095803,0.3,-1.5,0.0001 +P,3533,882,546.18903606,0.3,0.5,0.0001 +P,3534,3533,524.521718221,0.15,0.5,0.0001 +P,3540,883,534.421628205,0.15,0,0.0001 +P,1421,3537,597.551963599,0.3,0,0.0001 +P,1421,3543,1423.92362388,0.3,-3,0.0001 +P,3537,3535,571.057684887,0.3,0,0.0001 +P,3537,3536,557.68332152,0.15,0,0.0001 +P,3539,3538,1647.4907274799998,0.3,-4,0.0001 +P,3543,3540,2074.76864355,0.3,-1,0.0001 +P,3541,884,594.805915237,0.15,0,0.0001 +P,3542,3541,621.108136132,0.15,0,0.0001 +P,3543,3542,621.109506484,0.3,0,0.0001 +P,3544,885,574.1945500209999,0.15,0.5,0.0001 +P,3545,3627,646.808594945,0.3,-6,0.0001 +P,3545,886,394.653382258,0.15,0,0.0001 +P,3547,3545,653.577939724,0.3,6,0.0001 +P,3546,887,555.702539573,0.3,0.5,0.0001 +P,3547,3546,534.214531308,0.3,0.5,0.0001 +P,3550,3548,612.122601172,0.3,1,0.0001 +P,3549,888,518.820529125,0.15,3.5,0.0001 +P,3550,3549,433.166771043,0.3,3.5,0.0001 +P,3551,889,551.635115813,0.15,16,0.0001 +P,3552,3551,585.3553512389999,0.3,-2,0.0001 +P,3554,3552,625.315619792,0.3,-1,0.0001 +P,3554,3553,495.428595939,0.15,1,0.0001 +P,3555,3554,636.964276864,0.3,5,0.0001 +P,3555,890,463.826625574,0.15,2,0.0001 +P,3556,891,712.0231085810001,0.15,2.6000000000000014,0.0001 +P,3556,3603,1857.98022683,0.3,2.6000000000000014,0.0001 +P,2072,3558,471.44786289200005,0.5,-1,0.0001 +P,3557,1426,658.8388409209999,0.3,-1,0.0001 +P,3558,3582,1035.434312,0.5,2,0.0001 +P,902,892,360.701207624,0.15,0,0.0001 +P,1433,893,832.868448466,0.15,0,0.0001 +P,1433,3559,3635.09468033,0.5,-6,0.0001 +P,3578,894,537.85510344,0.15,0,0.0001 +P,3562,895,746.3787523999999,0.15,0,0.0001 +P,3560,896,559.260036671,0.3,0,0.0001 +P,3567,3561,1244.14112479,0.5,0.5,0.0001 +P,3565,897,531.993742905,0.5,0,0.0001 +P,3563,3562,1273.91365124,0.5,-1,0.0001 +P,3564,3563,617.252688209,0.5,2,0.0001 +P,1358,3567,1885.61686983,0.5,-1,0.0001 +P,3566,3565,538.152051202,0.75,-9,0.0001 +P,3575,3566,541.367915012,0.75,5,0.0001 +P,3568,3567,779.332958155,0.15,0,0.0001 +P,3569,3570,1145.78061707,0.3,-1,0.0001 +P,3577,898,470.28229004400004,0.3,0,0.0001 +P,3577,3569,599.730381233,0.3,0,0.0001 +P,3571,3579,577.6949888190001,0.3,-2,0.0001 +P,3570,899,509.0633054780001,0.15,1,0.0001 +P,3570,3576,555.323543295,0.3,0,0.0001 +P,3573,900,521.2833857569999,0.15,1,0.0001 +P,3572,3571,581.808408516,0.15,0,0.0001 +P,3573,3572,590.256249346,0.3,0,0.0001 +P,3574,3573,584.303059643,0.3,1,0.0001 +P,3574,3576,2336.17291244,0.3,-1,0.0001 +P,3576,3575,589.683915016,0.3,0,0.0001 +P,3607,3577,1731.92780576,0.3,0,0.0001 +P,3579,3578,1124.94024469,0.3,0,0.0001 +P,3623,3587,558.808763207,0.3,0,0.0001 +P,3582,3580,268.41327472,0.3,0.3999999999999986,0.0001 +P,3581,1432,1440.36640414,0.5,0,0.0001 +P,3582,3581,631.2965112759999,0.5,-2,0.0001 +P,3584,3583,518.210140426,0.15,0,0.0001 +P,3596,3584,552.6354564330001,0.15,1,0.0001 +P,3596,3585,393.096977488,0.15,-3,0.0001 +P,3587,3586,527.3030693219999,0.15,0,0.0001 +P,3589,3588,537.070697375,0.15,0,0.0001 +P,3590,3625,578.874809145,0.3,0.5,0.0001 +P,3612,3590,1182.67715881,0.3,0.5,0.0001 +P,3591,901,1058.18573808,0.15,0,0.0001 +P,3593,3592,575.0266795480001,0.3,-0.5999999999999979,0.0001 +P,3597,3595,657.773397692,0.3,0,0.0001 +P,3597,3596,451.580089325,0.15,4,0.0001 +P,3599,3597,636.704096933,0.3,-2,0.0001 +P,3599,3600,1108.6884480800002,0.3,-1,0.0001 +P,3598,3613,607.0279687770001,0.3,0,0.0001 +P,3599,3598,1235.59884592,0.3,-2,0.0001 +P,3600,1432,504.02957646000004,0.3,-1,0.0001 +P,3600,1430,2174.18437859,0.3,0,0.0001 +P,1419,903,911.544160473,0.15,-1,0.0001 +P,3603,904,502.591048536,0.15,0,0.0001 +P,3603,3602,633.557708272,0.3,-1.5,0.0001 +P,3606,3605,1881.54707567,0.3,1.5,0.0001 +P,3608,3606,1333.4708415,0.3,1.5,0.0001 +P,3608,3607,324.690661948,0.3,0,0.0001 +P,3610,3609,595.827347105,0.3,1,0.0001 +P,3611,3610,603.080799023,0.3,1,0.0001 +P,3613,3612,608.598398751,0.3,1,0.0001 +P,3613,905,415.30064398999997,0.15,1,0.0001 +P,2079,1192,1568.21271747,0.3,6,0.0001 +P,3614,3620,614.623311059,0.3,4.900000000000006,0.0001 +P,3615,3614,626.094629839,0.3,0,0.0001 +P,3616,3615,680.67490858,0.3,4.799999999999997,0.0001 +P,3618,3617,620.986137166,0.3,-3.6000000000000014,0.0001 +P,3619,3618,601.950880838,0.3,0,0.0001 +P,3620,3619,516.194655788,0.3,-3.700000000000003,0.0001 +P,3620,3622,605.7865553729999,0.3,0.29999999999999716,0.0001 +P,3622,3621,565.5819255670001,0.3,-8.8,0.0001 +P,3622,2075,581.716310391,0.3,-0.10000000000000142,0.0001 +P,3625,3623,1135.90631099,0.3,-4,0.0001 +P,3625,3624,496.614611114,0.3,-6,0.0001 +P,3626,3630,650.2242964090001,0.3,0,0.0001 +P,3628,3627,622.7344227340001,0.3,0.5,0.0001 +P,3629,3628,621.868507464,0.15,0,0.0001 +P,3630,3629,1263.89916876,0.3,0.5,0.0001 +P,3641,3635,5419.1103104799995,0.5,-2,0.00001 +P,3639,3631,490.260940185,0.15,2.8000000000000007,0.0001 +P,3639,3657,1019.7368628800001,0.3,5.5,0.0001 +P,3645,3632,375.642306073,0.15,0,0.0001 +P,3645,3644,7826.4617735500005,0.5,-1,0.00001 +P,3646,115,661.3748422470001,0.3,1,0.0001 +P,3643,3633,481.272561647,0.3,1,0.0001 +P,3654,3634,491.56645893,0.15,0,0.0001 +P,3654,3637,1325.41159155,0.5,0,0.00001 +P,3637,3636,456.634688986,0.15,0,0.0001 +P,3637,3650,663.195460839,0.5,-1,0.00001 +P,3649,3648,661.024905247,0.3,0,0.0001 +P,3638,3653,1154.38392011,0.5,0.5,0.00001 +P,3649,3638,452.105412008,0.5,0.6999999999999993,0.00001 +P,3640,3656,652.4554425120001,0.5,4,0.00001 +P,3643,3641,817.324630085,0.5,0,0.00001 +P,3644,3642,461.93122112000003,0.15,0,0.0001 +P,3644,3643,3313.0239979,0.5,1,0.00001 +P,4148,3645,1438.58517793,0.5,-0.3000000000000007,0.00001 +P,3647,3646,651.7854632159999,0.3,0.1999999999999993,0.0001 +P,3648,3647,655.58286195,0.3,0,0.0001 +P,3650,3649,875.727721057,0.5,-0.1999999999999993,0.00001 +P,3652,3651,1119.60681733,0.5,0,0.00001 +P,3653,3652,570.5434268710001,0.5,0,0.00001 +P,3655,3654,663.511962426,0.5,2,0.00001 +P,3656,3655,652.537062605,0.5,-11,0.00001 +P,3657,4156,1056.46837359,0.3,-3,0.0001 +P,920,4144,526.643757499,0.3,1,0.0001 +P,3703,907,402.97748586299997,0.3,0,0.0001 +P,3660,3680,537.323965973,0.15,0,0.0001 +P,3658,1992,530.39619108,0.3,0,0.0001 +P,918,3658,540.0118141930001,0.15,-1.1000000000000014,0.0001 +P,3675,3659,1069.13061064,0.3,-14,0.0001 +P,3660,908,541.621074026,0.3,-4,0.0001 +P,3665,3704,665.78492604,0.3,18.5,0.0001 +P,3661,3670,1155.37932834,0.3,0,0.0005 +P,3662,3670,536.0126292369999,0.3,-0.5,0.0001 +P,3672,3662,550.718042734,0.3,-0.5,0.0001 +P,3692,3663,654.671420388,0.3,0,0.0001 +P,3663,3684,655.472254484,0.3,-4,0.0001 +P,3681,3664,515.8833461820001,0.15,-5.700000000000003,0.0001 +P,3669,3665,643.384002314,0.3,0,0.0001 +P,3667,3666,1227.5893195600001,0.3,0,0.0001 +P,3668,3706,657.334921664,0.3,-1,0.0001 +P,3698,3668,621.589405424,0.3,-1,0.0001 +P,909,1133,1342.27388081,0.3,-1.5,0.0001 +P,909,3669,5279.976325619999,0.3,18.5,0.0001 +P,3699,910,512.232013344,0.15,0,0.0001 +P,3700,3699,637.85370983,0.3,-3,0.0001 +P,3670,911,1872.83271398,0.3,7,0.0005 +P,4170,3672,1107.42783228,0.3,-1,0.0001 +P,3671,912,460.577981835,0.3,0.19999999999999574,0.0001 +P,3672,3671,418.82421715000004,0.3,0.10000000000000142,0.0001 +P,3676,3673,499.33153335000003,0.15,0,0.0001 +P,3676,3675,581.778358401,0.15,0,0.0001 +P,3677,3674,494.185252384,0.15,0,0.0001 +P,3677,913,493.149882582,0.15,0,0.0001 +P,3675,914,542.348273093,0.3,-1,0.0001 +P,3678,3676,583.631159173,0.15,8,0.0001 +P,3678,915,498.317182882,0.15,0,0.0001 +P,916,3677,485.397277678,0.15,0,0.0001 +P,916,3678,1760.2251490400001,0.15,8,0.0001 +P,4168,916,1162.38723485,0.3,0,0.0001 +P,3686,3679,1339.63404124,0.3,0,0.0001 +P,918,3695,704.155281054,0.3,0.8999999999999986,0.0001 +P,3681,917,561.3985650049999,0.15,0,0.0001 +P,3681,3680,539.356838089,0.15,0,0.0001 +P,3682,918,699.327000236,0.3,0.10000000000000142,0.0001 +P,3689,3682,703.413720388,0.3,-2.299999999999997,0.0001 +P,3689,4171,529.0065252640001,0.3,1.7000000000000028,0.0001 +P,3683,922,661.7073178750001,0.3,-1.5,0.0001 +P,3684,3683,1960.07582505,0.3,-1.5,0.0001 +P,924,919,510.0816358619999,0.15,2,0.0001 +P,924,3691,1338.11038659,0.3,-1,0.0001 +P,920,3685,549.044520628,0.3,6,0.0001 +P,3687,3686,659.377672047,0.3,2,0.0001 +P,3687,920,558.098612701,0.3,1,0.0001 +P,3688,3687,666.262492209,0.3,0,0.0001 +P,922,3688,1317.16076158,0.3,0,0.0001 +P,922,921,1083.0260705100002,0.3,11,0.0001 +P,3690,3689,708.764531951,0.3,1.2999999999999972,0.0001 +P,3691,3690,1353.79359162,0.3,-4,0.0001 +P,3691,923,343.28156772,0.15,0,0.0001 +P,3706,924,1272.61309235,0.3,2,0.0001 +P,3693,3692,653.634198048,0.3,0,0.0001 +P,3695,3693,4013.5782837,0.3,-4,0.0001 +P,3695,3694,418.629147209,0.15,1,0.0001 +P,268,925,397.889191925,0.15,0.3000000000000007,0.0001 +P,3696,3709,1336.13828749,0.3,0,0.0001 +P,268,3696,733.0619954599999,0.3,-3.6999999999999993,0.0001 +P,3710,3697,382.27491571599995,0.3,-2,0.0001 +P,3699,3698,4391.2163623999995,0.3,0,0.0001 +P,3701,3700,1263.43327038,0.3,0,0.0001 +P,3702,3701,633.9848393010001,0.3,0,0.0001 +P,3710,3702,1299.59560556,0.3,-3,0.0001 +P,3703,3707,673.7512209170001,0.3,0,0.0001 +P,3704,3703,1940.95329529,0.3,-22,0.0001 +P,3704,926,390.00571842,0.15,2,0.0001 +P,3706,3705,358.376986542,0.3,30,0.0001 +P,3707,927,410.399108984,0.15,0,0.0001 +P,3707,3711,664.6945686920001,0.3,-4,0.0001 +P,3709,3708,1227.5893195600001,0.3,0,0.0001 +P,3711,3710,650.861211004,0.3,0,0.0001 +P,3711,4169,1204.39273338,0.3,8,0.0001 +P,3712,928,508.83240288300004,0.3,0.20000000000000284,0.0001 +P,3712,929,558.171604357,0.3,7.200000000000003,0.0001 +P,3943,3712,547.868069318,0.3,0,0.0001 +P,3817,3713,1125.67452606,0.5,4,0.0001 +P,3755,3714,518.2961761030001,0.3,0,0.0001 +P,2130,3715,560.906292182,0.5,-1,0.0001 +P,3715,3718,554.522481222,0.3,-0.8999999999999986,0.0001 +P,3717,3716,922.036786269,0.3,-1,0.0001 +P,3718,3717,437.755030647,0.3,-1,0.0001 +P,3808,3719,456.51913893399995,0.75,2,0.0001 +P,3720,3803,544.986455544,0.75,0,0.0001 +P,3811,3720,2111.1097981000003,0.75,-0.5,0.0001 +P,3721,3840,1836.62840252,0.5,3,0.0001 +P,3841,3721,1790.87830125,0.5,0,0.0001 +P,3722,3763,532.298415289,0.75,0,0.0001 +P,3728,3722,538.893759724,0.75,0,0.0001 +P,3723,3781,533.41011821,0.75,0,0.0005 +P,3724,3723,524.0728383410001,0.75,0,0.0005 +P,3725,3724,1035.12674682,0.75,0,0.0005 +P,3726,3725,524.88574533,0.75,0,0.0001 +P,3727,3726,523.9203252359999,0.75,0,0.0001 +P,3760,3727,524.885769309,0.75,0,0.0001 +P,3783,3728,2172.6731897299996,0.75,0,0.0005 +P,3729,930,607.299975222,0.15,4,0.0001 +P,3730,3729,634.986903815,0.15,0,0.0001 +P,3731,3730,643.3611643779999,0.15,0,0.0001 +P,939,3731,1319.56094924,0.15,4,0.0001 +P,3732,3796,637.993500156,0.15,0.5,0.0001 +P,3733,3732,623.058977865,0.15,0,0.0001 +P,3788,3733,600.015360207,0.15,0,0.0001 +P,3734,3756,484.02641426499997,0.5,0,0.0001 +P,3757,3734,477.775348328,0.5,0,0.0001 +P,3735,3852,538.8281698979999,0.5,0,0.0001 +P,3736,3735,2055.60468804,0.5,0,0.0001 +P,3859,3736,552.172436974,0.5,1.8000000000000043,0.0001 +P,3737,3871,599.9628440519999,0.5,0,0.0001 +P,3738,3737,606.973589728,0.5,0,0.0001 +P,3873,3738,2496.11654268,0.5,0.29999999999999716,0.0001 +P,3739,3876,632.0412001,0.5,0,0.0001 +P,3740,3739,620.1108302529999,0.5,0,0.0001 +P,3741,3740,608.932640521,0.5,-0.5,0.0001 +P,3742,3741,598.946331398,0.5,0,0.0001 +P,3877,3742,592.573980987,0.5,0,0.0001 +P,3743,3893,647.690903633,0.5,0,0.0001 +P,3891,3743,655.487757088,0.75,0.10000000000000142,0.0001 +P,3744,3909,493.850849248,0.5,0,0.0001 +P,3907,3744,1078.67294131,0.75,-0.5,0.0001 +P,3745,3925,549.862920614,0.3,0,0.0001 +P,3746,3745,536.0507420790001,0.3,0,0.0001 +P,3747,3746,520.728434991,0.3,0,0.0001 +P,3926,3747,512.0524390859999,0.3,0,0.0001 +P,3748,3934,449.02696019,0.3,0,0.0001 +P,3936,3748,444.46930412399996,0.3,1.0999999999999943,0.0001 +P,3749,2132,555.719251626,0.75,-1.8999999999999986,0.0001 +P,3750,3749,556.567982035,0.75,0,0.0001 +P,3954,3750,556.9549467879999,0.75,0,0.0001 +P,3751,2130,600.2951639400001,0.75,0.19999999999999574,0.0001 +P,3850,3751,578.243407546,0.75,0,0.0001 +P,3753,4153,1056.7495129,0.5,1,0.0001 +P,3752,931,516.3079974880001,0.3,0,0.0001 +P,3753,3752,533.608351598,0.5,0,0.0001 +P,3754,3753,494.140438083,0.5,0,0.0001 +P,3755,3754,1465.22528677,0.5,-1,0.0001 +P,3756,3755,961.95407664,0.5,1,0.0001 +P,3846,3757,490.40928679700005,0.5,0,0.0001 +P,3846,932,529.436411716,0.3,3,0.0001 +P,3917,3758,437.45726327200003,0.15,2,0.0001 +P,3759,933,524.943558887,0.15,0,0.0001 +P,3759,934,504.264209312,0.3,-12.200000000000003,0.0001 +P,3957,3759,2052.10326847,0.3,36.7,0.0001 +P,3760,3761,530.918354973,0.75,0,0.0005 +P,3762,3761,530.930579711,0.5,0,0.0001 +P,3763,3762,531.043506113,0.75,0,0.0005 +P,3766,3767,943.577216592,0.15,-0.3000000000000007,0.0005 +P,3764,935,526.746253583,0.3,4,0.0005 +P,3765,3764,518.1610749499999,0.3,0,0.0005 +P,3768,3766,514.231336638,0.15,0,0.0005 +P,3768,3785,529.853825622,0.75,-0.6000000000000014,0.0005 +P,3767,4177,518.6005629790001,0.3,3.0000000000000036,0.0001 +P,3769,3768,1045.8052184399999,0.75,0,0.0005 +P,3769,936,491.073231178,0.15,2,0.0005 +P,3772,3769,1056.30445087,0.75,-2,0.0005 +P,3772,3770,430.408463726,0.15,0,0.0005 +P,3773,3771,530.1238613419999,0.3,-5,0.0005 +P,3775,3772,1094.76565706,0.75,-3,0.0005 +P,3774,3773,528.053094658,0.5,-2.5,0.0005 +P,3775,3774,553.336201466,0.3,-2.5,0.0005 +P,3776,3775,540.2906262490001,0.75,0,0.0001 +P,3777,3776,512.327673237,0.5,0,0.0001 +P,3778,3777,510.88871898800005,0.75,0,0.0001 +P,3779,3778,517.9393145820001,0.75,0,0.0005 +P,3781,3779,531.82895023,0.75,0,0.0005 +P,3781,3780,507.453575126,0.3,0,0.0001 +P,3783,3782,488.163030026,0.3,-3,0.0005 +P,3786,3783,569.704375921,0.75,-2,0.0005 +P,3785,3784,797.112446462,0.75,2.6000000000000014,0.0005 +P,3990,3786,571.022935471,0.75,0,0.0005 +P,3787,937,2476.39266068,0.5,-5.899999999999999,0.0005 +P,4176,3787,1127.9259885499998,0.5,4.299999999999997,0.0001 +P,4174,3788,1195.25326225,0.15,0.5,0.0001 +P,939,938,501.20848538200005,0.15,0,0.0001 +P,3789,939,666.632634337,0.15,6.299999999999997,0.0001 +P,3792,3789,681.659516502,0.3,0.20000000000000284,0.0001 +P,3791,3790,512.644738651,0.3,2.1999999999999957,0.0001 +P,3792,3791,501.715894432,0.3,2.1000000000000014,0.0001 +P,3793,3792,1303.8876242,0.3,2.799999999999997,0.0001 +P,3794,3793,642.1242185169999,0.3,0,0.0001 +P,3796,3794,650.9036889,0.15,2.700000000000003,0.0001 +P,3796,3795,470.53946191700004,0.15,0,0.0001 +P,3798,3797,552.50257533,0.15,1,0.0001 +P,3801,3798,514.43563976,0.5,1,0.0001 +P,3801,3799,535.780174803,0.15,0,0.0001 +P,3802,3800,464.720528317,0.3,0,0.0001 +P,3802,3801,544.407033077,0.5,1,0.0001 +P,4172,3802,1048.69784091,0.5,-1,0.0001 +P,3809,940,518.8367591350001,0.15,0,0.0001 +P,3809,3805,1591.78151355,0.75,-1,0.0001 +P,3811,941,508.11812074999995,0.15,2,0.0001 +P,3803,3810,567.2118641850001,0.5,-0.5,0.0001 +P,3805,3804,480.264128736,0.15,-1,0.0001 +P,3805,3807,1617.83994648,0.75,-5,0.0001 +P,3806,3808,542.518678686,0.5,0,0.0001 +P,3807,3806,1092.82780521,0.75,0,0.0001 +P,3807,3820,1257.37995697,0.3,4,0.0001 +P,3808,4142,1558.0124065100001,0.5,0,0.0001 +P,3810,3809,1119.29705378,0.75,-1,0.0001 +P,3812,3811,545.5670328599999,0.5,-0.5,0.0001 +P,3813,3812,1082.39540074,0.75,-0.5,0.0001 +P,3813,3817,1105.75009619,0.5,1,0.0001 +P,3816,3813,478.877830097,0.75,1,0.0001 +P,3815,3814,448.673831053,0.5,0.5,0.0001 +P,3816,3815,461.29447371799995,0.75,0.5,0.0001 +P,3818,3817,457.130602116,0.5,-1,0.0001 +P,942,3818,442.478669787,0.3,-1,0.0001 +P,3820,3819,417.812801547,0.3,2,0.0001 +P,3824,3821,462.761371902,0.15,0,0.0001 +P,1293,3822,1187.6139913999998,0.5,-0.7999999999999972,0.0001 +P,3822,943,474.007284913,0.15,-0.20000000000000284,0.0001 +P,3822,3823,2782.12142702,0.5,1.7999999999999972,0.0001 +P,1295,1294,1687.42945459,0.5,2,0.0001 +P,3834,3824,700.565995982,0.15,0,0.0001 +P,3828,3827,1490.71153929,0.5,0,0.0001 +P,3831,3830,568.00457433,0.5,0,0.0001 +P,3832,3831,552.11425096,0.5,4,0.0001 +P,3833,3832,3416.48088986,0.5,3,0.0001 +P,3840,3839,1129.86320512,0.5,1,0.0001 +P,3844,3843,1366.1446669,0.5,-1,0.0001 +P,3866,3844,570.2053771010001,0.75,0,0.0001 +P,3981,944,418.163493281,0.15,2,0.0001 +P,3981,3968,580.567637818,0.75,0,0.0001 +P,945,3845,487.45269509099995,0.15,-10,0.0001 +P,3847,3846,486.273343429,0.5,0.5,0.0001 +P,3848,3847,463.653550256,0.5,0,0.0001 +P,3849,3848,457.35631512500004,0.5,0,0.0001 +P,3851,3849,986.973042877,0.5,0.5,0.0001 +P,3851,945,541.841691308,0.3,1,0.0001 +P,3957,3850,591.47689673,0.75,0.20000000000000284,0.0001 +P,3856,3890,1342.86348204,0.3,10,0.0001 +P,3856,946,452.206538397,0.3,0,0.0001 +P,3881,947,518.603723918,0.15,4,0.0001 +P,3852,3851,533.851247411,0.5,1.8999999999999986,0.0001 +P,3859,3853,472.061265718,0.3,-0.29999999999999716,0.0001 +P,3855,948,449.32960015000003,0.3,-2,0.0001 +P,3855,3854,1008.4991219499999,0.3,11,0.0001 +P,3858,3857,486.680753309,0.3,0,0.0001 +P,3862,3858,536.121264851,0.3,1,0.0001 +P,3860,3859,534.844757181,0.5,-0.30000000000000426,0.0001 +P,3861,3860,530.896086716,0.5,0,0.0001 +P,3862,3861,554.345627628,0.5,-0.29999999999999716,0.0001 +P,3867,949,472.41766828,0.3,2.299999999999997,0.0001 +P,3863,3862,567.670321764,0.5,2.1999999999999957,0.0001 +P,3864,3863,568.664746566,0.5,0,0.0001 +P,3868,3864,1695.6622020700001,0.5,2.200000000000003,0.0001 +P,3868,3867,448.622468256,0.15,0.20000000000000284,0.0001 +P,3865,3878,1791.06421247,0.5,4,0.0001 +P,3869,3867,445.953576868,0.3,0,0.0001 +P,3869,3868,597.578130355,0.5,-0.20000000000000284,0.0001 +P,3870,3869,598.961693945,0.5,0.4000000000000057,0.0001 +P,3871,3870,593.549970906,0.5,0,0.0001 +P,3872,3891,646.840156384,0.5,0.3999999999999986,0.0001 +P,3906,3872,1882.0893297500002,0.75,0.3999999999999986,0.0001 +P,3906,3905,589.838029014,0.3,3,0.0001 +P,3874,3873,639.50173103,0.5,-0.5,0.0001 +P,3875,3874,640.9377768559999,0.5,0,0.0001 +P,3876,3875,637.4767751119999,0.5,-0.5,0.0001 +P,3878,950,476.844065498,0.15,1,0.0001 +P,3878,3877,614.408425341,0.5,-0.5,0.0001 +P,3886,3879,1637.2109431899999,0.75,0,0.0001 +P,3886,3880,391.89479992300005,0.15,-1,0.0001 +P,3894,3881,539.983528177,0.3,1,0.0001 +P,3882,4175,606.99246832,0.15,0,0.0001 +P,3882,951,468.328587276,0.3,0,0.0001 +P,3883,3882,593.143859547,0.15,0.5,0.0001 +P,3915,3883,1200.65662642,0.3,0.5,0.0001 +P,3884,952,446.776655941,0.15,0.5,0.0001 +P,3915,3884,419.528004044,0.3,0.5,0.0001 +P,3888,3886,1301.95016373,0.75,-6.200000000000003,0.0001 +P,3887,953,444.14361514,0.15,0.5,0.0001 +P,3888,3887,410.717911103,0.3,0.29999999999999716,0.0001 +P,3890,3855,484.216824652,0.3,3,0.0001 +P,3889,954,466.418976329,0.15,0.5,0.0001 +P,3890,3889,435.87999012,0.3,0.5,0.0001 +P,3891,955,426.136523191,0.15,0.20000000000000284,0.0001 +P,3892,3913,704.785014303,0.5,0.3999999999999986,0.0001 +P,3893,3892,664.9022582,0.5,0,0.0001 +P,3895,3894,553.1577050599999,0.3,0,0.0001 +P,3897,3895,1614.15228869,0.3,33,0.0001 +P,3896,956,499.55823460299996,0.15,0.5,0.0001 +P,3897,3896,509.71190191000005,0.15,0.5,0.0001 +P,3898,3897,1096.2038560800002,0.3,4,0.0001 +P,3898,957,481.62841764499996,0.3,1,0.0001 +P,3901,3898,548.709857114,0.3,7,0.0001 +P,3901,3899,502.149363863,0.15,-1,0.0001 +P,3900,958,455.956365632,0.15,0,0.0001 +P,3905,3900,438.193535581,0.3,0,0.0001 +P,3902,3901,545.340313238,0.3,-2,0.0001 +P,3903,3902,530.157721893,0.3,0,0.0001 +P,3904,3903,549.333325099,0.3,0,0.0001 +P,3905,3904,590.510691896,0.3,-2,0.0001 +P,961,3906,578.2066232789999,0.75,-1,0.0001 +P,961,959,459.449645041,0.15,1,0.0001 +P,3917,960,1072.69490193,0.75,1,0.0001 +P,960,3907,438.355238245,0.75,2,0.0001 +P,3908,960,1023.68666713,0.5,0,0.0001 +P,3909,961,549.092578529,0.5,-0.5,0.0001 +P,3913,962,383.18873230099996,0.15,3.8000000000000043,0.0001 +P,3910,3914,718.707724738,0.3,0.29999999999999716,0.0001 +P,3911,3910,729.568090523,0.5,-0.10000000000000142,0.00001 +P,3912,3911,725.6283592450001,0.5,-0.29999999999999716,0.0001 +P,3885,3915,2679.21789176,0.3,4.600000000000001,0.0001 +P,3942,3916,529.2060822,0.3,-4.799999999999997,0.0001 +P,3945,3944,918.44399064,0.3,0,0.0001 +P,3918,4180,485.11451405,0.15,0,0.0001 +P,3919,3917,556.261866853,0.75,-1,0.0001 +P,3919,3918,482.632084344,0.15,1,0.0001 +P,3921,3919,552.5225537340001,0.75,0,0.0001 +P,3921,3920,432.617099816,0.15,1,0.0001 +P,3922,3921,567.532733946,0.75,0.5,0.0001 +P,3923,3922,547.594367517,0.5,0,0.0001 +P,3935,3923,1104.95840717,0.75,0.5,0.0001 +P,3935,964,472.655902428,0.3,2,0.0001 +P,3939,965,420.428266157,0.3,-1,0.0001 +P,3925,3924,554.80279668,0.3,4,0.0001 +P,3928,3926,971.2809634,0.3,4,0.0001 +P,3928,3927,499.724974157,0.15,1,0.0001 +P,3930,3928,510.9725769,0.3,1.1000000000000014,0.0001 +P,3930,3929,510.87207078700004,0.15,1.1000000000000014,0.0001 +P,3931,3930,476.19807433,0.15,1.1000000000000014,0.0001 +P,3932,3931,443.125546761,0.3,0,0.0001 +P,3933,3932,436.210216195,0.3,0,0.0001 +P,3934,3933,440.142082544,0.3,0,0.0001 +P,3936,966,454.79750029999997,0.15,1.2999999999999972,0.0001 +P,3940,3935,594.888101026,0.75,0,0.0001 +P,3937,3936,434.834131782,0.3,0.9000000000000057,0.0001 +P,3938,3937,435.83718235000003,0.3,0,0.0001 +P,3940,3938,460.281775514,0.3,0.7999999999999972,0.0001 +P,3941,3939,296.248815458,0.15,1,0.0001 +P,3941,3940,618.051827108,0.75,0,0.0001 +P,3943,3942,458.71791747599997,0.3,5.200000000000003,0.0001 +P,3946,3943,1433.90866435,0.3,-0.20000000000000284,0.0001 +P,3944,967,539.3323573389999,0.3,0,0.0001 +P,3947,3945,425.458069546,0.5,0,0.0001 +P,3948,3946,1176.6447226,0.75,1,0.0001 +P,3948,3947,1088.82145498,0.5,2,0.0001 +P,3949,3948,2510.16152057,0.75,-1,0.0001 +P,3949,969,471.478858361,0.15,1,0.0001 +P,3950,4173,595.164435278,0.5,2,0.0001 +P,3950,970,358.81085286499996,0.15,-1,0.0001 +P,3951,3949,1190.245397,0.75,1,0.0001 +P,3951,3950,1127.35991961,0.5,-4,0.0001 +P,3953,3951,604.207677199,0.75,0,0.0001 +P,3953,3952,376.974710818,0.3,5,0.0001 +P,3955,3954,552.179866855,0.75,0,0.0001 +P,3956,3955,3899.4939944000002,0.75,0,0.0001 +P,3958,3957,579.8137704200001,0.75,1.7999999999999972,0.0001 +P,3959,3958,570.187513127,0.75,0,0.0001 +P,3960,3959,558.474235789,0.75,0,0.0001 +P,3961,3960,583.795665417,0.75,1.7000000000000028,0.0001 +P,3961,971,401.15424067099997,0.15,2,0.0001 +P,3962,3961,587.412447333,0.75,0,0.0001 +P,3962,972,529.887024653,0.15,4,0.0001 +P,3964,3962,583.248383256,0.75,0,0.0001 +P,3964,3963,421.287542534,0.15,2,0.0001 +P,3965,3964,588.9138427490001,0.75,-1,0.0001 +P,3965,973,404.649127583,0.15,3,0.0001 +P,3966,3965,590.926931308,0.75,0,0.0001 +P,3966,974,417.928549639,0.15,2,0.0001 +P,3968,3966,1688.76825665,0.75,0,0.0001 +P,3968,3967,419.22409237000005,0.15,1,0.0001 +P,3969,975,430.592792389,0.15,2,0.0001 +P,3969,3983,590.412147091,0.75,1,0.0001 +P,3970,3969,591.069924256,0.75,0,0.0001 +P,3977,3970,581.730608201,0.75,0,0.0001 +P,3972,2065,489.591403832,0.3,0,0.0001 +P,3973,3972,484.4323233,0.3,0,0.0001 +P,3974,3973,479.756536881,0.3,0,0.0001 +P,3975,3974,495.644843365,0.15,0,0.0001 +P,3976,3975,499.954681121,0.15,0,0.0001 +P,3977,3976,509.66783749599995,0.3,1.5,0.0001 +P,3978,3977,591.465280341,0.75,-1.5,0.0001 +P,3979,3978,566.5682000820001,0.75,0,0.0001 +P,3980,3979,574.05957375,0.75,0,0.0001 +P,976,3980,1206.0784666,0.75,-1.5,0.0001 +P,976,4158,1151.64238209,0.75,1,0.0001 +P,3983,3981,1149.12806571,0.75,3,0.0001 +P,3983,3982,414.946886109,0.15,0,0.0001 +P,3984,976,700.929567436,0.75,0,0.00001 +P,3985,3984,614.8983248989999,0.75,0,0.00001 +P,3987,3986,3483.02614113,0.75,0,0.0005 +P,3989,3987,867.261329475,0.75,-4,0.00001 +P,3988,4179,512.7155283440001,0.5,-1,0.0005 +P,3989,3988,1016.61855436,0.5,0,0.0005 +P,3990,3989,634.181981662,0.75,0,0.0005 +P,4018,4036,506.558310745,0.75,0,0.0001 +P,4090,3992,496.862085074,0.15,4.299999999999997,0.0001 +P,4007,4010,968.265500907,0.3,-3,0.0001 +P,4081,4008,506.745961252,0.3,0,0.0001 +P,977,4019,929.18162756,0.75,1,0.0001 +P,4182,3993,955.672607361,0.3,0,0.0005 +P,3993,3999,473.729520921,0.5,0,0.0005 +P,3994,4183,475.943312499,0.3,0,0.0001 +P,3995,3994,489.31391829,0.5,0,0.0001 +P,4030,3995,505.640693559,0.5,0,0.0001 +P,3996,978,512.78201517,0.5,3,0.0005 +P,3997,3996,1438.36107757,0.5,1,0.0005 +P,3998,3997,471.356236772,0.75,0,0.0005 +P,3999,3998,473.788904843,0.75,-1,0.0005 +P,4064,979,463.895720033,0.5,0,0.0001 +P,4058,4057,417.094320873,0.15,0,0.0001 +P,4000,4045,1332.52660735,0.3,-5,0.0001 +P,4001,4000,628.59940863,0.3,0,0.0001 +P,4048,4001,636.226303253,0.5,0,0.0001 +P,4002,4049,508.18363958299994,0.15,10,0.0001 +P,4003,4002,484.123263859,0.15,0,0.0001 +P,4053,4003,954.976878615,0.15,10,0.0001 +P,4004,4184,954.609128557,0.3,2,0.0001 +P,4004,4006,497.424131184,0.15,0,0.0001 +P,4005,981,499.874299206,0.15,0,0.0001 +P,4006,4005,497.593995181,0.15,13,0.0001 +P,4008,4007,480.684952966,0.3,0,0.0001 +P,4071,4026,1782.71736814,0.75,49.69999999999999,0.0001 +P,4085,4081,1233.46400112,0.75,2,0.0001 +P,4030,4087,608.556687835,0.75,65,0.0005 +P,4088,982,1450.0652217200002,0.3,0,0.0005 +P,4088,983,422.210926196,0.15,0,0.0005 +P,4010,4009,472.26981602899997,0.15,0,0.0001 +P,4010,984,981.432091698,0.3,-101,0.0001 +P,4013,4011,511.3606424679999,0.3,-4,0.0001 +P,4013,4012,505.63996818,0.15,-4,0.0001 +P,4014,4013,484.704625622,0.3,-1.5,0.0001 +P,4015,4014,478.61782094600005,0.3,0,0.0001 +P,984,4015,941.12843916,0.3,-1.5,0.0001 +P,984,4016,503.55927486700006,0.15,2,0.0001 +P,547,985,503.96335467599994,0.3,-3.700000000000003,0.0001 +P,986,1007,1164.27196893,0.5,-14,0.0005 +P,547,986,3738.81186534,0.75,-2.700000000000003,0.0005 +P,4050,4185,462.12768767899996,0.15,-1,0.0001 +P,4050,4053,472.109652939,0.15,-3,0.0001 +P,4059,4017,464.685433472,0.3,1,0.0001 +P,4059,4083,1186.18246326,0.75,36,0.0001 +P,4019,987,355.352334485,0.15,0,0.0001 +P,4019,4018,952.7924339829999,0.75,-19,0.0001 +P,4020,988,461.634831651,0.3,2,0.0001 +P,4022,4020,1901.73871185,0.75,-7,0.0001 +P,4022,4021,371.696281952,0.3,0,0.0001 +P,4023,990,475.582608963,0.15,0,0.0001 +P,4037,4023,1205.49686636,0.75,63,0.0001 +P,4037,991,464.382640237,0.15,0,0.0001 +P,4024,992,395.91345803599995,0.15,2.799999999999997,0.0001 +P,4043,4024,351.694887713,0.15,2.8000000000000114,0.0001 +P,4043,4042,641.772750859,0.75,-1.5999999999999943,0.0001 +P,4025,993,486.250352604,0.15,0.30000000000001137,0.0001 +P,4026,4025,492.204024624,0.15,0.30000000000001137,0.0001 +P,4026,4070,3003.4071885900003,0.75,-7.599989999999991,0.0001 +P,4057,994,436.60387805,0.15,-1,0.0001 +P,1003,995,413.43354761899997,0.3,1,0.0001 +P,4027,4052,646.16895378,0.75,0,0.0001 +P,4028,4027,698.364752254,0.75,1,0.0001 +P,1003,4028,1388.0623502600001,0.75,5,0.0001 +P,4029,4154,528.508921483,0.75,0,0.0001 +P,4029,996,496.217109371,0.3,0,0.0001 +P,4033,4093,1044.9386494199998,0.15,0,0.0001 +P,4033,4029,1445.88861896,0.75,0,0.0001 +P,4031,4030,600.484964319,0.75,-27,0.0005 +P,4032,4031,581.061799861,0.75,0,0.0005 +P,4089,4032,1161.09344575,0.75,30.700000000000003,0.0005 +P,4089,997,510.9492766380001,0.3,-0.29999999999999716,0.0001 +P,4034,4033,480.986842636,0.75,0,0.0001 +P,4036,4035,414.490510909,0.5,0,0.0001 +P,4036,4152,517.6814338180001,0.5,0,0.0001 +P,4038,4037,642.747601505,0.75,2,0.0001 +P,4038,998,768.1060005,0.15,-13,0.0001 +P,4039,4038,2452.13877136,0.75,7,0.0001 +P,4040,4039,633.828399278,0.75,0,0.0001 +P,4041,2523,478.27194117,0.3,19,0.0001 +P,4044,4043,1248.3434520600001,0.75,-20.400000000000006,0.0001 +P,4047,4044,1248.33016894,0.75,29,0.0001 +P,4047,999,359.886105889,0.15,0,0.0001 +P,4048,1000,392.10354373,0.3,0,0.0001 +P,4045,4046,608.756535475,0.3,0,0.0001 +P,4046,1020,1133.58959798,0.5,0,0.0001 +P,4051,4047,1274.25420296,0.75,11,0.0001 +P,4051,4048,2487.26542097,0.5,-3,0.0001 +P,4049,1001,491.48729076800004,0.15,0,0.0001 +P,4052,4050,1125.19520809,0.15,27,0.0001 +P,4052,4051,1774.84403034,0.75,-9,0.0001 +P,4053,1002,457.37182148,0.15,13,0.0001 +P,4054,1003,689.0091146279999,0.75,-1.5,0.0001 +P,4055,4054,635.581861227,0.75,0,0.0001 +P,4056,4055,1229.33499312,0.75,-1.6000000000000014,0.0001 +P,4058,4056,610.5506093150001,0.5,0.10000000000000142,0.0001 +P,4064,1005,626.599764282,0.75,22,0.0001 +P,4060,4057,402.274570232,0.15,0,0.0001 +P,4060,4058,660.646694294,0.5,0,0.0001 +P,4080,4059,1202.03775756,0.75,-70,0.0001 +P,1005,1004,457.010338822,0.15,0,0.0001 +P,4061,4060,632.282700429,0.5,0,0.0001 +P,4062,4061,1217.23599317,0.75,-22,0.0001 +P,4063,4062,605.076464479,0.75,0,0.0001 +P,1005,4063,619.914420539,0.75,-22,0.0001 +P,4065,4064,621.0723102820001,0.75,-21,0.0001 +P,4066,4065,604.377581025,0.75,0,0.0001 +P,4068,4066,1233.27325208,0.75,-21,0.0001 +P,4068,4067,2223.5887548600003,0.15,-3,0.0001 +P,4070,4068,3691.4823577,0.75,-25.100009999999997,0.0001 +P,4069,1006,468.22923817099996,0.15,-0.299980000000005,0.0001 +P,4070,4069,460.10035896399995,0.15,-2.700019999999995,0.0001 +P,4072,4071,585.0853276170001,0.75,0,0.0001 +P,4074,4072,1171.61486479,0.75,43,0.0001 +P,4074,4073,504.002709623,0.15,0,0.0001 +P,1067,4074,601.326349423,0.75,21.5,0.0001 +P,4082,4075,492.129504933,0.15,0,0.0001 +P,4082,4079,1759.6645697,0.75,-22,0.0001 +P,4077,4076,2314.72173036,0.75,-51.5,0.0001 +P,4079,4077,584.995402547,0.75,-8,0.0001 +P,4079,4078,507.63151094000006,0.15,0,0.0001 +P,4081,4080,611.9363259300001,0.75,0,0.0001 +P,4083,4082,589.64303729,0.75,7,0.0001 +P,4085,4084,385.216931144,0.15,0,0.0001 +P,4086,4085,1800.87648074,0.75,44,0.0001 +P,4087,4086,586.822725573,0.75,0,0.0001 +P,986,4088,524.658139273,0.3,4,0.0005 +P,4091,4090,498.369370405,0.5,-0.29999999999999716,0.0005 +P,1007,4091,512.640958392,0.5,0,0.0001 +P,4093,1008,623.6721575250001,0.15,-1,0.0001 +P,4095,4094,521.784679259,0.5,-0.8000000000000114,0.0001 +P,4096,4105,6098.340068449999,0.75,1.5,0.00001 +P,1010,4096,620.237662645,0.75,1.5,0.00001 +P,1161,1151,3392.91034665,1,6.899999999999999,0.00001 +P,1151,4193,1097.8446686700001,1,0.10000000000000142,0.00001 +P,4192,4097,569.622341449,1,0,0.00001 +P,4104,4098,1158.89045998,1,0,0.00001 +P,4099,1010,1037.02579382,0.5,0,0.00001 +P,1011,1009,3775.76049968,1,0,0.00001 +P,4101,1010,1212.90141277,0.5,0,0.00001 +P,4102,1011,923.839942626,1,0,0.00001 +P,4104,4103,567.748498691,1,0,0.00001 +P,1151,4104,587.740847924,1,0.10000000000000142,0.00001 +P,1012,109,6946.74091795,0.75,-15,0.00001 +P,4105,1012,7923.43924874,1,-19,0.00001 +S,1254,12 +S,1027,1038 +S,1034,1045 +S,2171,14 +S,61,15 +S,422,22 +S,9,1102 +S,697,24 +S,696,25 +S,692,26 +S,693,27 +S,694,28 +S,2763,29 +S,715,309 +S,716,30 +S,716,31 +S,2771,32 +S,2771,33 +S,2770,34 +S,2770,35 +S,2779,36 +S,2779,37 +S,2780,38 +S,2780,39 +S,2763,40 +S,2761,41 +S,2761,42 +S,3105,43 +S,3335,44 +S,1626,45 +S,859,46 +S,777,3194 +S,1120,2815 +S,2865,2864 +S,1135,1134 +S,1022,52 +S,1422,1155 +S,1156,3568 +S,4193,1163 +S,4192,1164 +S,685,53 +S,1022,1 +S,1166,54 +S,9,55 +S,8,56 +S,7,1171 +S,1995,57 +S,268,59 +S,1022,60 +S,1019,1178 +S,1833,62 +S,1451,63 +S,3065,64 +S,1656,67 +S,780,3199 +S,226,4 +S,225,3 +S,1280,1278 +S,1285,3834 +S,1290,3828 +S,1704,1343 +S,1348,1346 +S,2835,2834 +S,2837,2833 +S,1425,1424 +S,1840,1352 +S,1356,1357 +S,1362,1847 +S,3065,1023 +S,1395,3312 +S,1606,1398 +S,1614,1399 +S,1615,1400 +S,100,1409 +S,876,1425 +S,3017,101 +S,869,1460 +S,1475,2257 +S,1144,2082 +S,1601,1600 +S,1989,1603 +S,2014,2012 +S,116,1638 +S,1642,4187 +S,4116,1643 +S,3382,117 +S,4191,1649 +S,108,1650 +S,3000,119 +S,4197,1653 +S,2783,120 +S,1468,1724 +S,1680,122 +S,4139,124 +S,811,125 +S,208,126 +S,1454,127 +S,1958,128 +S,197,129 +S,1730,1473 +S,1701,1732 +S,1700,1734 +S,1661,1474 +S,2257,1702 +S,4196,1979 +S,1982,1980 +S,1987,1980 +S,1985,1980 +S,1981,1986 +S,1984,2148 +S,1995,2 +S,2002,2146 +S,2017,2168 +S,2059,2060 +S,68,5 +S,68,227 +S,4155,2063 +S,3557,228 +S,3557,2064 +S,3490,229 +S,306,230 +S,619,231 +S,3049,232 +S,705,233 +S,4186,2066 +S,673,234 +S,680,235 +S,676,236 +S,597,237 +S,3830,238 +S,2118,3078 +S,2078,2077 +S,4187,263 +S,265,264 +S,2121,2120 +S,2123,2122 +S,2125,2124 +S,2171,305 +S,2146,2147 +S,1981,2164 +S,1552,2150 +S,339,269 +S,362,270 +S,10,271 +S,11,272 +S,1557,273 +S,1561,2153 +S,816,274 +S,1561,275 +S,267,2154 +S,3736,2155 +S,276,267 +S,277,3101 +S,278,1019 +S,279,3382 +S,280,3651 +S,2156,3380 +S,2157,3946 +S,2208,281 +S,282,3335 +S,283,3649 +S,3332,284 +S,285,2137 +S,2158,3841 +S,286,3651 +S,287,830 +S,288,834 +S,2211,289 +S,290,2215 +S,2159,327 +S,2204,2160 +S,2196,291 +S,292,342 +S,293,2228 +S,2161,4149 +S,294,3830 +S,295,2067 +S,296,1575 +S,297,3866 +S,298,3989 +S,3382,299 +S,300,563 +S,3472,2162 +S,301,3784 +S,302,3989 +S,303,715 +S,304,828 +S,2771,2173 +S,1552,310 +S,3821,311 +S,1557,2174 +S,3101,312 +S,3382,2175 +S,115,2176 +S,3335,2177 +S,3375,2179 +S,1019,314 +S,1019,2180 +S,714,315 +S,714,316 +S,714,317 +S,3651,318 +S,3651,319 +S,826,320 +S,1561,321 +S,496,322 +S,705,323 +S,1561,324 +S,2729,2408 +S,3328,2217 +S,680,328 +S,3651,330 +S,3341,2219 +S,774,331 +S,332,763 +S,638,333 +S,828,334 +S,1561,335 +S,797,336 +S,994,2220 +S,264,337 +S,354,1723 +S,2263,2328 +S,2329,2264 +S,2268,2266 +S,2269,2267 +S,2272,2270 +S,2273,2271 +S,2333,1059 +S,1054,2275 +S,2341,2339 +S,2342,2340 +S,405,402 +S,2494,6 +S,488,2578 +S,2580,2579 +S,2613,2611 +S,2614,2612 +S,2148,2731 +S,2734,2731 +S,608,2738 +S,789,2739 +S,3211,2740 +S,2783,552 +S,4197,553 +S,587,554 +S,588,555 +S,2784,556 +S,3018,2741 +S,4106,2742 +S,1599,2743 +S,2149,557 +S,680,558 +S,2744,3018 +S,2851,2819 +S,610,2823 +S,2868,2866 +S,2869,2867 +S,2886,2884 +S,2887,2885 +S,3022,2111 +S,3019,2993 +S,3009,3007 +S,3010,3008 +S,3013,3011 +S,3014,3012 +S,678,3026 +S,3034,3027 +S,3031,3028 +S,678,677 +S,3034,3032 +S,4106,3033 +S,3043,3041 +S,3044,3042 +S,945,2747 +S,932,2748 +S,3853,2749 +S,948,2750 +S,946,2751 +S,949,2752 +S,929,2753 +S,968,559 +S,969,2754 +S,4179,2755 +S,3830,560 +S,3835,2756 +S,3841,561 +S,4140,562 +S,115,2757 +S,2184,563 +S,3609,2758 +S,1019,564 +S,715,2759 +S,827,2760 +S,3344,565 +S,1575,2761 +S,3373,2762 +S,3382,566 +S,2067,2763 +S,3203,2764 +S,811,567 +S,3332,2765 +S,4190,2766 +S,3105,2767 +S,3316,2768 +S,1559,2769 +S,4157,4131 +S,3101,2770 +S,3105,2771 +S,3102,2772 +S,3187,3161 +S,4137,3162 +S,4194,568 +S,3428,569 +S,976,570 +S,4162,4143 +S,3324,2773 +S,3325,2774 +S,3326,2775 +S,3281,2776 +S,3330,2777 +S,3332,571 +S,3333,2778 +S,826,572 +S,834,2779 +S,3335,2780 +S,3337,573 +S,1555,574 +S,1573,575 +S,1577,576 +S,1557,577 +S,1559,2781 +S,1561,578 +S,3289,579 +S,3354,580 +S,1571,581 +S,1579,582 +S,1581,583 +S,1585,584 +S,1624,585 +S,1626,586 +S,3735,2782 +S,4181,3908 +V,1026,381 +V,1029,1028 +V,1030,1014 +V,1032,1031 +V,2291,1036 +V,1044,1037 +V,17,1039 +V,1047,1053 +V,2327,1048 +V,2274,1049 +V,1055,1054 +V,370,1056 +V,906,1060 +V,1062,1061 +V,1062,906 +V,1064,1063 +V,4076,1068 +V,1066,1065 +V,3441,3440 +V,3450,1157 +V,3441,3450 +V,2937,2939 +V,2940,2938 +V,1083,1080 +V,1082,1081 +V,1082,1083 +V,2891,1087 +V,3371,1091 +V,1108,1106 +V,1393,1110 +V,1121,2725 +V,1136,1134 +V,1159,1140 +V,1143,1142 +V,1145,1144 +V,1152,3601 +V,902,1154 +V,1160,1159 +V,2404,1167 +V,1169,1168 +V,1176,1173 +V,1180,1179 +V,1182,1181 +V,3387,1183 +V,3388,1184 +V,3388,3387 +V,1427,1187 +V,876,3406 +V,1429,1188 +V,3914,963 +V,3914,1189 +V,963,3885 +V,1421,1191 +V,1193,1433 +V,1432,1194 +V,1196,1197 +V,1206,1205 +V,1212,1214 +V,2805,1215 +V,1217,1216 +V,1219,1218 +V,1232,1226 +V,151,1655 +V,1227,1720 +V,1229,1655 +V,3382,3383 +V,2183,1233 +V,2183,1234 +V,3459,1235 +V,1236,3459 +V,3457,1237 +V,1238,3457 +V,2479,1243 +V,2474,1241 +V,2479,2474 +V,2923,1248 +V,1250,2918 +V,1250,2923 +V,3256,1253 +V,73,1256 +V,2569,74 +V,1261,1260 +V,2569,1261 +V,2215,1273 +V,2139,1274 +V,2139,2215 +V,1277,1276 +V,1279,3841 +V,3879,3866 +V,3866,3865 +V,3879,1281 +V,1283,3839 +V,1287,3839 +V,3837,1286 +V,3838,3834 +V,3835,3833 +V,3827,3835 +V,3827,3826 +V,1291,1288 +V,1291,1289 +V,1294,1292 +V,1293,1296 +V,1294,1293 +V,3016,1298 +V,3006,3005 +V,3006,3016 +V,3369,3400 +V,1729,1300 +V,152,1301 +V,152,1729 +V,1604,1605 +V,1307,2806 +V,1312,1311 +V,1311,1309 +V,1312,1310 +V,4039,1315 +V,4040,1313 +V,4042,1314 +V,1320,1317 +V,2897,1318 +V,3714,4093 +V,1444,1326 +V,1329,1328 +V,1332,1331 +V,1334,1333 +V,1445,1335 +V,1975,1336 +V,1338,1337 +V,1342,1341 +V,1344,1714 +V,1345,1343 +V,4021,1347 +V,1349,1348 +V,1351,1349 +V,1351,1350 +V,1471,1353 +V,1842,1500 +V,1354,1836 +V,3996,1355 +V,3607,1356 +V,1358,1357 +V,3604,3608 +V,1467,1360 +V,1844,1361 +V,1364,1363 +V,463,1364 +V,463,1370 +V,2389,2394 +V,1372,1373 +V,2394,1374 +V,2389,1375 +V,1378,1377 +V,2402,1379 +V,1777,1384 +V,1384,1382 +V,1777,1383 +V,4161,1391 +V,4161,1636 +V,3376,3377 +V,3379,1394 +V,3309,1396 +V,832,3312 +V,3078,3077 +V,1401,1610 +V,1443,1404 +V,1408,1462 +V,3591,3601 +V,3460,3505 +V,1423,2187 +V,1427,876 +V,1429,3601 +V,1431,1419 +V,1435,3556 +V,1437,3562 +V,1458,1905 +V,1461,3322 +V,1758,1969 +V,1516,1515 +V,1536,1533 +V,1536,1534 +V,3308,1544 +V,3297,1546 +V,1548,3311 +V,1551,3338 +V,1553,3296 +V,3284,1554 +V,3285,1556 +V,814,1558 +V,3286,1560 +V,3287,1562 +V,815,1564 +V,4189,1566 +V,1568,3351 +V,3345,1570 +V,3347,1572 +V,3348,1574 +V,836,1576 +V,3346,1578 +V,3355,1580 +V,3356,1582 +V,2626,1584 +V,3357,1586 +V,1600,1602 +V,2167,2017 +V,3200,1623 +V,1625,1646 +V,1627,1648 +V,1629,1628 +V,1631,3200 +V,113,1630 +V,1641,2118 +V,1647,3357 +V,1652,1651 +V,354,1661 +V,1665,130 +V,1666,1699 +V,1667,1696 +V,140,1690 +V,1689,1684 +V,1694,1686 +V,1684,1683 +V,1664,1681 +V,1684,1664 +V,1689,1688 +V,1691,1685 +V,1527,1528 +V,1530,1529 +V,1526,1711 +V,1713,1525 +V,1524,1718 +V,142,1719 +V,142,1524 +V,1521,1522 +V,1788,1412 +V,1465,1976 +V,1744,1497 +V,159,1746 +V,1455,1747 +V,1457,1749 +V,1842,1843 +V,1505,1658 +V,1727,1463 +V,1735,1752 +V,1754,1736 +V,1834,1759 +V,1731,1770 +V,1733,1731 +V,1732,1770 +V,1733,1732 +V,1733,1769 +V,1782,1733 +V,1734,1769 +V,1782,1734 +V,1775,1774 +V,1776,1470 +V,1785,1784 +V,1787,1786 +V,1799,1800 +V,1803,1802 +V,1803,1799 +V,1804,1805 +V,1808,1807 +V,1808,1804 +V,1812,1811 +V,1735,1815 +V,1736,1817 +V,1736,1735 +V,1755,1753 +V,1818,1755 +V,1819,1753 +V,1822,1821 +V,1826,1824 +V,1737,1828 +V,1737,1829 +V,1454,1737 +V,1767,1830 +V,1767,1410 +V,1738,1831 +V,1833,1832 +V,1833,1738 +V,1835,1834 +V,1836,1838 +V,1739,1837 +V,1839,1837 +V,1838,1739 +V,1841,1840 +V,1466,1467 +V,1451,1847 +V,1450,1846 +V,1449,1851 +V,1512,1853 +V,1512,1854 +V,1855,1512 +V,1518,1514 +V,1517,1857 +V,1740,1513 +V,1740,1856 +V,1499,1740 +V,1499,1845 +V,1760,1456 +V,190,1869 +V,1872,1871 +V,1455,1502 +V,105,1885 +V,1905,1886 +V,1895,1888 +V,1485,1890 +V,1485,1895 +V,1484,1894 +V,1446,1898 +V,1446,1904 +V,1910,1909 +V,1919,1911 +V,1915,1914 +V,1924,205 +V,1931,1922 +V,1921,1925 +V,1930,1927 +V,1930,1921 +V,1935,1934 +V,1939,1935 +V,1928,1935 +V,212,1750 +V,1938,1940 +V,1943,1942 +V,1943,1938 +V,1945,1946 +V,1948,1947 +V,1948,1945 +V,1950,1949 +V,1952,1953 +V,1956,1955 +V,1956,1952 +V,1963,1962 +V,1741,1968 +V,1966,1743 +V,1448,1520 +V,1970,1971 +V,1493,1494 +V,1972,1503 +V,1973,1745 +V,1742,1976 +V,1974,1967 +V,1492,1977 +V,1492,1974 +V,1990,3020 +V,1997,1996 +V,1999,1998 +V,2023,2001 +V,2012,2018 +V,2012,2019 +V,2028,2029 +V,2031,2030 +V,2042,2041 +V,2044,2043 +V,2045,2798 +V,2048,2047 +V,2082,2081 +V,2097,2322 +V,2108,2097 +V,2993,2112 +V,3019,2113 +V,2117,2116 +V,2119,3078 +V,266,2128 +V,2129,3956 +V,3953,2133 +V,2135,2134 +V,2138,2115 +V,2164,2016 +V,2170,2171 +V,306,2790 +V,2172,306 +V,4111,100 +V,2185,3495 +V,2186,1420 +V,3539,1422 +V,2189,3481 +V,2191,3083 +V,2194,2193 +V,2646,3136 +V,2218,680 +V,2458,3048 +V,2513,2503 +V,2731,2733 +V,2734,2732 +V,4195,2783 +V,3344,587 +V,108,588 +V,4193,2784 +V,2734,2163 +V,2786,2802 +V,2786,2797 +V,2787,2800 +V,2732,2801 +V,2788,2027 +V,4108,2799 +V,2789,2792 +V,4109,2794 +V,3009,789 +V,2805,2807 +V,682,2990 +V,2813,4118 +V,680,4118 +V,3090,977 +V,3238,3091 +V,3092,3491 +V,3784,3661 +V,4152,4150 +V,4151,4150 +V,3106,2795 +V,4162,3275 +V,4045,3443 +V,3344,3276 +V,3277,3353 +V,3428,3430 +V,3666,3708 +V,3709,3667 +V,3842,2803 +V,3718,3713 +V,942,3716 +V,4042,2522 +V,4103,4099 +V,4102,4101 +V,4097,1011 +V,4098,4102 +V,1040,1027 +V,1035,1034 +V,3390,1105 +V,1114,1115 +V,1175,1158 +V,1139,1158 +V,1132,2069 +V,1164,1163 +V,1175,1174 +V,1254,1255 +V,3362,1424 +V,1539,1538 +V,1541,1540 +V,1602,2082 +V,1397,1607 +V,109,1606 +V,2905,1634 +V,4173,4172 +V,1635,3829 +V,115,3679 +V,1995,1637 +V,10,1638 +V,1643,1642 +V,1645,1644 +V,1650,1649 +V,11,1654 +V,1507,1865 +V,123,189 +V,1660,1475 +V,1663,1661 +V,1703,141 +V,1730,1728 +V,1410,1454 +V,221,1978 +V,1500,222 +V,1983,1982 +V,1984,1985 +V,1986,1987 +V,2127,1988 +V,4107,1989 +V,2014,2015 +V,2023,2021 +V,2031,2024 +V,2045,2034 +V,2048,2046 +V,2068,3386 +V,2089,2092 +V,3102,2136 +V,2143,308 +V,1981,2146 +V,2148,2002 +V,2164,2165 +V,2824,1170 +V,3202,2196 +V,3231,340 +V,3307,2237 +V,3209,354 +V,3211,2317 +V,399,2380 +V,2382,2381 +V,401,400 +V,2384,2383 +V,2386,2385 +V,2388,2387 +V,2407,405 +V,2407,2406 +V,2455,2454 +V,3352,2519 +V,2521,2520 +V,2523,469 +V,3265,2566 +V,3117,2726 +V,3110,2727 +V,3134,2728 +V,3260,2730 +V,2733,2732 +V,2168,4106 +V,4107,2786 +V,2167,4109 +V,4110,1013 +V,4113,4112 +V,1013,4114 +V,1014,4115 +V,4186,4116 +V,4118,4117 +V,4119,1015 +V,4121,4120 +V,1016,4122 +V,4124,4123 +V,4126,4125 +V,4128,4127 +V,4130,4129 +V,4131,3461 +V,2137,4132 +V,4134,4133 +V,4136,4135 +V,2122,4137 +V,4139,4138 +V,4141,4140 +V,4143,4142 +V,4145,1018 +V,4147,4146 +V,1575,4148 +V,4150,4149 +V,4152,4151 +V,4154,4153 +V,4156,4155 +V,4159,4158 +V,4161,4160 +V,4163,4162 +V,4165,4164 +V,4167,4166 +V,4169,4168 +V,4171,4170 +V,4175,4174 +V,4177,4176 +V,4179,4178 +V,1020,4181 +V,4183,4182 +V,4185,4184 +C,1594,1593 +C,1596,1595 +C,1598,1597 +C,2000,2022 +C,2026,2025 +C,2050,2051 +C,2055,2052 +C,4187,4186 +C,4190,4189 +C,4193,4192 +C,4195,4194 +C,4197,4196 +S,1160,1175 +S,1654,1162 +S,4194,1447 +S,1537,1535 +S,223,1988 +S,2021,2020 +S,2032,2028 +S,2027,2745 +S,2036,2033 +S,2037,2043 +S,2040,2038 +S,2152,2042 +S,2067,2068 +S,2127,3273 +S,2012,2127 +S,2790,3068 +S,2792,2791 +S,2794,2793 +S,3105,2144 +S,2114,3248 +S,2797,2796 +S,2039,4188 +S,2799,2059 +S,2800,2746 +S,2801,2056 +S,2802,2169 +S,1024,4107 +S,3295,3294 +S,4198,1 +S,4199,2 +S,4200,3 +S,4201,4 +S,4202,5 +S,4203,6 +S,4204,7 +S,4205,8 +S,4206,9 +S,4207,10 +S,4208,11 +S,12,4209 +S,13,4210 +S,14,4211 +S,15,4212 +S,16,4213 +S,17,4214 +S,18,4215 +S,19,4216 +S,20,4217 +S,21,4218 +S,22,4219 +S,23,4220 +S,24,4221 +S,25,4222 +S,26,4223 +S,27,4224 +S,28,4225 +S,29,4226 +S,30,4227 +S,31,4228 +S,32,4229 +S,33,4230 +S,34,4231 +S,35,4232 +S,36,4233 +S,37,4234 +S,38,4235 +S,39,4236 +S,40,4237 +S,41,4238 +S,42,4239 +S,43,4240 +S,44,4241 +S,45,4242 +S,46,4243 +S,47,4244 +S,48,4245 +S,49,4246 +S,50,4247 +S,51,4248 +S,52,4249 +S,53,4250 +S,54,4251 +S,55,4252 +S,56,4253 +S,57,4254 +S,58,4255 +S,59,4256 +S,60,4257 +S,61,4258 +S,62,4259 +S,63,4260 +S,64,4261 +S,65,4262 +S,66,4263 +S,67,4264 +S,68,4265 +S,69,4266 +S,70,4267 +S,71,4268 +S,72,4269 +S,73,4270 +S,74,4271 +S,75,4272 +S,76,4273 +S,77,4274 +S,78,4275 +S,79,4276 +S,80,4277 +S,81,4278 +S,82,4279 +S,83,4280 +S,84,4281 +S,85,4282 +S,86,4283 +S,87,4284 +S,88,4285 +S,89,4286 +S,90,4287 +S,91,4288 +S,92,4289 +S,93,4290 +S,94,4291 +S,95,4292 +S,96,4293 +S,97,4294 +S,98,4295 +S,99,4296 +S,100,4297 +S,101,4298 +S,102,4299 +S,103,4300 +S,104,4301 +S,105,4302 +S,106,4303 +S,107,4304 +S,108,4305 +S,109,4306 +S,110,4307 +S,111,4308 +S,112,4309 +S,113,4310 +S,114,4311 +S,115,4312 +S,116,4313 +S,117,4314 +S,118,4315 +S,119,4316 +S,120,4317 +S,121,4318 +S,122,4319 +S,123,4320 +S,124,4321 +S,125,4322 +S,126,4323 +S,127,4324 +S,128,4325 +S,129,4326 +S,130,4327 +S,131,4328 +S,132,4329 +S,133,4330 +S,134,4331 +S,135,4332 +S,136,4333 +S,137,4334 +S,138,4335 +S,139,4336 +S,140,4337 +S,141,4338 +S,142,4339 +S,143,4340 +S,144,4341 +S,145,4342 +S,146,4343 +S,147,4344 +S,148,4345 +S,149,4346 +S,150,4347 +S,151,4348 +S,152,4349 +S,153,4350 +S,154,4351 +S,155,4352 +S,156,4353 +S,157,4354 +S,158,4355 +S,159,4356 +S,160,4357 +S,161,4358 +S,162,4359 +S,163,4360 +S,164,4361 +S,165,4362 +S,166,4363 +S,167,4364 +S,168,4365 +S,169,4366 +S,170,4367 +S,171,4368 +S,172,4369 +S,173,4370 +S,174,4371 +S,175,4372 +S,176,4373 +S,177,4374 +S,178,4375 +S,179,4376 +S,180,4377 +S,181,4378 +S,182,4379 +S,183,4380 +S,184,4381 +S,185,4382 +S,186,4383 +S,187,4384 +S,188,4385 +S,189,4386 +S,190,4387 +S,191,4388 +S,192,4389 +S,193,4390 +S,194,4391 +S,195,4392 +S,196,4393 +S,197,4394 +S,198,4395 +S,199,4396 +S,200,4397 +S,201,4398 +S,202,4399 +S,203,4400 +S,204,4401 +S,205,4402 +S,206,4403 +S,207,4404 +S,208,4405 +S,209,4406 +S,210,4407 +S,211,4408 +S,212,4409 +S,213,4410 +S,214,4411 +S,215,4412 +S,216,4413 +S,217,4414 +S,218,4415 +S,219,4416 +S,220,4417 +S,221,4418 +S,222,4419 +S,223,4420 +S,224,4421 +S,225,4422 +S,226,4423 +S,227,4424 +S,228,4425 +S,229,4426 +S,230,4427 +S,231,4428 +S,232,4429 +S,233,4430 +S,234,4431 +S,235,4432 +S,236,4433 +S,237,4434 +S,238,4435 +S,239,4436 +S,240,4437 +S,241,4438 +S,242,4439 +S,243,4440 +S,244,4441 +S,245,4442 +S,246,4443 +S,247,4444 +S,248,4445 +S,249,4446 +S,250,4447 +S,251,4448 +S,252,4449 +S,253,4450 +S,254,4451 +S,255,4452 +S,256,4453 +S,257,4454 +S,258,4455 +S,259,4456 +S,260,4457 +S,261,4458 +S,262,4459 +S,263,4460 +S,264,4461 +S,265,4462 +S,266,4463 +S,267,4464 +S,268,4465 +S,269,4466 +S,270,4467 +S,271,4468 +S,272,4469 +S,273,4470 +S,274,4471 +S,275,4472 +S,276,4473 +S,277,4474 +S,278,4475 +S,279,4476 +S,280,4477 +S,281,4478 +S,282,4479 +S,283,4480 +S,284,4481 +S,285,4482 +S,286,4483 +S,287,4484 +S,288,4485 +S,289,4486 +S,290,4487 +S,291,4488 +S,292,4489 +S,293,4490 +S,294,4491 +S,295,4492 +S,296,4493 +S,297,4494 +S,298,4495 +S,299,4496 +S,300,4497 +S,301,4498 +S,302,4499 +S,303,4500 +S,304,4501 +S,305,4502 +S,306,4503 +S,307,4504 +S,308,4505 +S,309,4506 +S,310,4507 +S,311,4508 +S,312,4509 +S,313,4510 +S,314,4511 +S,315,4512 +S,316,4513 +S,317,4514 +S,318,4515 +S,319,4516 +S,320,4517 +S,321,4518 +S,322,4519 +S,323,4520 +S,324,4521 +S,325,4522 +S,326,4523 +S,327,4524 +S,328,4525 +S,329,4526 +S,330,4527 +S,331,4528 +S,332,4529 +S,333,4530 +S,334,4531 +S,335,4532 +S,336,4533 +S,337,4534 +S,338,4535 +S,339,4536 +S,340,4537 +S,341,4538 +S,342,4539 +S,343,4540 +S,344,4541 +S,345,4542 +S,346,4543 +S,347,4544 +S,348,4545 +S,349,4546 +S,350,4547 +S,351,4548 +S,352,4549 +S,353,4550 +S,354,4551 +S,355,4552 +S,356,4553 +S,357,4554 +S,358,4555 +S,359,4556 +S,360,4557 +S,361,4558 +S,362,4559 +S,363,4560 +S,364,4561 +S,365,4562 +S,366,4563 +S,367,4564 +S,368,4565 +S,369,4566 +S,370,4567 +S,371,4568 +S,372,4569 +S,373,4570 +S,374,4571 +S,375,4572 +S,376,4573 +S,377,4574 +S,378,4575 +S,379,4576 +S,380,4577 +S,381,4578 +S,382,4579 +S,383,4580 +S,384,4581 +S,385,4582 +S,386,4583 +S,387,4584 +S,388,4585 +S,389,4586 +S,390,4587 +S,391,4588 +S,392,4589 +S,393,4590 +S,394,4591 +S,395,4592 +S,396,4593 +S,397,4594 +S,398,4595 +S,399,4596 +S,400,4597 +S,401,4598 +S,402,4599 +S,403,4600 +S,404,4601 +S,405,4602 +S,406,4603 +S,407,4604 +S,408,4605 +S,409,4606 +S,410,4607 +S,411,4608 +S,412,4609 +S,413,4610 +S,414,4611 +S,415,4612 +S,416,4613 +S,417,4614 +S,418,4615 +S,419,4616 +S,420,4617 +S,421,4618 +S,422,4619 +S,423,4620 +S,424,4621 +S,425,4622 +S,426,4623 +S,427,4624 +S,428,4625 +S,429,4626 +S,430,4627 +S,431,4628 +S,432,4629 +S,433,4630 +S,434,4631 +S,435,4632 +S,436,4633 +S,437,4634 +S,438,4635 +S,439,4636 +S,440,4637 +S,441,4638 +S,442,4639 +S,443,4640 +S,444,4641 +S,445,4642 +S,446,4643 +S,447,4644 +S,448,4645 +S,449,4646 +S,450,4647 +S,451,4648 +S,452,4649 +S,453,4650 +S,454,4651 +S,455,4652 +S,456,4653 +S,457,4654 +S,458,4655 +S,459,4656 +S,460,4657 +S,461,4658 +S,462,4659 +S,463,4660 +S,464,4661 +S,465,4662 +S,466,4663 +S,467,4664 +S,468,4665 +S,469,4666 +S,470,4667 +S,471,4668 +S,472,4669 +S,473,4670 +S,474,4671 +S,475,4672 +S,476,4673 +S,477,4674 +S,478,4675 +S,479,4676 +S,480,4677 +S,481,4678 +S,482,4679 +S,483,4680 +S,484,4681 +S,485,4682 +S,486,4683 +S,487,4684 +S,488,4685 +S,489,4686 +S,490,4687 +S,491,4688 +S,492,4689 +S,493,4690 +S,494,4691 +S,495,4692 +S,496,4693 +S,497,4694 +S,498,4695 +S,499,4696 +S,500,4697 +S,501,4698 +S,502,4699 +S,503,4700 +S,504,4701 +S,505,4702 +S,506,4703 +S,507,4704 +S,508,4705 +S,509,4706 +S,510,4707 +S,511,4708 +S,512,4709 +S,513,4710 +S,514,4711 +S,515,4712 +S,516,4713 +S,517,4714 +S,518,4715 +S,519,4716 +S,520,4717 +S,521,4718 +S,522,4719 +S,523,4720 +S,524,4721 +S,525,4722 +S,526,4723 +S,527,4724 +S,528,4725 +S,529,4726 +S,530,4727 +S,531,4728 +S,532,4729 +S,533,4730 +S,534,4731 +S,535,4732 +S,536,4733 +S,537,4734 +S,538,4735 +S,539,4736 +S,540,4737 +S,541,4738 +S,542,4739 +S,543,4740 +S,544,4741 +S,545,4742 +S,546,4743 +S,547,4744 +S,548,4745 +S,549,4746 +S,550,4747 +S,551,4748 +S,552,4749 +S,553,4750 +S,554,4751 +S,555,4752 +S,556,4753 +S,557,4754 +S,558,4755 +S,559,4756 +S,560,4757 +S,561,4758 +S,562,4759 +S,563,4760 +S,564,4761 +S,565,4762 +S,566,4763 +S,567,4764 +S,568,4765 +S,569,4766 +S,570,4767 +S,571,4768 +S,572,4769 +S,573,4770 +S,574,4771 +S,575,4772 +S,576,4773 +S,577,4774 +S,578,4775 +S,579,4776 +S,580,4777 +S,581,4778 +S,582,4779 +S,583,4780 +S,584,4781 +S,585,4782 +S,586,4783 +S,587,4784 +S,588,4785 +S,589,4786 +S,590,4787 +S,591,4788 +S,592,4789 +S,593,4790 +S,594,4791 +S,595,4792 +S,596,4793 +S,597,4794 +S,598,4795 +S,599,4796 +S,600,4797 +S,601,4798 +S,602,4799 +S,603,4800 +S,604,4801 +S,605,4802 +S,606,4803 +S,607,4804 +S,608,4805 +S,609,4806 +S,610,4807 +S,611,4808 +S,612,4809 +S,613,4810 +S,614,4811 +S,615,4812 +S,616,4813 +S,617,4814 +S,618,4815 +S,619,4816 +S,620,4817 +S,621,4818 +S,622,4819 +S,623,4820 +S,624,4821 +S,625,4822 +S,626,4823 +S,627,4824 +S,628,4825 +S,629,4826 +S,630,4827 +S,631,4828 +S,632,4829 +S,633,4830 +S,634,4831 +S,635,4832 +S,636,4833 +S,637,4834 +S,638,4835 +S,639,4836 +S,640,4837 +S,641,4838 +S,642,4839 +S,643,4840 +S,644,4841 +S,645,4842 +S,646,4843 +S,647,4844 +S,648,4845 +S,649,4846 +S,650,4847 +S,651,4848 +S,652,4849 +S,653,4850 +S,654,4851 +S,655,4852 +S,656,4853 +S,657,4854 +S,658,4855 +S,659,4856 +S,660,4857 +S,661,4858 +S,662,4859 +S,663,4860 +S,664,4861 +S,665,4862 +S,666,4863 +S,667,4864 +S,668,4865 +S,669,4866 +S,670,4867 +S,671,4868 +S,672,4869 +S,673,4870 +S,674,4871 +S,675,4872 +S,676,4873 +S,677,4874 +S,678,4875 +S,679,4876 +S,680,4877 +S,681,4878 +S,682,4879 +S,683,4880 +S,684,4881 +S,685,4882 +S,686,4883 +S,687,4884 +S,688,4885 +S,689,4886 +S,690,4887 +S,691,4888 +S,692,4889 +S,693,4890 +S,694,4891 +S,695,4892 +S,696,4893 +S,697,4894 +S,698,4895 +S,699,4896 +S,700,4897 +S,701,4898 +S,702,4899 +S,703,4900 +S,704,4901 +S,705,4902 +S,706,4903 +S,707,4904 +S,708,4905 +S,709,4906 +S,710,4907 +S,711,4908 +S,712,4909 +S,713,4910 +S,714,4911 +S,715,4912 +S,716,4913 +S,717,4914 +S,718,4915 +S,719,4916 +S,720,4917 +S,721,4918 +S,722,4919 +S,723,4920 +S,724,4921 +S,725,4922 +S,726,4923 +S,727,4924 +S,728,4925 +S,729,4926 +S,730,4927 +S,731,4928 +S,732,4929 +S,733,4930 +S,734,4931 +S,735,4932 +S,736,4933 +S,737,4934 +S,738,4935 +S,739,4936 +S,740,4937 +S,741,4938 +S,742,4939 +S,743,4940 +S,744,4941 +S,745,4942 +S,746,4943 +S,747,4944 +S,748,4945 +S,749,4946 +S,750,4947 +S,751,4948 +S,752,4949 +S,753,4950 +S,754,4951 +S,755,4952 +S,756,4953 +S,757,4954 +S,758,4955 +S,759,4956 +S,760,4957 +S,761,4958 +S,762,4959 +S,763,4960 +S,764,4961 +S,765,4962 +S,766,4963 +S,767,4964 +S,768,4965 +S,769,4966 +S,770,4967 +S,771,4968 +S,772,4969 +S,773,4970 +S,774,4971 +S,775,4972 +S,776,4973 +S,777,4974 +S,778,4975 +S,779,4976 +S,780,4977 +S,781,4978 +S,782,4979 +S,783,4980 +S,784,4981 +S,785,4982 +S,786,4983 +S,787,4984 +S,788,4985 +S,789,4986 +S,790,4987 +S,791,4988 +S,792,4989 +S,793,4990 +S,794,4991 +S,795,4992 +S,796,4993 +S,797,4994 +S,798,4995 +S,799,4996 +S,800,4997 +S,801,4998 +S,802,4999 +S,803,5000 +S,804,5001 +S,805,5002 +S,806,5003 +S,807,5004 +S,808,5005 +S,809,5006 +S,810,5007 +S,811,5008 +S,812,5009 +S,813,5010 +S,814,5011 +S,815,5012 +S,816,5013 +S,817,5014 +S,818,5015 +S,819,5016 +S,820,5017 +S,821,5018 +S,822,5019 +S,823,5020 +S,824,5021 +S,825,5022 +S,826,5023 +S,827,5024 +S,828,5025 +S,829,5026 +S,830,5027 +S,831,5028 +S,832,5029 +S,833,5030 +S,834,5031 +S,835,5032 +S,836,5033 +S,837,5034 +S,838,5035 +S,839,5036 +S,840,5037 +S,841,5038 +S,842,5039 +S,843,5040 +S,844,5041 +S,845,5042 +S,846,5043 +S,847,5044 +S,848,5045 +S,849,5046 +S,850,5047 +S,851,5048 +S,852,5049 +S,853,5050 +S,854,5051 +S,855,5052 +S,856,5053 +S,857,5054 +S,858,5055 +S,859,5056 +S,860,5057 +S,861,5058 +S,862,5059 +S,863,5060 +S,864,5061 +S,865,5062 +S,866,5063 +S,867,5064 +S,868,5065 +S,869,5066 +S,870,5067 +S,871,5068 +S,872,5069 +S,873,5070 +S,874,5071 +S,875,5072 +S,876,5073 +S,877,5074 +S,878,5075 +S,879,5076 +S,880,5077 +S,881,5078 +S,882,5079 +S,883,5080 +S,884,5081 +S,885,5082 +S,886,5083 +S,887,5084 +S,888,5085 +S,889,5086 +S,890,5087 +S,891,5088 +S,892,5089 +S,893,5090 +S,894,5091 +S,895,5092 +S,896,5093 +S,897,5094 +S,898,5095 +S,899,5096 +S,900,5097 +S,901,5098 +S,902,5099 +S,903,5100 +S,904,5101 +S,905,5102 +S,906,5103 +S,907,5104 +S,908,5105 +S,909,5106 +S,910,5107 +S,911,5108 +S,912,5109 +S,913,5110 +S,914,5111 +S,915,5112 +S,916,5113 +S,917,5114 +S,918,5115 +S,919,5116 +S,920,5117 +S,921,5118 +S,922,5119 +S,923,5120 +S,924,5121 +S,925,5122 +S,926,5123 +S,927,5124 +S,928,5125 +S,929,5126 +S,930,5127 +S,931,5128 +S,932,5129 +S,933,5130 +S,934,5131 +S,935,5132 +S,936,5133 +S,937,5134 +S,938,5135 +S,939,5136 +S,940,5137 +S,941,5138 +S,942,5139 +S,943,5140 +S,944,5141 +S,945,5142 +S,946,5143 +S,947,5144 +S,948,5145 +S,949,5146 +S,950,5147 +S,951,5148 +S,952,5149 +S,953,5150 +S,954,5151 +S,955,5152 +S,956,5153 +S,957,5154 +S,958,5155 +S,959,5156 +S,960,5157 +S,961,5158 +S,962,5159 +S,963,5160 +S,964,5161 +S,965,5162 +S,966,5163 +S,967,5164 +S,968,5165 +S,969,5166 +S,970,5167 +S,971,5168 +S,972,5169 +S,973,5170 +S,974,5171 +S,975,5172 +S,976,5173 +S,977,5174 +S,978,5175 +S,979,5176 +S,980,5177 +S,981,5178 +S,982,5179 +S,983,5180 +S,984,5181 +S,985,5182 +S,986,5183 +S,987,5184 +S,988,5185 +S,989,5186 +S,990,5187 +S,991,5188 +S,992,5189 +S,993,5190 +S,994,5191 +S,995,5192 +S,996,5193 +S,997,5194 +S,998,5195 +S,999,5196 +S,1000,5197 +S,1001,5198 +S,1002,5199 +S,1003,5200 +S,1004,5201 +S,1005,5202 +S,1006,5203 +S,1007,5204 +S,1008,5205 +S,1009,5206 +S,1010,5207 +S,1011,5208 +S,1012,5209 +S,1013,5210 +S,1014,5211 +S,1015,5212 +S,1016,5213 +S,1017,5214 +S,1018,5215 +S,1019,5216 +S,1020,5217 diff --git a/networks/GasLib4197/training.ini b/networks/GasLib4197/training.ini new file mode 100644 index 0000000..b97b664 --- /dev/null +++ b/networks/GasLib4197/training.ini @@ -0,0 +1,7 @@ +T0 = 20.0 +Rs = 530.0 +tH = 3600.0 +cp = 40.0;40.0 +up = 40.0;40.0;40.0 +uq = 15.0;25.0;35.0 +ut = 0 diff --git a/networks/GasLib582.net b/networks/GasLib582.net new file mode 100644 index 0000000..241d595 --- /dev/null +++ b/networks/GasLib582.net @@ -0,0 +1,770 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,33,175,39747.4810299,1.3,5,0.00001 +P,177,176,3902.24491935,0.3,0,0.001 +P,35,358,2049.10116813,0.3,0,0.001 +P,180,179,4759.04382666,0.3,-3,0.0005 +P,181,182,2926.16549393,0.75,-1,0.0005 +P,184,183,6708.15031469,0.5,-7,0.00001 +P,186,185,6090.7456676500005,0.15,1,0.00001 +P,127,532,3950.78620363,0.5,68.09999847,0.00001 +P,195,533,4072.0815602,0.15,-5,0.0001 +P,196,194,2108.89069068,0.15,-3,0.0001 +P,204,203,6973.95433015,0.5,0,0.00001 +P,206,10,1886.01940593,1,0,0.00001 +P,208,206,9656.60727941,1,0,0.00001 +P,210,209,7727.7018966900005,0.5,0,0.00001 +P,216,357,5192.33000197,0.3,4,0.001 +P,217,312,2101.11160041,0.5,-6,0.0005 +P,55,571,3967.00943251,0.75,0,0.00001 +P,580,55,2026.18923094,0.75,0,0.00001 +P,219,56,1117.0576107200002,0.15,0,0.00001 +P,219,493,2475.19925199,0.75,-3.3499984799999964,0.00001 +P,495,219,4911.12795445,0.75,2.6500015299999973,0.00001 +P,579,224,8895.602520280001,1,-0.8999999759999999,0.00001 +P,581,57,20398.1537301,0.3,-10,0.00001 +P,233,272,2322.30451666,0.3,0,0.0005 +P,282,233,2272.12125201,0.3,-2,0.0005 +P,234,256,4532.1612181499995,0.5,-1,0.0001 +P,235,181,4534.080955650001,0.5,-2,0.0001 +P,236,264,3700.21072135,0.5,3,0.0001 +P,254,237,2759.8979277099997,0.5,0,0.0001 +P,238,251,1778.76242373,0.3,0,0.0005 +P,239,238,1930.31644304,0.15,0,0.0005 +P,240,239,2129.7274859900003,0.3,0,0.0005 +P,241,240,4543.7028011,0.15,0,0.0005 +P,258,242,2644.42196573,0.15,0,0.0005 +P,246,65,6207.426787660001,0.3,0,0.0005 +P,246,252,8592.80213792,0.3,0,0.0005 +P,243,244,4565.12320415,0.75,-22,0.0005 +P,244,264,2311.04959646,0.5,0,0.0001 +P,262,270,2365.6042038799997,0.3,0,0.0005 +P,261,283,4274.599613820001,0.5,-3,0.0005 +P,254,253,2070.8955251400002,0.15,0,0.0005 +P,525,248,4653.52943096,0.75,-8,0.0005 +P,250,249,2213.37889549,0.75,-1,0.0001 +P,255,254,5057.30077923,0.5,0,0.0001 +P,260,280,3058.99549943,0.3,4,0.0005 +P,259,258,5882.593245,0.15,0,0.0005 +P,273,260,6602.13219981,0.3,0,0.0005 +P,285,261,5625.16021828,0.5,-20,0.0005 +P,266,265,2196.24490367,0.3,0,0.0005 +P,266,71,2022.6765644700001,0.15,0,0.0005 +P,268,266,2268.03410484,0.5,0,0.0005 +P,269,268,2291.59199697,0.5,-3,0.0005 +P,270,269,2269.65574516,0.5,-2,0.0005 +P,271,75,2362.489747,0.3,4,0.0005 +P,272,73,1920.65439317,0.3,1,0.0001 +P,272,274,2309.9112926999996,0.3,2,0.0005 +P,274,273,2676.272265,0.3,0,0.0005 +P,277,275,4203.22842527,0.3,-3,0.0005 +P,276,79,2779.86701699,0.3,0,0.0005 +P,284,276,4984.87786398,0.3,1,0.0005 +P,279,278,5950.99516803,0.3,4,0.0005 +P,75,279,4247.295026719999,0.3,0,0.0005 +P,281,77,4863.5252787,0.3,0,0.0005 +P,283,282,2199.60127654,0.5,-1,0.0005 +P,79,78,10686.4816559,0.3,-11,0.0005 +P,288,358,2099.0880706800003,0.3,0,0.0001 +P,288,287,2204.96722939,0.3,0,0.001 +P,359,290,2340.3957618599998,0.3,5,0.001 +P,291,81,3930.8799673900003,0.3,2,0.0005 +P,292,329,5355.64628389,0.5,1,0.001 +P,294,296,2697.90672218,0.3,0,0.0005 +P,299,308,7901.4515679999995,0.5,-10,0.0001 +P,301,300,7176.13367473,0.5,76,0.00001 +P,302,301,2449.61647571,0.5,1,0.00001 +P,303,302,2520.66249558,0.5,-16,0.00001 +P,305,303,3184.19008963,0.5,-23,0.0001 +P,306,305,3237.89945516,0.5,31,0.0001 +P,307,306,2524.90308104,0.5,11,0.0001 +P,308,307,2564.22100603,0.5,21,0.0001 +P,352,310,9797.83548589,0.3,1,0.001 +P,310,351,8781.02620444,0.3,13,0.001 +P,311,527,3454.77122469,0.3,64,0.0001 +P,312,311,1959.90246643,0.3,7,0.0005 +P,313,217,2161.95776066,0.5,14,0.0005 +P,313,88,1843.03744346,0.15,3,0.0001 +P,315,313,2267.26505738,0.5,4,0.0005 +P,316,315,2334.04356349,0.5,0,0.0005 +P,316,89,2074.69678308,0.15,-1,0.0005 +P,318,316,2393.74594281,0.5,0,0.0005 +P,319,318,4940.59387236,0.5,-7,0.0005 +P,322,321,2607.2864262499997,0.3,-3,0.0001 +P,324,322,3367.55462564,0.5,-1,0.0005 +P,326,92,2114.24910293,0.15,1,0.0005 +P,330,328,2557.76469256,0.3,1,0.0005 +P,328,327,4817.206212020001,0.3,3,0.0001 +P,333,329,2688.38192345,0.5,15,0.0005 +P,331,330,2643.17543084,0.3,0,0.0005 +P,332,331,5206.7508027700005,0.3,1,0.0005 +P,334,333,2014.7161640800002,0.3,-28,0.001 +P,336,335,2062.89282422,0.5,-2,0.0005 +P,335,334,2050.35567769,0.5,-14,0.0005 +P,339,336,1874.4143445200002,0.5,-3,0.0005 +P,337,348,2220.94967409,0.3,9,0.001 +P,350,337,4273.44957703,0.3,16,0.0001 +P,338,349,1941.04683031,0.15,2,0.0005 +P,350,338,3110.5581889699997,0.3,9,0.0001 +P,340,339,4158.60633069,0.5,18,0.0005 +P,344,95,1933.55353485,0.15,0,0.0005 +P,346,343,4034.10858546,0.5,-4,0.0005 +P,345,344,2173.68486449,0.15,3,0.0005 +P,346,345,2114.1331499499997,0.3,4,0.0005 +P,348,346,2308.22329426,0.3,10,0.001 +P,349,97,1946.83119473,0.15,9,0.0005 +P,354,352,2514.3341548599997,0.3,-4,0.001 +P,354,353,1833.14918446,0.15,0,0.0001 +P,357,354,4807.35495643,0.3,-5,0.001 +P,356,355,3356.43575272,0.3,4,0.0001 +P,357,356,1104.19240497,0.5,5,0.0005 +P,362,359,4690.09961568,0.3,1,0.001 +P,363,368,4182.14643537,0.5,-4,0.0001 +P,368,366,6640.66208455,0.5,4,0.0001 +P,368,367,1926.80040633,0.3,6,0.0001 +P,370,369,1594.54762583,0.15,4,0.00001 +P,478,370,1129.6266581700002,0.15,10,0.00001 +P,411,100,2344.07038982,0.3,7,0.00001 +P,372,371,2046.15897267,0.3,-1,0.00001 +P,411,372,4029.3599376499997,0.5,-6,0.00001 +P,375,195,6043.70189654,0.3,3,0.0001 +P,101,384,3774.40520819,0.15,12,0.0001 +P,392,386,4158.6775307200005,0.3,2,0.0001 +P,377,103,1962.31925264,0.3,-44,0.0001 +P,534,377,7718.76635024,0.3,114,0.0001 +P,193,104,3868.52889356,0.15,32,0.0001 +P,389,107,1732.6173491200002,0.3,23,0.0001 +P,380,379,4465.61468501,0.5,11,0.00001 +P,396,380,6718.15803655,0.5,44,0.00001 +P,401,399,2745.4290285399998,0.5,-96,0.00001 +P,387,402,5188.73663538,0.5,4,0.00001 +P,195,110,2003.34996189,0.3,-1,0.0001 +P,384,383,6273.36223193,0.3,-52,0.0001 +P,403,387,2573.2079583699997,0.5,25,0.00001 +P,403,390,2544.46002308,0.3,30,0.0001 +P,406,388,4204.03126682,0.3,-97,0.0001 +P,390,389,1701.91106462,0.3,-106,0.0001 +P,393,391,4208.3140802,0.3,-10,0.0001 +P,394,392,2240.55539409,0.3,4,0.0001 +P,395,394,4449.91902773,0.3,-24,0.0001 +P,399,397,2350.7264912200003,0.5,-7,0.00001 +P,404,403,1679.39839007,0.5,-27,0.00001 +P,405,404,8387.93382117,0.5,135,0.00001 +P,112,406,7361.24023232,0.3,8,0.0001 +P,407,428,4382.185664199999,0.3,1,0.0001 +P,472,408,2157.77612669,0.3,0,0.0001 +P,409,471,4242.03032205,0.3,4,0.0001 +P,523,516,7937.78318227,0.3,-8.200000760000002,0.0001 +P,415,433,2209.7102547,0.75,0,0.00001 +P,413,114,7401.35960637,0.5,-8.299999239999998,0.00001 +P,414,502,4631.43268575,0.75,2.0000038100000026,0.00001 +P,412,411,2385.2802954199997,0.5,5.200000760000002,0.00001 +P,114,412,2392.34236768,0.5,-3.2000007600000018,0.00001 +P,127,413,4438.019684190001,0.5,-3.600002289999999,0.00001 +P,504,416,6994.98967757,0.75,-0.20000076000000178,0.00001 +P,416,415,2214.66451566,0.75,0,0.00001 +P,417,115,1968.5681661800002,0.15,-2,0.0001 +P,419,417,2077.31024108,0.15,-2,0.0001 +P,420,419,4179.63845809,0.3,-1.5,0.0001 +P,422,424,2383.27779977,0.3,-3,0.0001 +P,424,427,2313.05919734,0.3,-101,0.0001 +P,427,426,4325.4129617,0.3,-1.5,0.0001 +P,496,536,6765.55820452,0.3,-45,0.00001 +P,428,118,1962.72076337,0.3,0,0.0001 +P,429,119,5880.90574955,0.3,0,0.00001 +P,430,429,3951.6671904299997,0.3,0,0.00001 +P,444,439,4807.4764608000005,0.3,5,0.0001 +P,453,459,4861.064244679999,0.3,-15,0.0001 +P,465,454,5020.29665923,0.3,-15,0.0001 +P,463,467,5113.977689230001,0.3,1,0.0001 +P,462,464,2396.87993065,0.3,2,0.0001 +P,432,431,4490.09074534,0.75,0,0.00001 +P,436,447,3814.8099053200003,0.3,-49,0.0001 +P,437,519,2293.90617944,0.3,11,0.0001 +P,471,435,2064.0824843,0.15,0,0.0001 +P,447,446,2055.30233916,0.3,-3,0.0001 +P,539,436,6112.33149832,0.3,0,0.0001 +P,516,437,10480.3466551,0.3,-0.7999992399999982,0.0001 +P,438,121,4450.26092649,0.3,0,0.0001 +P,440,439,2390.66854221,0.3,0,0.0001 +P,441,440,2314.16204557,0.3,0,0.0001 +P,442,441,2214.81586247,0.3,0,0.0001 +P,446,442,2159.82020728,0.3,-4,0.0001 +P,444,443,2425.18645921,0.3,0,0.0001 +P,455,539,7518.93838596,0.3,0,0.0001 +P,468,460,7350.04752209,0.3,2,0.0001 +P,449,124,1778.55800985,0.3,49,0.0001 +P,452,449,2719.3366375600003,0.3,8,0.0001 +P,458,455,2452.14388483,0.3,30,0.0001 +P,457,456,2551.7582608499997,0.3,0,0.0001 +P,459,458,2551.7582608499997,0.3,0,0.0001 +P,460,462,9680.71075623,0.3,-60,0.0001 +P,467,465,2697.64760735,0.3,0,0.0001 +P,469,468,3988.97183512,0.3,81,0.0001 +P,471,470,3950.9751146199997,0.3,0,0.0001 +P,473,472,2221.56327194,0.3,4,0.0001 +P,481,475,4561.029752259999,0.5,0,0.00001 +P,475,474,2157.57178142,0.3,2,0.00001 +P,487,479,2328.5188728900002,0.75,-13,0.00001 +P,478,486,2157.57571969,0.75,-6,0.00001 +P,479,478,2476.0122485800002,0.75,-29,0.00001 +P,482,480,1826.86022405,0.3,-1,0.00001 +P,484,482,1799.8002213299999,0.75,-1,0.00001 +P,127,485,2703.84163811,0.75,-2.9000015299999973,0.00001 +P,485,484,4424.52885956,0.75,-4,0.00001 +P,486,127,2483.82402868,0.75,-18.099998470000003,0.00001 +P,490,487,6752.87818541,0.75,-82,0.00001 +P,490,488,4530.78498414,0.3,50,0.00001 +P,491,489,11114.0091338,0.5,63,0.00001 +P,491,128,2417.81705858,0.75,150,0.00001 +P,128,490,9171.87769838,0.75,-45,0.00001 +P,493,491,5165.56660294,0.75,11.69999695,0.00001 +P,495,494,2161.0684015300003,0.3,8,0.00001 +P,496,129,1574.04423143,0.3,8,0.00001 +P,497,496,4382.80559985,0.3,-32,0.00001 +P,499,130,2428.03076376,0.75,-78,0.00001 +P,500,131,4523.42236547,0.75,52,0.00001 +P,131,499,2506.85835994,0.75,-5,0.00001 +P,501,500,6802.42075156,0.75,-11.5,0.00001 +P,502,501,4608.972087069999,0.75,46.69999695,0.00001 +P,506,505,7189.052225840001,0.75,13,0.00001 +P,508,507,2167.09026974,0.75,4,0.00001 +P,508,135,1895.07045827,0.3,5,0.00001 +P,510,508,6648.59591076,0.75,-56,0.00001 +P,511,510,13808.146263699999,0.75,25,0.00001 +P,512,137,2020.06381421,0.3,-2,0.0001 +P,512,515,2114.83239652,0.3,-2,0.0001 +P,515,514,6235.7773810300005,0.3,8,0.0001 +P,520,517,2178.44985086,0.3,1,0.0001 +P,520,518,1770.66721459,0.3,1,0.0001 +P,521,520,4412.920491919999,0.3,2,0.0001 +P,524,522,1865.6869047,0.3,2,0.0001 +P,524,523,1777.74812453,0.3,13,0.0001 +P,203,17,2270.31776168,0.5,0,0.00001 +P,545,203,11851.9877536,0.5,0,0.00001 +P,144,561,2203.79097704,1,1.7000000255,0.00001 +P,574,144,3529.1958699,1,0.29999995199999985,0.00001 +P,150,546,14071.988296000001,0.5,-3,0.00001 +P,563,548,15853.1307021,1,9.2000001895,0.00001 +P,21,20,25405.5833795,1.3,-18,0.00001 +P,22,21,22870.0689342,1.3,20,0.00001 +P,554,33,4584.349859649999,1,0,0.00001 +P,556,156,4576.488463289999,1,0,0.00001 +P,25,556,10343.662654599999,1,8.900001529999997,0.00001 +P,570,152,6694.39090641,0.3,1,0.0001 +P,557,154,14583.644623099999,1,9.199999809,0.00001 +P,559,557,2066.15364107,1,0,0.00001 +P,558,559,25148.020677200002,1,0,0.00001 +P,209,153,2103.22389218,0.5,0,0.00001 +P,562,23,4591.32159328,1,0,0.00001 +P,24,560,17974.039300200002,1,0,0.00001 +P,548,558,2142.8295860099997,1,0,0.00001 +P,154,570,10776.968501700001,1,3.5,0.00001 +P,571,572,4396.205280890001,1,15,0.00001 +P,572,573,2133.29108264,1,0,0.00001 +P,565,155,19175.0475692,1,-4,0.00001 +P,155,191,19840.3149199,1,8,0.00001 +P,156,571,4650.43844731,1,2,0.00001 +P,567,24,14291.501787899999,1,2.8999999535,0.00001 +P,566,157,1912.49317088,0.3,-41,0.0001 +P,570,25,12667.6985678,1,10.099998470000003,0.00001 +P,26,574,1020.24409289,1,-7.0999997850000005,0.00001 +P,27,575,1997.85875897,1.3,-1.5999999049999998,0.00001 +P,575,576,2177.5223134899998,1,-4.300000071,0.00001 +P,573,565,6937.88003632,1,15,0.00001 +P,577,578,26590.3313985,1.3,15.599998470000003,0.00001 +P,23,567,7035.01236622,1,-2.8999999535,0.00001 +P,564,577,54287.7840706,1.3,27.400001529999997,0.00001 +P,28,33,28400.7605901,1.3,0,0.00001 +P,151,214,37571.2040211,1,-2.799999952,0.00001 +P,578,581,47429.4990367,1.3,29,0.00001 +S,149,1 +S,149,32 +S,169,170 +S,550,169 +S,551,550 +S,173,551 +S,192,161 +S,563,162 +S,166,163 +S,165,164 +S,167,564 +S,174,553 +S,550,549 +S,552,172 +S,192,178 +S,33,188 +S,33,2 +S,33,36 +S,33,3 +S,403,37 +S,510,38 +S,55,39 +S,150,40 +S,127,41 +S,475,42 +S,531,43 +S,484,44 +S,395,45 +S,532,46 +S,491,47 +S,22,4 +S,145,48 +S,17,5 +S,17,49 +S,143,50 +S,16,6 +S,28,7 +S,563,8 +S,51,207 +S,199,197 +S,200,198 +S,201,199 +S,202,200 +S,52,223 +S,561,53 +S,203,9 +S,210,207 +S,208,210 +S,215,569 +S,33,11 +S,55,12 +S,156,13 +S,24,221 +S,23,222 +S,153,10 +S,224,582 +S,541,14 +S,225,156 +S,226,156 +S,362,360 +S,364,361 +S,532,227 +S,491,228 +S,391,58 +S,395,59 +S,531,60 +S,126,61 +S,475,62 +S,484,63 +S,371,64 +S,376,401 +S,452,450 +S,465,451 +S,458,456 +S,459,457 +S,541,547 +S,542,140 +S,541,141 +S,17,142 +S,545,143 +S,545,16 +S,145,22 +S,27,146 +S,20,147 +S,564,18 +S,567,19 +S,26,148 +S,214,582 +S,151,29 +S,151,158 +S,562,30 +S,562,159 +S,580,31 +S,580,160 +S,567,568 +S,176,34 +S,288,177 +S,271,180 +S,183,187 +S,190,541 +S,192,541 +S,194,193 +S,211,202 +S,212,211 +S,243,54 +S,499,220 +S,233,232 +S,248,261 +S,237,247 +S,242,241 +S,262,66 +S,248,245 +S,247,246 +S,247,67 +S,257,68 +S,253,257 +S,274,255 +S,256,260 +S,258,257 +S,70,259 +S,265,275 +S,273,70 +S,263,262 +S,78,263 +S,264,279 +S,268,267 +S,271,72 +S,277,74 +S,278,277 +S,280,76 +S,286,284 +S,286,285 +S,320,289 +S,290,216 +S,359,291 +S,292,82 +S,217,83 +S,294,293 +S,300,296 +S,295,526 +S,295,528 +S,296,295 +S,218,297 +S,297,299 +S,299,298 +S,303,84 +S,304,85 +S,305,304 +S,307,86 +S,308,530 +S,352,309 +S,310,529 +S,217,87 +S,315,314 +S,318,317 +S,321,319 +S,321,320 +S,323,90 +S,324,323 +S,329,91 +S,326,325 +S,327,326 +S,328,93 +S,336,94 +S,342,341 +S,343,342 +S,344,96 +S,348,347 +S,349,98 +S,351,350 +S,358,363 +S,361,360 +S,364,362 +S,365,364 +S,366,365 +S,370,99 +S,413,373 +S,374,112 +S,383,375 +S,400,376 +S,377,102 +S,378,105 +S,193,378 +S,389,106 +S,379,395 +S,400,381 +S,382,108 +S,383,382 +S,196,109 +S,392,384 +S,385,111 +S,386,385 +S,390,406 +S,394,393 +S,397,396 +S,397,535 +S,399,398 +S,402,400 +S,402,401 +S,531,405 +S,475,407 +S,408,409 +S,473,469 +S,444,410 +S,431,538 +S,428,113 +S,431,414 +S,419,116 +S,418,460 +S,425,420 +S,422,421 +S,424,423 +S,427,117 +S,473,430 +S,433,432 +S,436,120 +S,517,514 +S,443,438 +S,445,122 +S,446,123 +S,468,445 +S,449,448 +S,451,450 +S,465,452 +S,462,461 +S,464,463 +S,467,466 +S,474,125 +S,474,126 +S,483,476 +S,487,477 +S,479,540 +S,484,481 +S,485,483 +S,493,492 +S,130,495 +S,499,497 +S,500,498 +S,501,132 +S,502,133 +S,503,134 +S,504,503 +S,505,504 +S,507,506 +S,509,136 +S,510,509 +S,515,513 +S,537,516 +S,519,138 +S,519,521 +S,521,139 +S,163,22 +S,560,212 +S,576,574 +S,15,542 +S,249,235 +S,250,236 +S,251,252 +S,252,69 +S,282,281 +S,287,80 +S,324,292 +S,333,332 +S,343,340 +S,426,425 +S,437,434 +S,454,453 +S,20,149 +S,566,555 +V,170,174 +V,175,167 +V,179,234 +V,182,234 +V,100,184 +V,151,554 +V,201,204 +V,204,210 +V,211,223 +V,223,207 +V,211,213 +V,488,374 +V,480,229 +V,421,418 +V,230,422 +V,231,421 +V,581,543 +V,175,552 +V,164,166 +V,171,165 +V,165,168 +V,553,172 +V,169,168 +V,553,171 +V,173,174 +V,207,213 +V,168,564 +V,165,163 +V,187,186 +V,205,191 +V,212,563 +V,215,567 +V,178,511 +V,218,525 +V,489,526 +V,528,527 +V,530,529 +V,532,531 +V,533,196 +V,535,534 +V,536,243 +V,538,537 +V,540,539 +V,189,542 +V,544,542 +V,547,546 +V,579,576 +V,565,566 +V,568,569 +C,174,549 +C,172,173 +C,171,170 +C,223,213 +C,561,562 +S,190,189 +S,191,192 +S,198,197 +S,200,199 +S,201,202 +S,205,581 +S,214,215 +S,543,544 +S,583,1 +S,584,2 +S,585,3 +S,586,4 +S,587,5 +S,588,6 +S,589,7 +S,590,8 +S,591,9 +S,592,10 +S,593,11 +S,594,12 +S,595,13 +S,596,14 +S,597,15 +S,598,16 +S,599,17 +S,600,18 +S,601,19 +S,602,20 +S,603,21 +S,604,22 +S,605,23 +S,606,24 +S,607,25 +S,608,26 +S,609,27 +S,610,28 +S,611,29 +S,612,30 +S,613,31 +S,32,614 +S,33,615 +S,34,616 +S,35,617 +S,36,618 +S,37,619 +S,38,620 +S,39,621 +S,40,622 +S,41,623 +S,42,624 +S,43,625 +S,44,626 +S,45,627 +S,46,628 +S,47,629 +S,48,630 +S,49,631 +S,50,632 +S,51,633 +S,52,634 +S,53,635 +S,54,636 +S,55,637 +S,56,638 +S,57,639 +S,58,640 +S,59,641 +S,60,642 +S,61,643 +S,62,644 +S,63,645 +S,64,646 +S,65,647 +S,66,648 +S,67,649 +S,68,650 +S,69,651 +S,70,652 +S,71,653 +S,72,654 +S,73,655 +S,74,656 +S,75,657 +S,76,658 +S,77,659 +S,78,660 +S,79,661 +S,80,662 +S,81,663 +S,82,664 +S,83,665 +S,84,666 +S,85,667 +S,86,668 +S,87,669 +S,88,670 +S,89,671 +S,90,672 +S,91,673 +S,92,674 +S,93,675 +S,94,676 +S,95,677 +S,96,678 +S,97,679 +S,98,680 +S,99,681 +S,100,682 +S,101,683 +S,102,684 +S,103,685 +S,104,686 +S,105,687 +S,106,688 +S,107,689 +S,108,690 +S,109,691 +S,110,692 +S,111,693 +S,112,694 +S,113,695 +S,114,696 +S,115,697 +S,116,698 +S,117,699 +S,118,700 +S,119,701 +S,120,702 +S,121,703 +S,122,704 +S,123,705 +S,124,706 +S,125,707 +S,126,708 +S,127,709 +S,128,710 +S,129,711 +S,130,712 +S,131,713 +S,132,714 +S,133,715 +S,134,716 +S,135,717 +S,136,718 +S,137,719 +S,138,720 +S,139,721 +S,140,722 +S,141,723 +S,142,724 +S,143,725 +S,144,726 +S,145,727 +S,146,728 +S,147,729 +S,148,730 +S,149,731 +S,150,732 +S,151,733 +S,152,734 +S,153,735 +S,154,736 +S,155,737 +S,156,738 +S,157,739 +S,158,740 +S,159,741 +S,160,742 diff --git a/networks/GasLib582/training.ini b/networks/GasLib582/training.ini new file mode 100644 index 0000000..68cff63 --- /dev/null +++ b/networks/GasLib582/training.ini @@ -0,0 +1,7 @@ +T0 = 10.0 +Rs = 530.0 +tH = 3600.0 +cp = 40;40;40;40;40 +up = 40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40;40 +uq = 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 +ut = 0 diff --git a/networks/GruHKetal13.net b/networks/GruHKetal13.net new file mode 100644 index 0000000..66a92b9 --- /dev/null +++ b/networks/GruHKetal13.net @@ -0,0 +1,19 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,1,2,46.0,0.206,0,0.0001 +P,2,3,7.0,0.206,0,0.0001 +P,3,4,3080.0,0.206,0,0.0001 +P,4,5,4318.0,0.206,0,0.0001 +P,5,6,323.0,0.206,0,0.0001 +P,5,7,790.0,0.206,0,0.0001 +P,7,8,1820.0,0.206,0,0.0001 +P,7,9,1460.0,0.206,0,0.0001 +P,9,10,2368.0,0.206,0,0.0001 +P,10,11,1410.0,0.206,0,0.0001 +P,11,12,296.0,0.206,0,0.0001 +P,11,13,3979.0,0.206,0,0.0001 +P,13,14,119.0,0.206,0,0.0001 +P,13,15,3881.0,0.206,0,0.0001 +P,15,16,6114.0,0.206,0,0.0001 +P,15,17,687.0,0.206,0,0.0001 +S,9,18 +S,10,19 diff --git a/networks/GruHKetal13/training.ini b/networks/GruHKetal13/training.ini new file mode 100644 index 0000000..95e37cb --- /dev/null +++ b/networks/GruHKetal13/training.ini @@ -0,0 +1,6 @@ +T0 = 20.0 +Rs = 530.0 +tH = 3600.0 +up = 44.5 +uq = 0.21;34.86;0.22;2.83;1.81;1.04;2.85;1.45 +ut = 0 diff --git a/networks/GruJHetal14.net b/networks/GruJHetal14.net new file mode 100644 index 0000000..416d093 --- /dev/null +++ b/networks/GruJHetal14.net @@ -0,0 +1,49 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,1,2,10000.0,0.9,0,0.0001 +V,2,4 +P,3,4,10000.0,0.9,0,0.0001 +P,4,5,10000.0,0.9,0,0.0001 +P,5,6,10000.0,0.9,0,0.0001 +P,6,7,10000.0,0.9,0,0.0001 +V,7,8 +P,8,9,10000.0,0.9,0,0.0001 +P,9,10,10000.0,0.9,0,0.0001 +P,10,11,10000.0,0.9,0,0.0001 +P,11,12,10000.0,0.9,0,0.0001 +P,12,13,10000.0,0.9,0,0.0001 +P,13,14,10000.0,0.9,0,0.0001 +P,14,15,10000.0,0.9,0,0.0001 +P,15,16,10000.0,0.9,0,0.0001 +P,16,17,10000.0,0.9,0,0.0001 +P,17,18,10000.0,0.9,0,0.0001 +P,18,19,10000.0,0.9,0,0.0001 +P,19,20,10000.0,0.9,0,0.0001 +P,21,22,10000.0,0.9,0,0.0001 +V,22,24 +P,23,24,10000.0,0.9,0,0.0001 +P,24,25,10000.0,0.9,0,0.0001 +P,25,26,10000.0,0.9,0,0.0001 +P,26,27,10000.0,0.9,0,0.0001 +V,27,28 +P,28,29,10000.0,0.9,0,0.0001 +P,29,30,10000.0,0.9,0,0.0001 +P,30,31,10000.0,0.9,0,0.0001 +P,31,32,10000.0,0.9,0,0.0001 +P,32,33,10000.0,0.9,0,0.0001 +P,33,34,10000.0,0.9,0,0.0001 +P,34,35,10000.0,0.9,0,0.0001 +P,35,36,10000.0,0.9,0,0.0001 +P,36,37,10000.0,0.9,0,0.0001 +P,37,38,10000.0,0.9,0,0.0001 +P,38,39,10000.0,0.9,0,0.0001 +P,39,20,10000.0,0.9,0,0.0001 +V,7,27 +V,9,29 +V,10,39 +P,39,30,10000.0,0.9,0,0.0001 +P,40,41,10000.0,0.9,0,0.0001 +P,41,42,10000.0,0.9,0,0.0001 +P,42,43,10000.0,0.9,0,0.0001 +P,43,44,10000.0,0.9,0,0.0001 +P,44,45,10000.0,0.9,0,0.0001 +V,44,16 diff --git a/networks/GruJHetal14/training.ini b/networks/GruJHetal14/training.ini new file mode 100644 index 0000000..85f16e4 --- /dev/null +++ b/networks/GruJHetal14/training.ini @@ -0,0 +1,6 @@ +T0 = 20.0 +Rs = 530.0 +tH = 3600.0 +up = +uq = +ut = 0 diff --git a/networks/Guy67.net b/networks/Guy67.net new file mode 100644 index 0000000..5628511 --- /dev/null +++ b/networks/Guy67.net @@ -0,0 +1,17 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,1,2,18500,0.43688,0,0.0001 +P,2,3,39400,0.43688,0,0.0001 +P,3,4,20100,0.43688,0,0.0001 +P,4,5,20100,0.43688,0,0.0001 +P,5,6,107000,0.43688,0,0.0001 +P,6,7,103000,0.43688,0,0.0001 +P,7,8,18500,0.43688,0,0.0001 +P,8,9,31400,0.43688,0,0.0001 +P,2,10,29800,0.33528,0,0.0001 +P,3,11,78900,0.2032,0,0.0001 +P,4,12,11300,0.2032,0,0.0001 +P,5,13,13700,0.1524,0,0.0001 +P,6,14,16900,0.33528,0,0.0001 +P,7,15,16100,0.3302,0,0.0001 +P,8,16,38600,0.33528,0,0.0001 +P,9,17,12900,0.3048,0,0.0001 diff --git a/networks/Guy67/training.ini b/networks/Guy67/training.ini new file mode 100644 index 0000000..96a1da3 --- /dev/null +++ b/networks/Guy67/training.ini @@ -0,0 +1,6 @@ +T0 = 10.0 +Rs = 530.0 +tH = 3600.0 +up = 81.0 +uq = 8.4;1.4;2.8;0.8;3.3;2.5;2.5;2.7 +ut = 0 diff --git a/networks/Kiu94.net b/networks/Kiu94.net new file mode 100644 index 0000000..1693be9 --- /dev/null +++ b/networks/Kiu94.net @@ -0,0 +1,17 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,1,2,18500.0,0.437,0,0.0001 +P,2,3,39400.0,0.437,0,0.0001 +P,3,4,20100.0,0.437,0,0.0001 +P,4,5,20100.0,0.437,0,0.0001 +P,5,6,107000.0,0.437,0,0.0001 +P,6,7,103000.0,0.437,0,0.0001 +P,7,8,18500.0,0.437,0,0.0001 +P,8,9,30600.0,0.437,0,0.0001 +P,9,10,12900.0,0.305,0,0.0001 +P,2,11,29800.0,0.335,0,0.0001 +P,3,12,78800.0,0.203,0,0.0001 +P,4,13,11300.0,0.203,0,0.0001 +P,5,14,13700.0,0.152,0,0.0001 +P,6,15,16900.0,0.335,0,0.0001 +P,7,16,16100.0,0.305,0,0.0001 +P,8,17,38600.0,0.335,0,0.0001 diff --git a/networks/Kiu94/training.ini b/networks/Kiu94/training.ini new file mode 100644 index 0000000..cd51a9d --- /dev/null +++ b/networks/Kiu94/training.ini @@ -0,0 +1,6 @@ +T0 = 20.0 +Rs = 530.0 +tH = 3600.0 +up = 4.2 +uq = 9.8;30.2;4.9;10.2;2.9;11.8;9.0;9.0 +ut = 0 diff --git a/networks/MORGEN.net b/networks/MORGEN.net new file mode 100644 index 0000000..f19e7b4 --- /dev/null +++ b/networks/MORGEN.net @@ -0,0 +1,35 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,1,2,60000.0,1.0,0,0.00001 +P,2,3,30000.0,1.0,0,0.00001 +P,3,4,30000.0,1.0,0,0.00001 +P,4,5,60000.0,1.0,0,0.00001 +S,5,6 +P,6,9,60000.0,1.0,0,0.00001 +P,9,8,30000.0,1.0,0,0.00001 +P,8,7,30000.0,1.0,0,0.00001 +P,7,6,60000.0,1.0,0,0.00001 +S,9,10 +P,10,11,30000.0,1.0,0,0.00001 +P,11,15,30000.0,1.0,0,0.00001 +P,15,16,40000.0,1.0,0,0.00001 +P,15,14,20000.0,1.0,0,0.00001 +P,14,13,20000.0,1.0,0,0.00001 +P,13,12,30000.0,1.0,0,0.00001 +P,12,11,30000.0,1.0,0,0.00001 +C,16,17 +P,17,18,60000.0,1.0,0,0.00001 +P,18,19,30000.0,1.0,0,0.00001 +P,17,20,30000.0,1.0,0,0.00001 +P,22,21,20000.0,1.0,0,0.00001 +P,21,20,30000.0,1.0,0,0.00001 +S,20,23 +P,23,24,30000.0,1.0,0,0.00001 +P,24,25,30000.0,1.0,0,0.00001 +P,25,26,30000.0,1.0,0,0.00001 +P,24,27,20000.0,1.0,0,0.00001 +P,23,28,30000.0,1.0,0,0.00001 +S,28,29 +P,29,30,60000.0,1.0,0,0.00001 +P,30,31,40000.0,1.0,0,0.00001 +P,31,32,60000.0,1.0,0,0.00001 + diff --git a/networks/MORGEN/day.ini b/networks/MORGEN/day.ini new file mode 100644 index 0000000..dc29a24 --- /dev/null +++ b/networks/MORGEN/day.ini @@ -0,0 +1,8 @@ +T0 = 10.0 +Rs = 530.0 +tH = 84600.0 +cp = 50.0 +up = 50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0|50.0;50.0 +uq = 30;30;30;30|33;30;29;29|28;28;29;28|27;27;28;28|26;27;27;28|25;26;27;27|25;26;26;27|25;25;26;26|26;25;26;26|26;25;27;27|27;26;28;27|27;27;28;27|28;28;29;28|28;28;29;28|27;28;29;28|25;28;28;27|22;25;26;24|20;21;22;21|20;20;20;20|20;21;21;21|20;21;20;21|21;22;20;22|23;22;24;23|27;26;30;29 +ut = 0|3600|7200|10800|14400|18000|21600|25200|28800|32400|36000|39600|43200|46800|50400|54000|57600|61200|64800|68400|72000|75600|79200|82800 + diff --git a/networks/MORGEN/training.ini b/networks/MORGEN/training.ini new file mode 100644 index 0000000..604b2a3 --- /dev/null +++ b/networks/MORGEN/training.ini @@ -0,0 +1,7 @@ +T0 = 10.0 +Rs = 530.0 +tH = 3600.0 +cp = 50.0 +up = 50.0;50.0 +uq = 30.0;30.0;30.0;30.0 +ut = 0 diff --git a/networks/PamBD16.net b/networks/PamBD16.net new file mode 100644 index 0000000..27fabbc --- /dev/null +++ b/networks/PamBD16.net @@ -0,0 +1,7 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,1,2,80000,0.6,0,0.000012 +P,1,3,90000,0.6,0,0.000012 +P,2,3,100000,0.6,0,0.000012 +S,4,1, +S,2,5, +S,3,6, diff --git a/networks/PamBD16/day.ini b/networks/PamBD16/day.ini new file mode 100644 index 0000000..cc7fbae --- /dev/null +++ b/networks/PamBD16/day.ini @@ -0,0 +1,6 @@ +T0 = 20.0 +Rs = 530.0 +tH = 84600.0 +up = 50.0 +uq = 20.0;40.0|30.0;50.0|20.0;40.0|10.0;30.0|20.0;40.0|30.0;50.0|20.0;40.0 +ut = 0|2|6|10|14|18|22 diff --git a/networks/PamBD16/training.ini b/networks/PamBD16/training.ini new file mode 100644 index 0000000..61e65e3 --- /dev/null +++ b/networks/PamBD16/training.ini @@ -0,0 +1,6 @@ +T0 = 20.0 +Rs = 530.0 +tH = 3600.0 +up = 50.0 +uq = 20.0;40.0 +ut = 0 diff --git a/networks/RodS18.net b/networks/RodS18.net new file mode 100644 index 0000000..fdea8ec --- /dev/null +++ b/networks/RodS18.net @@ -0,0 +1,9 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,1,2,64000,0.4,308,0.00001 +P,2,3,1000,0.4,0,0.00001 +P,2,4,12000,0.4,4.5,0.00001 +P,4,5,1000,0.4,0,0.00001 +P,4,6,12000,0.4,4.5,0.00001 +P,6,7,1000,0.4,0,0.00001 +P,6,8,39000,0.4,80,0.00001 + diff --git a/networks/RodS18/training.ini b/networks/RodS18/training.ini new file mode 100644 index 0000000..0ca41ff --- /dev/null +++ b/networks/RodS18/training.ini @@ -0,0 +1,6 @@ +T0 = 16.0 +Rs = 530.0 +tH = 3600.0 +up = 51.55 +uq = 3.5;0.5;0.5;3.5 +ut = 0 diff --git a/networks/comptest.net b/networks/comptest.net new file mode 100644 index 0000000..72028e4 --- /dev/null +++ b/networks/comptest.net @@ -0,0 +1,4 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,1,2,1000.0,1.0,0,0.00015 +C,2,3 +P,3,4,1000.0,1.0,0,0.00015 diff --git a/networks/comptest/training.ini b/networks/comptest/training.ini new file mode 100644 index 0000000..badec87 --- /dev/null +++ b/networks/comptest/training.ini @@ -0,0 +1,7 @@ +T0 = 15.0 +Rs = 530.0 +tH = 3600.0 +cp = 50.0 +up = 40.0 +uq = 30.0 +ut = 0 diff --git a/networks/diamond.net b/networks/diamond.net new file mode 100644 index 0000000..c197aed --- /dev/null +++ b/networks/diamond.net @@ -0,0 +1,10 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +S,1,2 +P,2,3,10000.0,1.0,0,0.0001 +P,3,4,10000.0,1.0,0,0.0001 +P,4,5,10000.0,1.0,0,0.0001 +P,4,6,10000.0,1.0,0,0.0001 +P,3,5,10000.0,1.0,0,0.0001 +P,5,6,10000.0,1.0,0,0.0001 +P,6,7,10000.0,1.0,0,0.0001 +S,7,8 diff --git a/networks/diamond/day.ini b/networks/diamond/day.ini new file mode 100644 index 0000000..28edc73 --- /dev/null +++ b/networks/diamond/day.ini @@ -0,0 +1,6 @@ +T0 = 20.0 +Rs = 530.0 +tH = 84600.0 +up = 80.0 +uq = 100.0|200.0|80.0 +ut = 0|3|18 diff --git a/networks/diamond/training.ini b/networks/diamond/training.ini new file mode 100644 index 0000000..f911aed --- /dev/null +++ b/networks/diamond/training.ini @@ -0,0 +1,6 @@ +T0 = 20.0 +Rs = 530.0 +tH = 3600.0 +up = 80.0 +uq = 100.0 +ut = 0 diff --git a/networks/fork1.net b/networks/fork1.net new file mode 100644 index 0000000..1261728 --- /dev/null +++ b/networks/fork1.net @@ -0,0 +1,7 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,1,2,1000.0,1.0,0,0.0001 +P,2,3,1000.0,1.0,0,0.0001 +P,3,4,1000.0,1.0,0,0.0001 +P,4,5,1000.0,1.0,0,0.0001 +P,3,6,1000.0,1.0,0,0.0001 +P,6,7,1000.0,1.0,0,0.0001 diff --git a/networks/fork1/training.ini b/networks/fork1/training.ini new file mode 100644 index 0000000..ba1cf25 --- /dev/null +++ b/networks/fork1/training.ini @@ -0,0 +1,6 @@ +T0 = 20.0 +Rs = 530.0 +tH = 3600.0 +up = 70.0 +uq = 40.0;2.0 +ut = 0 diff --git a/networks/fork2.net b/networks/fork2.net new file mode 100644 index 0000000..e6dbf5c --- /dev/null +++ b/networks/fork2.net @@ -0,0 +1,7 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,1,2,1000.0,1.0,0,0.00001 +P,2,5,1000.0,1.0,0,0.00001 +P,3,4,1000.0,1.0,0,0.00001 +P,4,5,1000.0,1.0,0,0.00001 +P,5,6,1000.0,1.0,0,0.00001 +P,6,7,1000.0,1.0,0,0.00001 diff --git a/networks/fork2/training.ini b/networks/fork2/training.ini new file mode 100644 index 0000000..5fcce75 --- /dev/null +++ b/networks/fork2/training.ini @@ -0,0 +1,6 @@ +T0 = 20.0 +Rs = 530.0 +tH = 3600.0 +up = 15.0;15.0 +uq = 20.0 +ut = 0 diff --git a/networks/pipeline.net b/networks/pipeline.net new file mode 100644 index 0000000..44ee01d --- /dev/null +++ b/networks/pipeline.net @@ -0,0 +1,2 @@ +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] +P,1,2,100000.0,0.5,0,0.0001 diff --git a/networks/pipeline/day.ini b/networks/pipeline/day.ini new file mode 100644 index 0000000..f456863 --- /dev/null +++ b/networks/pipeline/day.ini @@ -0,0 +1,6 @@ +T0 = 10.0 +Rs = 530.0 +tH = 86400.0 +up = 50.0|50.0 +uq = 21.0|25.0 +ut = 0|3600.0 diff --git a/networks/pipeline/training.ini b/networks/pipeline/training.ini new file mode 100644 index 0000000..4000177 --- /dev/null +++ b/networks/pipeline/training.ini @@ -0,0 +1,6 @@ +T0 = 10.0 +Rs = 530.0 +tH = 3600.0 +up = 50.0 +uq = 21.0 +ut = 0 diff --git a/reductors/bpod_ro.m b/reductors/bpod_ro.m new file mode 100644 index 0000000..819f2d0 --- /dev/null +++ b/reductors/bpod_ro.m @@ -0,0 +1,30 @@ +function ROM = bpod_ro(solver,discrete,scenario,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Structured balanced POD. + + global ODE; + + name = 'Structured Balanced POD (WR + WO)'; + fprintf('%s\n\n',name); + + ODE = @(f,g,t,x0,u,p) solver(setfields(discrete,'C',cmov(numel(g(x0,u(0),p,0)) == numel(x0),1,discrete.C)), ... + setfields(scenario,'ut',u,'T0',p(1),'Rs',p(2)), ... + setfields(config.solver,'x0',x0)).y; + + s = [discrete.nPorts, discrete.nP + discrete.nQ, discrete.nPorts]; + t = [config.solver.dt, scenario.Tf]; + + WR = emgr([],@(x,u,p,t) 1,s,t,'c',config.samples,[0,0,0,1,1,0,0,0,0,0,0,0,0],config.excitation); + WO = emgr([],@(x,u,p,t) 1,s,t,'o',config.samples,[0,0,0,1,1,0,0,0,0,0,0,0,0],config.excitation); + + [LP,~,RP] = bpod(WR(1:discrete.nP,1:discrete.nP),WO(1:discrete.nP,1:discrete.nP),config.rom_max); + [LQ,~,RQ] = bpod(WR(discrete.nP+1:end,discrete.nP+1:end),WO(discrete.nP+1:end,discrete.nP+1:end),config.rom_max); + + ROM = @(n) make_rom(name,discrete,{LP,RP;LQ,RQ},n); + ODE = []; + + fprintf('\n'); +end diff --git a/reductors/dmd_r.m b/reductors/dmd_r.m new file mode 100644 index 0000000..650cb2c --- /dev/null +++ b/reductors/dmd_r.m @@ -0,0 +1,32 @@ +function ROM = dmd_r(solver,discrete,scenario,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Structured dynamic-mode-decomposition-Galerkin. + + global ODE; + + name = 'Structured Dynamic Mode Decomposition Galerkin (WR)'; + fprintf('%s\n\n',name); + + ODE = @(f,g,t,x0,u,p) solver(setfields(discrete,'C',cmov(numel(g(x0,u(0),p,0)) == numel(x0),1,discrete.C)), ... + setfields(scenario,'ut',u,'T0',p(1),'Rs',p(2)), ... + setfields(config.solver,'x0',x0)).y; + + s = [discrete.nPorts, discrete.nP + discrete.nQ, discrete.nPorts]; + t = [config.solver.dt, scenario.Tf]; + + dmd_kernel = @(x,y) blkdiag(dmd(x(1:discrete.nP,:)),dmd(x(discrete.nP+1:end,:))); + + WR = emgr([],@(x,u,p,t) 1,s,t,'c',config.samples,[3,0,0,1,1,0,0,0,0,0,0,0,0],config.excitation,[],[],[],[],dmd_kernel); + + [LP,~,~] = svds(WR(1:discrete.nP,1:discrete.nP),config.rom_max); + + [LQ,~,~] = svds(WR(discrete.nP+1:end,discrete.nP+1:end),config.rom_max); + + ROM = @(n) make_rom(name,discrete,{LP;LQ},n); + ODE = []; + + fprintf('\n'); +end diff --git a/reductors/ebg_ro.m b/reductors/ebg_ro.m new file mode 100644 index 0000000..eda559b --- /dev/null +++ b/reductors/ebg_ro.m @@ -0,0 +1,33 @@ +function ROM = ebg_ro(solver,discrete,scenario,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Structured empirical balanced gains. + + global ODE; + + name = 'Structured Empirical Balanced Gains (WR + WO)'; + fprintf('%s\n\n',name); + + ODE = @(f,g,t,x0,u,p) solver(setfields(discrete,'C',cmov(numel(g(x0,u(0),p,0))==numel(x0),1,discrete.C)), ... + setfields(scenario,'ut',u,'T0',p(1),'Rs',p(2)), ... + setfields(config.solver,'x0',x0)).y; + + s = [discrete.nPorts,discrete.nP+discrete.nQ,discrete.nPorts]; + t = [config.solver.dt,scenario.Tf]; + + WR = emgr([],@(x,u,p,t) 1,s,t,'c',config.samples,[0,0,0,1,1,0,0,0,0,0,0,0,0],config.excitation); + WO = emgr([],@(x,u,p,t) 1,s,t,'o',config.samples,[0,0,0,1,1,0,0,0,0,0,0,0,0],config.excitation); + + [LP,SP,RP] = balro(WR(1:discrete.nP,1:discrete.nP)*WO(1:discrete.nP,1:discrete.nP),config.rom_max); + [LQ,SQ,RQ] = balro(WR(discrete.nP+1:end,discrete.nP+1:end)*WO(discrete.nP+1:end,discrete.nP+1:end),config.rom_max); + + [LP,~,RP] = balgn(LP,SP,RP,discrete.C(:,1:discrete.nP)); + [LQ,~,RQ] = balgn(LQ,SQ,RQ,discrete.C(:,discrete.nP+1:end)); + + ROM = @(n) make_rom(name,discrete,{LP,RP;LQ,RQ},n); + ODE = []; + + fprintf('\n'); +end diff --git a/reductors/ebg_wx.m b/reductors/ebg_wx.m new file mode 100644 index 0000000..a3fa88d --- /dev/null +++ b/reductors/ebg_wx.m @@ -0,0 +1,32 @@ +function ROM = ebg_wx(solver,discrete,scenario,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Structured empirical cross-Gramian-based balanced gains. + + global ODE; + + name = 'Structured Empirical Balanced Gains (WX)'; + fprintf('%s\n\n',name); + + ODE = @(f,g,t,x0,u,p) solver(setfields(discrete,'C',cmov(numel(g(x0,u(0),p,0))==numel(x0),1,discrete.C)), ... + setfields(scenario,'ut',u,'T0',p(1),'Rs',p(2)), ... + setfields(config.solver,'x0',x0)).y; + + s = [discrete.nPorts,discrete.nP+discrete.nQ,discrete.nPorts]; + t = [config.solver.dt,scenario.Tf]; + + WX = emgr([],@(x,u,p,t) 1,s,t,'x',config.samples,[0,0,0,1,1,0,0,0,0,0,0,0,0],config.excitation); + + [LP,SP,RP] = balro(WX(1:discrete.nP,1:discrete.nP),config.rom_max); + [LQ,SQ,RQ] = balro(WX(discrete.nP+1:end,discrete.nP+1:end),config.rom_max); + + [LP,~,RP] = balgn(LP,SP,RP,discrete.C(:,1:discrete.nP)); + [LQ,~,RQ] = balgn(LQ,SQ,RQ,discrete.C(:,discrete.nP+1:end)); + + ROM = @(n) make_rom(name,discrete,{LP,RP;LQ,RQ},n); + ODE = []; + + fprintf('\n'); +end diff --git a/reductors/ebg_wz.m b/reductors/ebg_wz.m new file mode 100644 index 0000000..a76830d --- /dev/null +++ b/reductors/ebg_wz.m @@ -0,0 +1,32 @@ +function ROM = ebg_wz(solver,discrete,scenario,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Structured empirical non-symmetric-cross-Gramian-based balanced gains. + + global ODE; + + name = 'Structured Empirical Balanced Gains (WZ)'; + fprintf('%s\n\n',name); + + ODE = @(f,g,t,x0,u,p) solver(setfields(discrete,'C',cmov(numel(g(x0,u(0),p,0))==numel(x0),1,discrete.C)), ... + setfields(scenario,'ut',u,'T0',p(1),'Rs',p(2)), ... + setfields(config.solver,'x0',x0)).y; + + s = [discrete.nPorts,discrete.nP+discrete.nQ,discrete.nPorts]; + t = [config.solver.dt,scenario.Tf]; + + WZ = emgr([],@(x,u,p,t) 1,s,t,'x',config.samples,[0,0,0,1,1,0,1,0,0,0,0,0,0],config.excitation); + + [LP,SP,RP] = balro(WZ(1:discrete.nP,1:discrete.nP),config.rom_max); + [LQ,SQ,RQ] = balro(WZ(discrete.nP+1:end,discrete.nP+1:end),config.rom_max); + + [LP,~,RP] = balgn(LP,SP,RP,discrete.C(:,1:discrete.nP)); + [LQ,~,RQ] = balgn(LQ,SQ,RQ,discrete.C(:,discrete.nP+1:end)); + + ROM = @(n) make_rom(name,discrete,{LP,RP;LQ,RQ},n); + ODE = []; + + fprintf('\n'); +end diff --git a/reductors/ebt_ro.m b/reductors/ebt_ro.m new file mode 100644 index 0000000..6bb67a3 --- /dev/null +++ b/reductors/ebt_ro.m @@ -0,0 +1,30 @@ +function ROM = ebt_ro(solver,discrete,scenario,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Structured empirical balanced truncation. + + global ODE; + + name = 'Structured Empirical Balanced Truncation (WR + WO)'; + fprintf('%s\n\n',name); + + ODE = @(f,g,t,x0,u,p) solver(setfields(discrete,'C',cmov(numel(g(x0,u(0),p,0))==numel(x0),1,discrete.C)), ... + setfields(scenario,'ut',u,'T0',p(1),'Rs',p(2)), ... + setfields(config.solver,'x0',x0)).y; + + s = [discrete.nPorts,discrete.nP+discrete.nQ,discrete.nPorts]; + t = [config.solver.dt,scenario.Tf]; + + WR = emgr([],@(x,u,p,t) 1,s,t,'c',config.samples,[0,0,0,1,1,0,0,0,0,0,0,0,0],config.excitation); + WO = emgr([],@(x,u,p,t) 1,s,t,'o',config.samples,[0,0,0,1,1,0,0,0,0,0,0,0,0],config.excitation); + + [LP,~,RP] = balro(WR(1:discrete.nP,1:discrete.nP)*WO(1:discrete.nP,1:discrete.nP),config.rom_max); + [LQ,~,RQ] = balro(WR(discrete.nP+1:end,discrete.nP+1:end)*WO(discrete.nP+1:end,discrete.nP+1:end),config.rom_max); + + ROM = @(n) make_rom(name,discrete,{LP,RP;LQ,RQ},n); + ODE = []; + + fprintf('\n'); +end diff --git a/reductors/ebt_wx.m b/reductors/ebt_wx.m new file mode 100644 index 0000000..4d2062a --- /dev/null +++ b/reductors/ebt_wx.m @@ -0,0 +1,29 @@ +function ROM = ebt_wx(solver,discrete,scenario,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Structured empirical cross-Gramian-based balanced truncation. + + global ODE; + + name = 'Structured Empirical Balanced Truncation (WX)'; + fprintf('%s\n\n',name); + + ODE = @(f,g,t,x0,u,p) solver(setfields(discrete,'C',cmov(numel(g(x0,u(0),p,0))==numel(x0),1,discrete.C)), ... + setfields(scenario,'ut',u,'T0',p(1),'Rs',p(2)), ... + setfields(config.solver,'x0',x0)).y; + + s = [discrete.nPorts,discrete.nP+discrete.nQ,discrete.nPorts]; + t = [config.solver.dt,scenario.Tf]; + + WX = emgr([],@(x,u,p,t) 1,s,t,'x',config.samples,[0,0,0,1,1,0,0,0,0,0,0,0,0],config.excitation); + + [LP,~,RP] = balro(WX(1:discrete.nP,1:discrete.nP),config.rom_max); + [LQ,~,RQ] = balro(WX(discrete.nP+1:end,discrete.nP+1:end),config.rom_max); + + ROM = @(n) make_rom(name,discrete,{LP,RP;LQ,RQ},n); + ODE = []; + + fprintf('\n'); +end diff --git a/reductors/ebt_wz.m b/reductors/ebt_wz.m new file mode 100644 index 0000000..5d234d5 --- /dev/null +++ b/reductors/ebt_wz.m @@ -0,0 +1,29 @@ +function ROM = ebt_wz(solver,discrete,scenario,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Structured empirical non-symmetric-cross-Gramian-based balanced truncation. + + global ODE; + + name = 'Structured Empirical Balanced Truncation (WZ)'; + fprintf('%s\n\n',name); + + ODE = @(f,g,t,x0,u,p) solver(setfields(discrete,'C',cmov(numel(g(x0,u(0),p,0))==numel(x0),1,discrete.C)), ... + setfields(scenario,'ut',u,'T0',p(1),'Rs',p(2)), ... + setfields(config.solver,'x0',x0)).y; + + s = [discrete.nPorts,discrete.nP+discrete.nQ,discrete.nPorts]; + t = [config.solver.dt,scenario.Tf]; + + WZ = emgr([],@(x,u,p,t) 1,s,t,'x',config.samples,[0,0,0,1,1,0,1,0,0,0,0,0,0],config.excitation); + + [LP,~,RP] = balro(WZ(1:discrete.nP,1:discrete.nP),config.rom_max); + [LQ,~,RQ] = balro(WZ(discrete.nP+1:end,discrete.nP+1:end),config.rom_max); + + ROM = @(n) make_rom(name,discrete,{LP,RP;LQ,RQ},n); + ODE = []; + + fprintf('\n'); +end diff --git a/reductors/eds_ro.m b/reductors/eds_ro.m new file mode 100644 index 0000000..d448deb --- /dev/null +++ b/reductors/eds_ro.m @@ -0,0 +1,35 @@ +function ROM = eds_ro(solver,discrete,scenario,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Structured empirical dominant subspaces. + + global ODE; + + name = 'Structured Empirical Dominant Subspaces (WR + WO)'; + fprintf('%s\n\n',name); + + ODE = @(f,g,t,x0,u,p) solver(setfields(discrete,'C',cmov(numel(g(x0,u(0),p,0)) == numel(x0),1,discrete.C)), ... + setfields(scenario,'ut',u,'T0',p(1),'Rs',p(2)), ... + setfields(config.solver,'x0',x0)).y; + + s = [discrete.nPorts, discrete.nP + discrete.nQ, discrete.nPorts]; + t = [config.solver.dt, scenario.Tf]; + + WR = emgr([],@(x,u,p,t) 1,s,t,'c',config.samples,[0,0,0,1,1,0,0,0,0,0,0,0,0],config.excitation,[],[],[],[]); + WO = emgr([],@(x,u,p,t) 1,s,t,'o',config.samples,[0,0,0,1,1,0,0,0,0,0,0,0,0],config.excitation,[],[],[],[]); + + [uc,sc,~] = svds(WR(1:discrete.nP,1:discrete.nP),config.rom_max); + [uo,so,~] = svds(WO(1:discrete.nP,1:discrete.nP),config.rom_max); + [LP,~,~] = svds([uc.*(diag(sc)./norm(sc))',uo.*(diag(so)./norm(so))'],config.rom_max); + + [uc,sc,~] = svds(WR(discrete.nP+1:end,discrete.nP+1:end),config.rom_max); + [uo,so,~] = svds(WO(discrete.nP+1:end,discrete.nP+1:end),config.rom_max); + [LQ,~,~] = svds([uc.*(diag(sc)./norm(sc))',uo.*(diag(so)./norm(so))'],config.rom_max); + + ROM = @(n) make_rom(name,discrete,{LP;LQ},n); + ODE = []; + + fprintf('\n'); +end diff --git a/reductors/eds_wx.m b/reductors/eds_wx.m new file mode 100644 index 0000000..5d5436d --- /dev/null +++ b/reductors/eds_wx.m @@ -0,0 +1,32 @@ +function ROM = eds_wx(solver,discrete,scenario,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Structured empirical cross-Gramian-based dominant subspaces. + + global ODE; + + name = 'Structured Empirical Dominant Subspaces (WX)'; + fprintf('%s\n\n',name); + + ODE = @(f,g,t,x0,u,p) solver(setfields(discrete,'C',cmov(numel(g(x0,u(0),p,0)) == numel(x0),1,discrete.C)), ... + setfields(scenario,'ut',u,'T0',p(1),'Rs',p(2)), ... + setfields(config.solver,'x0',x0)).y; + + s = [discrete.nPorts, discrete.nP + discrete.nQ, discrete.nPorts]; + t = [config.solver.dt, scenario.Tf]; + + WX = emgr([],@(x,u,p,t) 1,s,t,'x',config.samples,[0,0,0,1,1,0,0,0,0,0,0,0,0],config.excitation,[],[],[],[]); + + [ux,dx,vx] = svds(WX(1:discrete.nP,1:discrete.nP),config.rom_max); + [LP,~,~] = svds([ux.*diag(dx)',vx.*diag(dx)'],config.rom_max); + + [ux,dx,vx] = svds(WX(discrete.nP+1:end,discrete.nP+1:end),config.rom_max); + [LQ,~,~] = svds([ux.*diag(dx)',vx.*diag(dx)'],config.rom_max); + + ROM = @(n) make_rom(name,discrete,{LP;LQ},n); + ODE = []; + + fprintf('\n'); +end diff --git a/reductors/eds_wz.m b/reductors/eds_wz.m new file mode 100644 index 0000000..613bb56 --- /dev/null +++ b/reductors/eds_wz.m @@ -0,0 +1,32 @@ +function ROM = eds_wz(solver,discrete,scenario,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Structured empirical non-symmetric-cross-Gramian-based dominant subspaces. + + global ODE; + + name = 'Structured Empirical Dominant Subspaces (WZ)'; + fprintf('%s\n\n',name); + + ODE = @(f,g,t,x0,u,p) solver(setfields(discrete,'C',cmov(numel(g(x0,u(0),p,0)) == numel(x0),1,discrete.C)), ... + setfields(scenario,'ut',u,'T0',p(1),'Rs',p(2)), ... + setfields(config.solver,'x0',x0)).y; + + s = [discrete.nPorts, discrete.nP + discrete.nQ, discrete.nPorts]; + t = [config.solver.dt, scenario.Tf]; + + WZ = emgr([],@(x,u,p,t) 1,s,t,'x',config.samples,[0,0,0,1,1,0,1,0,0,0,0,0,0],config.excitation,[],[],[],[]); + + [uz,dz,vz] = svds(WZ(1:discrete.nP,1:discrete.nP),config.rom_max); + [LP,~,~] = svds([uz.*diag(dz)',vz.*diag(dz)'],config.rom_max); + + [uz,dz,vz] = svds(WZ(discrete.nP+1:end,discrete.nP+1:end),config.rom_max); + [LQ,~,~] = svds([uz.*diag(dz)',vz.*diag(dz)'],config.rom_max); + + ROM = @(n) make_rom(name,discrete,{LP;LQ},n); + ODE = []; + + fprintf('\n'); +end diff --git a/reductors/pod_r.m b/reductors/pod_r.m new file mode 100644 index 0000000..0c66f35 --- /dev/null +++ b/reductors/pod_r.m @@ -0,0 +1,30 @@ +function ROM = pod_r(solver,discrete,scenario,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Structured proper orthogonal decomposition. + + global ODE; + + name = 'Structured Proper Orthogonal Decomposition (WR)'; + fprintf('%s\n\n',name); + + ODE = @(f,g,t,x0,u,p) solver(setfields(discrete,'C',cmov(numel(g(x0,u(0),p,0)) == numel(x0),1,discrete.C)), ... + setfields(scenario,'ut',u,'T0',p(1),'Rs',p(2)), ... + setfields(config.solver,'x0',x0)).y; + + s = [discrete.nPorts, discrete.nP + discrete.nQ, discrete.nPorts]; + t = [config.solver.dt, scenario.Tf]; + + WR = emgr([],@(x,u,p,t) 1,s,t,'c',config.samples,[0,0,0,1,1,0,0,0,0,0,0,0,0],config.excitation,[],[],[],[]); + + [LP,~,~] = svds(WR(1:discrete.nP,1:discrete.nP),config.rom_max); + + [LQ,~,~] = svds(WR(discrete.nP+1:end,discrete.nP+1:end),config.rom_max); + + ROM = @(n) make_rom(name,discrete,{LP;LQ},n); + ODE = []; + + fprintf('\n'); +end diff --git a/reductors/private/balgn.m b/reductors/private/balgn.m new file mode 100644 index 0000000..be4d78b --- /dev/null +++ b/reductors/private/balgn.m @@ -0,0 +1,14 @@ +function [TL,D,TR] = balgn(tl,hs,tr,cb) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Simplified balanced gains. + + D = sum((cb * tl).^2,1)' .* hs(:); + + [D,ix] = sort(D,'descend'); + + TL = tl(:,ix); + TR = tr(:,ix); +end diff --git a/reductors/private/balro.m b/reductors/private/balro.m new file mode 100644 index 0000000..ceef43c --- /dev/null +++ b/reductors/private/balro.m @@ -0,0 +1,20 @@ +function [TL,HSV,TR] = balro(W,r) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Balance one or product of two system gramians. + + [VR,DR] = eigs(W,min(size(W,1),r)); + [VL,DL] = eigs(W',min(size(W,2),r)); + + VR = VR .* sqrt(abs(diag(DR)))'; + VL = VL .* sqrt(abs(diag(DL)))'; + + [U,D,V] = svd(VL' * VR); + HSV = diag(D); + D = sqrt(HSV)'; + TL = real(VL * (U ./ D)); + TR = real(VR * (V ./ D)); +end + diff --git a/reductors/private/bpod.m b/reductors/private/bpod.m new file mode 100644 index 0000000..5c0a28a --- /dev/null +++ b/reductors/private/bpod.m @@ -0,0 +1,20 @@ +function [TL,HSV,TR] = bpod(WR,WO,r) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Approximately balance two system gramians. + + [VR,DR] = eigs(WR,min(size(WR,1),r)); + [VL,DL] = eigs(WO,min(size(WO,2),r)); + + VR = VR .* sqrt(abs(diag(DR)))'; + VL = VL .* sqrt(abs(diag(DL)))'; + + [U,D,V] = svd(VL' * VR); + HSV = diag(D); + D = sqrt(HSV)'; + TL = real(VL * (U ./ D)); + TR = real(VR * (V ./ D)); +end + diff --git a/reductors/private/dmd.m b/reductors/private/dmd.m new file mode 100644 index 0000000..d0601b0 --- /dev/null +++ b/reductors/private/dmd.m @@ -0,0 +1,15 @@ +function A = dmd(X) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Dynamic mode decomposition with scaling. + + s = 1.0 ./ max(eps,vecnorm(X(:,2:end),2,1)); + + [U0,D0,V0] = svd(X(:,1:end-1).*s,'econ'); + + D0 = diag(D0); + + A = (X(:,2:end).*s) * (V0 ./ D0') * U0'; +end diff --git a/reductors/private/emgr.m b/reductors/private/emgr.m new file mode 100644 index 0000000..7451e01 --- /dev/null +++ b/reductors/private/emgr.m @@ -0,0 +1,598 @@ +function W = emgr(f,g,s,t,w,pr,nf,ut,us,xs,um,xm,dp) +%% emgr - EMpirical GRamian Framework +% +% project: emgr ( https://gramian.de ) +% version: 5.8 (2020-05-01) +% authors: C. Himpe (0000-0003-2194-6754) +% license: BSD-2-Clause (opensource.org/licenses/BSD-2-Clause) +% summary: Empirical system Gramians for (nonlinear) input-output systems. +% +% DESCRIPTION: +% +% Empirical gramian matrix and empirical covariance matrix computation +% for model reduction, decentralized control, nonlinearity quantification, +% sensitivity analysis, parameter identification, uncertainty quantification & +% combined state and parameter reduction of large-scale input-output systems. +% Data-driven analysis of input-output coherence and system-gramian-based +% nonlinear model order reduction. Compatible with OCTAVE and MATLAB. +% +% ALGORITHM: +% +% C. Himpe (2018). emgr - The Empirical Gramian Framework. Algorithms 11(7):91 +% +% +% USAGE: +% +% W = emgr(f,g,s,t,w,[pr],[nf],[ut],[us],[xs],[um],[xm],[dp]) +% +% MANDATORY ARGUMENTS: +% +% f {handle} vector field: x' = f(x,u,p,t) +% g {handle} output functional: y = g(x,u,p,t) +% s {vector} system dimensions: [inputs, states, outputs] +% t {vector} time discretization: [time-step, time-horizon] +% w {char} empirical gramian type: +% * 'c' empirical controllability gramian (Wc) +% * 'o' empirical observability gramian (Wo) +% * 'x' empirical cross gramian (Wx aka Wco) +% * 'y' empirical linear cross gramian (Wy) +% * 's' empirical sensitivity gramian (Ws) +% * 'i' empirical identifiability gramian (Wi) +% * 'j' empirical joint gramian (Wj) +% +% OPTIONAL ARGUMENTS: +% +% pr {matrix|0} parameter vector(s), each column is one parameter sample +% nf {vector|0} option flags, thirteen component vector, default all zero: +% * centering: none(0), steady(1), last(2), mean(3), rms(4), midrange(5) +% * input scales: single(0), linear(1), geometric(2), log(3), sparse(4) +% * state scales: single(0), linear(1), geometric(2), log(3), sparse(4) +% * input rotations: unit(0), single(1) +% * state rotations: unit(0), single(1) +% * normalization (only: Wc, Wo, Wx, Wy): none(0), steady(1), Jacobi(2) +% * state gramian variant: +% * controllability gramian type (only: Wc): regular(0), output(1) +% * observability gramian type (only: Wo, Wi): regular(0), averaged(1) +% * cross gramian type (only: Wx, Wy, Wj): regular(0), non-symmetric(1) +% * extra input (only: Wo, Wx, Ws, Wi, Wj): none(0), yes(1) +% * parameter centering (only: Ws, Wi, Wj): none(0), linear(1), log(2) +% * parameter gramian variant: +% * averaging type (only: Ws): input-state(0), input-output(1) +% * Schur-complement (only: Wi, Wj): approx(0), coarse(1) +% * cross gramian partition size (only: Wx, Wj): full(0), partitioned(0) +% * weighting: none(0), time-linear(1), time-squared(2), state(3), scale(4) +% ut {handle|'i'} input function: u_t = ut(t) or character: +% * 'i' delta impulse input +% * 's' step input / load vector / source term +% * 'c' decaying exponential chirp input +% * 'a' sinc (cardinal sine) input +% * 'r' pseudo-random binary input +% us {vector|0} steady-state input (1 or M rows) +% xs {vector|0} steady-state and nominal initial state x_0 (1 or N rows) +% um {matrix|1} input scales (1 or M rows) +% xm {matrix|1} initial-state scales (1 or N rows) +% dp {handle|@mtimes} inner product or kernel: xy = dp(x,y) +% +% RETURNS: +% +% W {matrix} State-space Gramian Matrix (for: Wc, Wo, Wx, Wy) +% W {cell} [State, Parameter]-space Gramian (for: Ws, Wi, Wj) +% +% CITE AS: +% +% C. Himpe (2020). emgr - EMpirical GRamian Framework (Version 5.8) +% [Software]. Available from https://gramian.de . doi:10.5281/zenodo.3779889 +% +% KEYWORDS: +% +% model reduction, system gramians, empirical gramians, cross gramian, MOR +% +% SEE ALSO: gram (Control System Toolbox) +% +% COPYRIGHT: Christian Himpe +% +% For more information, see: + + % Integrator Handle (for custom solvers) + global ODE; + if not(isa(ODE,'function_handle')), ODE = @ssp2; end%if + + % Version Info (use also to export integrator handle) + if isequal(f,'version'), W = 5.8; return; end%if + + % Default Arguments + if (nargin < 6) || isempty(pr), pr = 0.0; end%if + if (nargin < 7) || isempty(nf), nf = 0.0; end%if + if (nargin < 8) || isempty(ut), ut = 'i'; end%if + if (nargin < 9) || isempty(us), us = 0.0; end%if + if (nargin < 10) || isempty(xs), xs = 0.0; end%if + if (nargin < 11) || isempty(um), um = 1.0; end%if + if (nargin < 12) || isempty(xm), xm = 1.0; end%if + if (nargin < 13) || isempty(dp), dp = @mtimes; end%if + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% SETUP + + % System Dimensions + M = s(1); % Number of inputs + N = s(2); % Number of states + Q = s(3); % Number of outputs + P = size(pr,1); % Dimension of parameter + K = size(pr,2); % Number of parameter-samples + + % Time Discretization + dt = t(1); % Time-step width + Tf = t(2); % Time horizon + nt = floor(Tf / dt) + 1; % Number of time-steps plus initial value + + % Force lower-case Gramian type + w = lower(w); + + % Lazy Output Functional + if isnumeric(g) && isequal(g,1), g = @id; Q = N; end%if + + % Pad Configuration Flag Vector + nf(end + 1:13) = 0; + + % Built-in Input Functions + if not(isa(ut,'function_handle')) + + switch lower(ut) + case 's' % Step Input + ut = @(t) 1.0; + + case 'c' % Chirp Input + a0 = (2.0 * pi) / (4.0 * dt) * Tf / log(4.0 * (dt / Tf)); + b0 = (4.0 * (dt / Tf)) ^ (1.0 / Tf); + ut = @(t) 0.5 * cos(a0 * (b0 ^ t - 1.0)) + 0.5; + + case 'a' % Sinc Input + ut = @(t) sin(t / dt) / ((t / dt) + (t==0)); + + case 'r' % Binary Input + rt = randi([0,1],1,nt); + ut = @(t) rt(:,floor(t / dt) + 1); + + otherwise % Impulse Input + ut = @(t) (t <= dt) / dt; + end%switch + end%if + + % Lazy Optional Arguments + if isscalar(us), us = repmat(us,M,1); end%if + if isscalar(xs), xs = repmat(xs,N,1); end%if + if isscalar(um), um = repmat(um,M,1); end%if + if isscalar(xm), xm = repmat(xm,N,1); end%if + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% CONFIGURATION + + % Trajectory Weighting + switch nf(13) + case 1 % Linear time-weighting + wei = @(m) sqrt(0:dt:Tf); + + case 2 % Quadratic time-weighting + wei = @(m) (0:dt:Tf) * sqrt(0.5); + + case 3 % State-weighting + wei = @(m) vecnorm(m,2,1); + + case 4 % Scale-weighting + wei = @(m) 1.0 ./ max(eps,vecnorm(m,Inf,2)); + + otherwise % None + wei = @(m) 1.0; + end%switch + + % Trajectory Centering + switch nf(1) + case 1 % Steady state / output + avg = @(m,s) s; + + case 2 % Final state / output + avg = @(m,s) m(:,end); + + case 3 % Temporal mean of state / output + avg = @(m,s) mean(m,2); + + case 4 % Temporal root-mean-square of state / output + avg = @(m,s) sqrt(mean(m .* m,2)); + + case 5 % Temporal mid-range of state / output + avg = @(m,s) 0.5 * (max(m,[],2) + min(m,[],2)); + + otherwise % None + avg = @(m,s) 0; + end%switch + + % Gramian Normalization + if nf(6) + + TX = xs; % Steady-state preconditioner + + if isequal(nf(6),2) % Jacobi-type preconditioner + + NF = nf; + NF(6) = 0; + if isequal(w,'c') || isequal(w,'s'), NF(7) = 0; end%if + WN = w; + if isequal(w,'s'), WN = 'c'; end%if + if isequal(w,'i'), WN = 'o'; end%if + if isequal(w,'j'), WN = 'x'; end%if + PR = mean(pr,2); + DP = @(x,y) sum(x .* y',2); % Diagonal-only pseudo-kernel + TX = sqrt(abs(emgr(f,g,s,t,WN,PR,NF,ut,us,xs,um,xm,DP))); + end%if + + TX(abs(TX) < (8*eps)) = 1.0; + if isequal(w,'y'), tx = TX; else, tx = 1.0; end%if + f = @(x,u,p,t) f(TX .* x,u,p,t) ./ TX; + g = @(x,u,p,t) g(TX .* x,u,p,t) ./ tx; + xs = xs ./ TX; + nf(6) = 0; + end%if + + % Non-symmetric cross Gramian and average observability Gramian + if nf(7), R = 1; else, R = Q; end%if + + % Extra input for control explicit observability + if nf(8), up = @(t) us + ut(t); else, up = @(t) us; end%if + + % Scale Sampling + if isequal(size(um,2),1), um = um * scales(nf(2),nf(4)); end%if + if isequal(size(xm,2),1), vm = xm(1:Q) * scales(nf(2),nf(4)); end%if + if isequal(size(xm,2),1), xm = xm * scales(nf(3),nf(5)); end%if + + A = size(xm,1); % Number of total states (regular plus augmented) + C = size(um,2); % Number of input scales sets + D = size(xm,2); % Number of state scales sets + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% GRAMIAN COMPUTATION + + switch w % Empirical system gramian types + + % Common Layout: + % For each {parameter, scale, input/state/parameter component}: + % Perturb, simulate, weight, center, normalize, accumulate + % Parameter gramians call state gramians + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Empirical Controllability Gramian + + case 'c' + + W = 0; % Initialize gramian variable + for k = 1:K + for c = 1:C + for m = find(um(:,c))' % parfor + em = sparse(m,1,um(m,c),M + P,1); + umc = @(t) up(t) + ut(t) .* em(1:M); + pmc = pr(:,k) + em(M + 1:end); + if nf(7) % Output controllability gramian + x = ODE(f,g,t,xs,umc,pmc); + else % Regular controllability gramian + x = ODE(f,@id,t,xs,umc,pmc); + end%if + x = x .* wei(x); + x = x - avg(x,xs); + x = x ./ um(m,c); + W = W + dp(x,x'); + end%for + end%for + end%for + W = W * (dt / (C * K)); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Empirical Observability Gramian + + case 'o' + + W = 0; % Initialize gramian variable + o = zeros(R*nt, A); % Pre-allocate observability matrix + for k = 1:K + for d = 1:D + for n = find(xm(:,d))' % parfor + en = sparse(n,1,xm(n,d),N + P,1); + xnd = xs + en(1:N); + pnd = pr(:,k) + en(N + 1:end); + y = ODE(f,g,t,xnd,up,pnd); + y = y .* wei(y); + y = y - avg(y,g(xs,us,pnd,0)); + y = y ./ xm(n,d); + if nf(7) % Average observability gramian + o(:,n) = sum(y,1)'; + else % Regular observability gramian + o(:,n) = y(:); + end%if + end%for + W = W + dp(o',o); + end%for + end%for + W = W * (dt / (D * K)); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Empirical Cross Gramian + + case 'x' + + assert(isequal(M,Q) || nf(7),' emgr: non-square system!'); + + i0 = 1; % Start column index + i1 = A; % Final column index + + % Partitioned cross gramian + if nf(11) > 0 + sp = round(nf(11)); % Partition size + ip = round(nf(12)); % Partition index + i0 = i0 + (ip - 1) * sp; + i1 = min(i0 + sp - 1,N); + if i0 > N + i0 = i0 - (ceil(N / sp) * sp - N); + i1 = min(i0 + sp - 1,A); + end%if + + if (ip < 1) || (i0 > i1) || (i0 < 0), W = 0; return; end%if + end%if + + W = 0; % Initialize gramian variable + o = zeros(nt, i1-i0+1, R); % Pre-allocate observability 3-tensor + for k = 1:K + for d = 1:D + for n = find(xm(i0:i1,d))' + en = sparse(i0-1+n,1,xm(i0-1+n,d),N+P,1); + xnd = xs + en(1:N); + pnd = pr(:,k) + en(N + 1:end); + y = ODE(f,g,t,xnd,up,pnd); + y = y .* wei(y); + y = y - avg(y,g(xs,us,pnd,0)); + y = y ./ xm(i0 - 1 + n,d); + if nf(7) % Non-symmetric cross gramian + o(:,n,1) = sum(y,1)'; + else % Regular cross gramian + o(:,n,:) = y'; + end%if + end%for + for c = 1:C % parfor + for m = find(um(:,c))' + em = sparse(m,1,um(m,c),M,1); + umc = @(t) us + ut(t) .* em; + x = ODE(f,@id,t,xs,umc,pr(:,k)); + x = x .* wei(x); + x = x - avg(x,xs); + x = x ./ um(m,c); + if nf(7) % Non-symmetric cross gramian + W = W + dp(x,o(:,:,1)); + else % Regular cross gramian + W = W + dp(x,o(:,:,m)); + end%if + end%for + end%for + end%for + end%for + W = W * (dt / (C * D * K)); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Empirical Linear Cross Gramian + + case 'y' + + assert(isequal(M,Q) || nf(7),' emgr: non-square system!'); + assert(isequal(C,size(vm,2)),' emgr: scale count mismatch!'); + + W = 0; % Initialize gramian variable + a = cell(1,R); % Initialize adjoint cache + a{1} = zeros(N,nt); % Pre-allocate accumulator + for k = 1:K + for c = 1:C + for q = find(vm(:,c))' + em = sparse(q,1,vm(q,c),Q,1); + vqc = @(t) us + ut(t) .* em; + z = ODE(g,@id,t,xs,vqc,pr(:,k)); + z = z .* wei(z); + z = z - avg(z,xs); + z = z ./ vm(q,c); + if nf(7) % Non-symmetric cross gramian + a{1} = a{1} + z; + else % Regular cross gramian + a{q} = z; + end%if + end%for + for m = find(um(:,c))' % parfor + em = sparse(m,1,um(m,c),M,1); + umc = @(t) us + ut(t) .* em; + x = ODE(f,@id,t,xs,umc,pr(:,k)); + x = x .* wei(x); + x = x - avg(x,xs); + x = x ./ um(m,c); + if nf(7) % Non-symmetric cross gramian + W = W + dp(x,a{1}'); + else % Regular cross gramian + W = W + dp(x,a{m}'); + end%if + end%for + end%for + end%for + W = W * (dt / (C * K)); + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Empirical Sensitivity Gramian + + case 's' + + % Controllability gramian + [pr,pm] = pscales(pr,nf(9),C); + W{1} = emgr(f,g,s,t,'c',pr,nf,ut,us,xs,um,xm,dp); + + if not(nf(10)) % Input-state sensitivty gramian + DP = @(x,y) sum(sum(x .* y')); % Trace pseudo-kernel + else % Input-output sensitivity gramian + DP = @(x,y) sum(reshape(y,R,[])); % Custom pseudo-kernel + Y = emgr(f,g,s,t,'o',pr,nf,ut,us,xs,um,xm,DP); + DP = @(x,y) abs(sum(y(:) .* Y(:))); % Custom pseudo-kernel + end%if + + V = zeros(P,1); + for p = 1:P % parfor + pmp = sparse(M + p,1:C,pm(p,:),M + P,C); + V(p) = emgr(f,g,s,t,'c',pr,nf,ut,us,xs,pmp,xm,DP); + end%for + W{2} = V; % (Diagonal) Sensitivity gramian + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Empirical Identifiability Gramian + + case 'i' + + % Augmented observability gramian + [pr,pm] = pscales(pr,nf(9),D); + V = emgr(f,g,s,t,'o',pr,nf,ut,us,xs,um,[xm;pm],dp); + + W{1} = V(1:N, 1:N); % Observability gramian + WM = V(1:N, N+1:N+P); % Mixed block + + % Identifiability gramian + if not(nf(10)) % Schur-complement via approximate inverse + W{2} = V(N+1:N+P, N+1:N+P) - (WM' * ainv(W{1}) * WM); + else % Coarse Schur-complement via zero + W{2} = V(N+1:N+P, N+1:N+P); + end%if + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Empirical Joint Gramian + + case 'j' + + % Joint gramian + [pr,pm] = pscales(pr,nf(9),D); + V = emgr(f,g,s,t,'x',pr,nf,ut,us,xs,um,[xm;pm],dp); + + % Joint gramian partition + if nf(11), W = V; return; end%if + + W{1} = V(1:N, 1:N); % Cross gramian + WM = V(1:N, N+1:N+P); % Mixed block + + % Cross-identifiability gramian + if not(nf(10)) % Schur-complement via approximate inverse + W{2} = 0.5 * (WM' * ainv(W{1} + W{1}') * WM); + else % Coarse Schur-complement via identity + W{2} = 0.5 * (WM' * WM); + end%if + + otherwise + + error(' emgr: unknown empirical gramian type!'); + end%switch +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTION: scales + +function s = scales(nf1,nf2) +% summary: Input and initial state perturbation scales + + switch nf1 + case 1 % Linear + s = [0.25, 0.50, 0.75, 1.0]; + + case 2 % Geometric + s = [0.125, 0.25, 0.5, 1.0]; + + case 3 % Logarithmic + s = [0.001, 0.01, 0.1, 1.0]; + + case 4 % Sparse + s = [0.01, 0.50, 0.99, 1.0]; + + otherwise % One + s = 1.0; + end%switch + + if isequal(nf2,0), s = [-s,s]; end%if +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTION: pscales + +function [pr,pm] = pscales(p,nf,ns) +% summary: Parameter perturbation scales + + assert(size(p,2) >= 2,' emgr: min and max parameter required!'); + + [pmin,pmax] = bounds(p,2); + + switch nf + case 1 % Linear centering and scaling + pr = 0.5 * (pmax + pmin); + pm = (pmax - pmin) * linspace(0,1.0,ns) + (pmin - pr); + + case 2 % Logarithmic centering and scaling + lmin = log(pmin); + lmax = log(pmax); + pr = real(exp(0.5 * (lmax + lmin))); + pm = real(exp((lmax - lmin) * linspace(0,1.0,ns) + lmin)) - pr; + + otherwise % No centering and linear scaling + pr = pmin; + pm = (pmax - pmin) * linspace(1.0 / ns,1.0,ns); + end%switch +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTION: id + +function x = id(x,u,p,t) +% summary: (Output) identity functional + +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTION: ainv + +function x = ainv(m) +% summary: Quadratic complexity approximate inverse matrix + + % Based on truncated Neumann series: X = D^-1 - D^-1 (M - D) D^-1 + D = diag(m); + k = find(abs(D) > sqrt(eps)); + D(k) = 1.0 ./ D(k); + x = m .* (-D); + x = x .* (D'); + x(1:numel(D) + 1:end) = D; +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTION: ssp2 + +function y = ssp2(f,g,t,x0,u,p) +% summary: Low-Storage Strong-Stability-Preserving Second-Order Runge-Kutta + + global STAGES; % Configurable number of stages for enhanced stability + if not(isscalar(STAGES)), STAGES = 3; end%if + + dt = t(1); + nt = floor(t(2) / dt) + 1; + + y0 = g(x0,u(0),p,0); + y = zeros(numel(y0),nt); % Pre-allocate trajectory + y(:,1) = y0; + + xk1 = x0; + xk2 = x0; + for k = 2:nt + tk = (k - 1.5) * dt; + uk = u(tk); + for s = 1:(STAGES - 1) + xk1 = xk1 + (dt / (STAGES - 1)) * f(xk1,uk,p,tk); + end%for + xk2 = xk2 + dt * f(xk1,uk,p,tk); + xk2 = xk2 / STAGES; + xk2 = xk2 + xk1 * ((STAGES - 1) / STAGES); + xk1 = xk2; + y(:,k) = g(xk1,uk,p,tk); + end%for +end + diff --git a/solvers/generic.m b/solvers/generic.m new file mode 100644 index 0000000..4875d1b --- /dev/null +++ b/solvers/generic.m @@ -0,0 +1,48 @@ +function solution = generic(discrete,scenario,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Adaptive 2nd order Rosenbrock solver. + + steady = config.steadystate(scenario); + + [x0,ys] = initialstate(discrete,steady,config); + + p0 = [scenario.T0;scenario.Rs]; + + tID = tic; + + BusFcp = discrete.B * scenario.us + discrete.F * scenario.cp; + + % Set solver options + opts = odeset('Mass', discrete.E(p0,steady.z0), ... % Set mass matrix + 'MStateDependence', 'none', ... % Set state independence of mass matrix + 'RelTol', 1e-3, ... % Set relative solver tolerance + 'AbsTol', 1e-3, ... % Set absolute solver tolerance + 'InitialStep', config.dt, ... % Set initial time step + 'Jacobian', discrete.J(steady.xs,zeros(discrete.nP+discrete.nQ,1),scenario.us,p0,steady.z0)); % Set Jacobian + + [K,x] = ode23s(@(t,x) discrete.A * x + discrete.B * scenario.ut(t) + BusFcp + discrete.f(steady.xs,x,scenario.us + scenario.ut(t),p0,steady.z0), ... + [0,scenario.Tf], x0, opts); + + % Compute input trajectory + t = 0:config.dt:scenario.Tf; + u = scenario.us + cell2mat(arrayfun(scenario.ut,t,'UniformOutput',false)); + + % Compute output trajectory + z = cell2mat(arrayfun(@(k) discrete.C * x(k,:)',1:numel(K),'UniformOutput',false)); + y = interp1(K,z',t')' + ys; + if isfield(config,'x0'), y = y - ys; end%if + + % Adjust time discretization + solution = struct('t',t, ... + 'u',u, ... + 'y',y, ... + 'steady',steady, ... + 'runtime',toc(tID)); + + % Log solver call + thunklog(); +end + diff --git a/solvers/imex1.m b/solvers/imex1.m new file mode 100644 index 0000000..ff3730a --- /dev/null +++ b/solvers/imex1.m @@ -0,0 +1,62 @@ +function solution = imex1(discrete,scenario,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: 1st order IMEX solver. + + persistent p0; + persistent AL; + persistent AU; + persistent AP; + + steady = config.steadystate(scenario); + + [xk,ys] = initialstate(discrete,steady,config); + + % Caching: Reusable pivoted LU decomposition + if isempty(p0) || ... + not( (p0(1) == scenario.T0) && (p0(2) == scenario.Rs) ) || ... + not(numel(AP) == discrete.nP + discrete.nQ) + + p0 = [scenario.T0;scenario.Rs]; + + warning('off','Octave:lu:sparse_input'); + [AL,AU,AP] = lu(discrete.E(p0,steady.z0) - (config.relax * config.dt) * discrete.A,'vector'); + end%if + + tID = tic; + + Fcp = discrete.F * scenario.cp; + fp = @(x,u) Fcp + discrete.B * u + discrete.f(steady.xs,x,u,p0,steady.z0); + + t = 0:config.dt:scenario.Tf; + K = numel(t); + u = repmat(scenario.us,[1,K]); % Preallocate input trajectory + y = repmat(ys,[1,K]); % Preallocate output trajectory + if isfield(config,'x0'), y = 0 * y; end%if + + y(:,1) = y(:,1) + discrete.C * xk; + + % Time stepper + for k = 2:K + + u(:,k) = u(:,k) + scenario.ut(t(k)); + + tk = config.dt * (discrete.A * xk + fp(xk,u(:,k))); + + xk = xk + AU \ (AL \ tk(AP)); + + y(:,k) = y(:,k) + discrete.C * xk; + end%for + + solution = struct('t',t, ... + 'u',u, ... + 'y',y, ... + 'steady',steady, ... + 'runtime',toc(tID)); + + % Log solver call + thunklog(); +end + diff --git a/solvers/imex2.m b/solvers/imex2.m new file mode 100644 index 0000000..6ecbdac --- /dev/null +++ b/solvers/imex2.m @@ -0,0 +1,84 @@ +function solution = imex2(discrete,scenario,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: 2nd order IMEX-RK solver. + + persistent p0; + persistent AL; + persistent AU; + persistent AP; + persistent EL; + persistent EU; + persistent EP; + + steady = config.steadystate(scenario); + + [xk,ys] = initialstate(discrete,steady,config); + + %% Parameters for second order IMEX RK family of methods: + % GAMMA = 1.0 - sqrt(0.5); % SSP & L-Stable + % GAMMA = 0.5 + 1.0./sqrt(12.0); % Passive + % GAMMA = 0.24; % Efficient + GAMMA = 0.5; % Stiffly accurate (this is the default) + + % Caching: Reusable Pivoted LU decomposition + if isempty(p0) || ... + not( (p0(1) == scenario.T0) && (p0(2) == scenario.Rs) ) || ... + not(numel(AP) == discrete.nP + discrete.nQ) + + p0 = [scenario.T0;scenario.Rs]; + + warning('off','Octave:lu:sparse_input'); + + [EL,EU,EP] = lu(discrete.E(p0,steady.z0),'vector'); + [AL,AU,AP] = lu(discrete.E(p0,steady.z0) - (config.relax * config.dt * GAMMA) * discrete.A,'vector'); + end%if + + tID = tic; + + Fcp = discrete.F * scenario.cp; + fp = @(x,u) Fcp + discrete.B * u + discrete.f(steady.xs,x,u,p0,steady.z0); + + t = 0:config.dt:scenario.Tf; + K = numel(t); + u = repmat(scenario.us,[1,K]); % Preallocate input trajectory + y = repmat(ys,[1,K]); % Preallocate output trajectory + if isfield(config,'x0'), y = 0*y; end%if + + y(:,1) = y(:,1) + discrete.C * xk; + + % Time stepper + for k = 2:K + + u(:,k) = u(:,k) + scenario.ut(t(k)); + + zk = (config.dt * config.relax * GAMMA) * (discrete.A * xk); + z1 = xk + AU \ (AL \ zk(AP)); + + f1 = config.dt * fp(xk,u(:,k)); + a1 = (config.dt * config.relax) * (discrete.A * z1); + + z2 = zk + f1 + (1.0 - 2.0 * GAMMA) * a1; + z2 = xk + AU \ (AL \ z2(AP)); + + f2 = config.dt * fp(z1,u(:,k)); + a2 = (config.dt * config.relax) * (discrete.A * z2); + + zk = 0.5 * (f1 + f2 + a1 + a2); + xk = xk + EU \ (EL \ zk(EP)); + + y(:,k) = y(:,k) + discrete.C * xk; + end%for + + solution = struct('t',t, ... + 'u',u, ... + 'y',y, ... + 'steady',steady, ... + 'runtime',toc(tID)); + + % Log solver call + thunklog(); +end + diff --git a/solvers/private/initialstate.m b/solvers/private/initialstate.m new file mode 100644 index 0000000..002bfdd --- /dev/null +++ b/solvers/private/initialstate.m @@ -0,0 +1,18 @@ +function [xk,ys] = initialstate(discrete,steady,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Set initial state and initial output. + + if isfield(config,'x0') + + xk = config.x0; + ys = discrete.C * steady.xs; % This cannot be steady.ys, as the reductors may use C = 1. + else + + xk = zeros(discrete.nP + discrete.nQ,1); + ys = steady.ys; + end%if +end + diff --git a/solvers/rk4.m b/solvers/rk4.m new file mode 100644 index 0000000..5325df6 --- /dev/null +++ b/solvers/rk4.m @@ -0,0 +1,78 @@ +function solution = rk4(discrete,scenario,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: 4th order "classic" Runge Kutta method. + + persistent p0; + persistent EL; + persistent EU; + persistent EP; + + steady = config.steadystate(scenario); + + [xk,ys] = initialstate(discrete,steady,config); + + % Caching: Reusable Pivoted LU decomposition + if isempty(p0) || ... + not( (p0(1) == scenario.T0) && (p0(2) == scenario.Rs) ) || ... + not(numel(EP) == discrete.nP + discrete.nQ) + + p0 = [scenario.T0;scenario.Rs]; + + warning('off','Octave:lu:sparse_input'); + [EL,EU,EP] = lu(discrete.E(p0,steady.z0),'vector'); + end%if + + tID = tic; + + Fcp = discrete.F * scenario.cp; + fp = @(x,u) Fcp + discrete.A * x + discrete.B * u + discrete.f(steady.xs,x,u,p0,steady.z0); + Ep = discrete.E(p0,steady.z0); + + t = 0:config.dt:scenario.Tf; + K = numel(t); + u = repmat(scenario.us,[1,K]); % Preallocate input trajectory + y = repmat(ys,[1,K]); % Preallocate output trajectory + if isfield(config,'x0'), y = 0 * y; end%if + + y(:,1) = y(:,1) + discrete.C * xk; + + % Time stepper + for k = 2:K + + u(:,k) = u(:,k) + scenario.ut(t(k)); + + zk = Ep * xk; + + f1 = config.dt * fp(xk,u(:,k)); + z1 = zk + 0.5 * f1; + z1 = EU \ (EL \ z1(EP)); + + f2 = config.dt * fp(z1,u(:,k)); + z2 = zk + 0.5 * f2; + z2 = EU \ (EL \ z2(EP)); + + f3 = config.dt * fp(z2,u(:,k)); + z3 = zk + f3; + z3 = EU \ (EL \ z3(EP)); + + f4 = config.dt * fp(z3,u(:,k)); + + xk = (1.0/6.0) * (f1 + 2.0 * f2 + 2.0 * f3 + f4); + xk = xk + EU \ (EL \ xk(EP)); + + y(:,k) = y(:,k) + discrete.C * xk; + end%for + + solution = struct('t',t, ... + 'u',u, ... + 'y',y, ... + 'steady',steady, ... + 'runtime',toc(tID)); + + %Log solver call + thunklog(); +end + diff --git a/tests/mor_Cha09.m b/tests/mor_Cha09.m new file mode 100644 index 0000000..c139d3f --- /dev/null +++ b/tests/mor_Cha09.m @@ -0,0 +1,44 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Pipeline from Cha09 + +for s = {'imex1','imex2'} + for m = {'ode_mid','ode_end'} +% + morgen('Cha09','training',m{:},s{:},{ ... + 'pod_r', ... + 'eds_ro', ... + 'eds_wx', ... + 'eds_wz', ... + 'bpod_ro', ... + 'ebt_ro', ... + 'ebt_wx', ... + 'ebt_wz', ... + 'ebg_ro', ... + 'ebg_wx', ... + 'ebg_wz', ... + 'dmd_r', ... + },'dt=20','ord=150','notest'); +% + morgen('Cha09','period',m{:},s{:},{ ... + ['Cha09--',m{:},'--',s{:},'--pod_r.rom'], ... + ['Cha09--',m{:},'--',s{:},'--eds_ro.rom'], ... + ['Cha09--',m{:},'--',s{:},'--eds_wx.rom'], ... + ['Cha09--',m{:},'--',s{:},'--eds_wz.rom'], ... + ['Cha09--',m{:},'--',s{:},'--bpod_ro.rom'], ... + ['Cha09--',m{:},'--',s{:},'--ebt_ro.rom'], ... + ['Cha09--',m{:},'--',s{:},'--ebt_wx.rom'], ... + ['Cha09--',m{:},'--',s{:},'--ebt_wz.rom'], ... + ['Cha09--',m{:},'--',s{:},'--ebg_ro.rom'], ... + ['Cha09--',m{:},'--',s{:},'--ebg_wx.rom'], ... + ['Cha09--',m{:},'--',s{:},'--ebg_wz.rom'], ... + ['Cha09--',m{:},'--',s{:},'--dmd_r.rom'], ... + },'dt=20','ord=150'); +% + end%for +end%for + +morgen('Cha09','period','ode_end','generic',{},'dt=20'); + diff --git a/tests/mor_GasLib134.m b/tests/mor_GasLib134.m new file mode 100644 index 0000000..5d799be --- /dev/null +++ b/tests/mor_GasLib134.m @@ -0,0 +1,44 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: GasLib134 benchmark network + +for s = {'imex1','imex2'} + for m = {'ode_mid','ode_end'} +% + morgen('GasLib134','training',m{:},s{:},{ ... + 'pod_r', ... + 'eds_ro', ... + 'eds_wx', ... + 'eds_wz', ... + 'bpod_ro', ... + 'ebt_ro', ... + 'ebt_wx', ... + 'ebt_wz', ... + 'ebg_ro', ... + 'ebg_wx', ... + 'ebg_wz', ... + 'dmd_r', ... + },'dt=20','ord=250','notest'); +% + morgen('GasLib134','rand',m{:},s{:},{ ... + ['GasLib134--',m{:},'--',s{:},'--pod_r.rom'], ... + ['GasLib134--',m{:},'--',s{:},'--eds_ro.rom'], ... + ['GasLib134--',m{:},'--',s{:},'--eds_wx.rom'], ... + ['GasLib134--',m{:},'--',s{:},'--eds_wz.rom'], ... + ['GasLib134--',m{:},'--',s{:},'--bpod_ro.rom'], ... + ['GasLib134--',m{:},'--',s{:},'--ebt_ro.rom'], ... + ['GasLib134--',m{:},'--',s{:},'--ebt_wx.rom'], ... + ['GasLib134--',m{:},'--',s{:},'--ebt_wz.rom'], ... + ['GasLib134--',m{:},'--',s{:},'--ebg_ro.rom'], ... + ['GasLib134--',m{:},'--',s{:},'--ebg_wx.rom'], ... + ['GasLib134--',m{:},'--',s{:},'--ebg_wz.rom'], ... + ['GasLib134--',m{:},'--',s{:},'--dmd_r.rom'], ... + },'dt=20','ord=250','ys=-5'); +% + end%for +end%for + +morgen('GasLib134','rand','ode_end','imex1',{},'dt=20'); + diff --git a/tests/mor_MORGEN.m b/tests/mor_MORGEN.m new file mode 100644 index 0000000..74e2dcb --- /dev/null +++ b/tests/mor_MORGEN.m @@ -0,0 +1,44 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: MORGEN test network + +for s = {'imex1','imex2'} + for m = {'ode_mid','ode_end'} +% + morgen('MORGEN','training',m{:},s{:},{ ... + 'pod_r', ... + 'eds_ro', ... + 'eds_wx', ... + 'eds_wz', ... + 'bpod_ro', ... + 'ebt_ro', ... + 'ebt_wx', ... + 'ebt_wz', ... + 'ebg_ro', ... + 'ebg_wx', ... + 'ebg_wz', ... + 'dmd_r', ... + },'dt=60','ord=150','notest'); +% + morgen('MORGEN','day',m{:},s{:},{ ... + ['MORGEN--',m{:},'--',s{:},'--pod_r.rom'], ... + ['MORGEN--',m{:},'--',s{:},'--eds_ro.rom'], ... + ['MORGEN--',m{:},'--',s{:},'--eds_wx.rom'], ... + ['MORGEN--',m{:},'--',s{:},'--eds_wz.rom'], ... + ['MORGEN--',m{:},'--',s{:},'--bpod_ro.rom'], ... + ['MORGEN--',m{:},'--',s{:},'--ebt_ro.rom'], ... + ['MORGEN--',m{:},'--',s{:},'--ebt_wx.rom'], ... + ['MORGEN--',m{:},'--',s{:},'--ebt_wz.rom'], ... + ['MORGEN--',m{:},'--',s{:},'--ebg_ro.rom'], ... + ['MORGEN--',m{:},'--',s{:},'--ebg_wx.rom'], ... + ['MORGEN--',m{:},'--',s{:},'--ebg_wz.rom'], ... + ['MORGEN--',m{:},'--',s{:},'--dmd_r.rom'], ... + },'dt=60','ord=150','ys=-8'); +% + end%for +end%for + +morgen('MORGEN','day','ode_end','generic',{},'dt=60'); + diff --git a/tests/mor_komso.m b/tests/mor_komso.m new file mode 100644 index 0000000..5761e82 --- /dev/null +++ b/tests/mor_komso.m @@ -0,0 +1,25 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Pipeline test for KoMSO Success Stories + +morgen('Cha09','training','ode_mid','imex1',{ ... + 'pod_s', ... + 'ds_co_s', ... + 'ds_wx_s', ... + 'ds_wz_s', ... + 'bt_co_s', ... + 'bt_wx_s', ... + 'bt_wz_s', ... + },'notest'); + +morgen('Cha09','period','ode_mid','imex1',{ ... + 'Cha09--ode_mid--pod_s.rom', ... + 'Cha09--ode_mid--ds_co_s.rom', ... + 'Cha09--ode_mid--ds_wx_s.rom', ... + 'Cha09--ode_mid--ds_wz_s.rom', ... + 'Cha09--ode_mid--bt_co_s.rom', ... + 'Cha09--ode_mid--bt_wx_s.rom', ... + 'Cha09--ode_mid--bt_wz_s.rom', ... + }); diff --git a/tests/mor_pipeline.m b/tests/mor_pipeline.m new file mode 100644 index 0000000..b89207a --- /dev/null +++ b/tests/mor_pipeline.m @@ -0,0 +1,33 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Pipeline from PSI + +for s = {'imex1','imex2','rk4','generic'} + for m = {'ode_mid','ode_end'} + + morgen('pipeline','training',m{:},s{:},{ ... + 'pod_c', ... + 'ds_co', ... + 'ds_wx', ... + 'ds_wz', ... + 'bt_co', ... + 'bt_wx', ... + 'bt_wz', ... + 'dmd_c', ... + },'notest'); + + morgen('pipeline','period',m{:},s{:},{ ... + ['pipeline--',m{:},'--pod_c.rom'], ... + ['pipeline--',m{:},'--ds_co.rom'], ... + ['pipeline--',m{:},'--ds_wx.rom'], ... + ['pipeline--',m{:},'--ds_wz.rom'], ... + ['pipeline--',m{:},'--bt_co.rom'], ... + ['pipeline--',m{:},'--bt_wx.rom'], ... + ['pipeline--',m{:},'--bt_wz.rom'], ... + ['pipeline--',m{:},'--dmd_c.rom'], ... + },'compact'); + + end%for +end%for diff --git a/tests/sim_AzeJ07.m b/tests/sim_AzeJ07.m new file mode 100644 index 0000000..5e9f768 --- /dev/null +++ b/tests/sim_AzeJ07.m @@ -0,0 +1,13 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Small network from AzeJ07 + +for s = {'imex1','imex2','generic','rk4'} + for m = {'ode_mid','ode_end'} + + morgen('AzeJ07','training',m{:},s{:},{},'dt=20'); + end%for +end%for + diff --git a/tests/sim_Cha09.m b/tests/sim_Cha09.m new file mode 100644 index 0000000..631c0b4 --- /dev/null +++ b/tests/sim_Cha09.m @@ -0,0 +1,12 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Pipeline from Cha09 + +for s = {'imex1','imex2','generic','rk4'} + for m = {'ode_mid','ode_end'} + + morgen('Cha09','period',m{:},s{:},{},'dt=20'); + end%for +end%for diff --git a/tests/sim_DeWS00.m b/tests/sim_DeWS00.m new file mode 100644 index 0000000..ea0416c --- /dev/null +++ b/tests/sim_DeWS00.m @@ -0,0 +1,13 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Network from DeWS00 + +for s = {'imex1','imex2','generic','rk4'} + for m = {'ode_mid','ode_end'} + + morgen('DeWS00','training',m{:},s{:},{},'dt=20'); + end%for +end%for + diff --git a/tests/sim_GasLib11.m b/tests/sim_GasLib11.m new file mode 100644 index 0000000..be91344 --- /dev/null +++ b/tests/sim_GasLib11.m @@ -0,0 +1,13 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Simulate GasLib_11 network + +for s = {'imex1','imex2','generic','rk4'} + for m = {'ode_mid','ode_end'} + + morgen('GasLib11','training',m{:},s{:},{},'dt=180'); + end%for +end%for + diff --git a/tests/sim_GasLib134.m b/tests/sim_GasLib134.m new file mode 100644 index 0000000..39f156c --- /dev/null +++ b/tests/sim_GasLib134.m @@ -0,0 +1,13 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Simulate GasLib_134 network + +for s = {'imex1','imex2','rk4'} % generic crashes MATLAB + for m = {'ode_mid','ode_end'} + + morgen('GasLib134','rand',m{:},s{:},{},'dt=20'); + end%for +end%for + diff --git a/tests/sim_GasLib135.m b/tests/sim_GasLib135.m new file mode 100644 index 0000000..bc4689e --- /dev/null +++ b/tests/sim_GasLib135.m @@ -0,0 +1,13 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Simulate GasLib_135 network + +for s = {'imex1','imex2','generic','rk4'} + for m = {'ode_mid','ode_end'} + + morgen('GasLib135','training',m{:},s{:},{},'dt=60'); + end%for +end%for + diff --git a/tests/sim_GasLib24.m b/tests/sim_GasLib24.m new file mode 100644 index 0000000..bd06e8a --- /dev/null +++ b/tests/sim_GasLib24.m @@ -0,0 +1,13 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Simulate GasLib_24 network + +for s = {'imex1','imex2','generic','rk4'} + for m = {'ode_mid','ode_end'} + + morgen('GasLib24','training',m{:},s{:},{},'dt=60'); + end%for +end%for + diff --git a/tests/sim_GasLib40.m b/tests/sim_GasLib40.m new file mode 100644 index 0000000..52f19dc --- /dev/null +++ b/tests/sim_GasLib40.m @@ -0,0 +1,13 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Simulate GasLib_40 network + +for s = {'imex1','imex2','generic','rk4'} + for m = {'ode_mid','ode_end'} + + morgen('GasLib40','training',m{:},s{:},{},'dt=60'); + end%for +end%for + diff --git a/tests/sim_GasLib4197.m b/tests/sim_GasLib4197.m new file mode 100644 index 0000000..4226cba --- /dev/null +++ b/tests/sim_GasLib4197.m @@ -0,0 +1,13 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Simulate GasLib_4197 network + +for s = {'imex1','imex2','generic','rk4'} + for m = {'ode_mid','ode_end'} + + morgen('GasLib4197','training',m{:},s{:},{},'dt=60'); + end%for +end%for + diff --git a/tests/sim_GasLib582.m b/tests/sim_GasLib582.m new file mode 100644 index 0000000..03cadeb --- /dev/null +++ b/tests/sim_GasLib582.m @@ -0,0 +1,13 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Simulate GasLib_582 network + +for s = {'imex1','imex2','generic','rk4'} + for m = {'ode_mid','ode_end'} + + morgen('GasLib582','training',m{:},s{:},{},'dt=60'); + end%for +end%for + diff --git a/tests/sim_GruHKetal13.m b/tests/sim_GruHKetal13.m new file mode 100644 index 0000000..bdd549f --- /dev/null +++ b/tests/sim_GruHKetal13.m @@ -0,0 +1,13 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Pipeline from GruHKetal13 + +for s = {'imex1','imex2','rk4','generic'} + for m = {'ode_mid','ode_end'} + + morgen('GruHKetal13','rand',m{:},s{:},{},'dt=20'); + end%for +end%for + diff --git a/tests/sim_Guy67.m b/tests/sim_Guy67.m new file mode 100644 index 0000000..6dc9c1e --- /dev/null +++ b/tests/sim_Guy67.m @@ -0,0 +1,13 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Pipeline from Guy67 + +for s = {'imex1','imex2','generic','rk4'} + for m = {'ode_mid','ode_end'} + + morgen('Guy67','training',m{:},s{:},{},'dt=20'); + end%for +end%for + diff --git a/tests/sim_Kiu94.m b/tests/sim_Kiu94.m new file mode 100644 index 0000000..d02746d --- /dev/null +++ b/tests/sim_Kiu94.m @@ -0,0 +1,13 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Network from Kiu94 + +for s = {'imex1','imex2','generic','rk4'} + for m = {'ode_mid','ode_end'} + + morgen('Kiu94','training',m{:},s{:},{},'dt=20'); + end%for +end%for + diff --git a/tests/sim_MORGEN.m b/tests/sim_MORGEN.m new file mode 100644 index 0000000..59bf2f6 --- /dev/null +++ b/tests/sim_MORGEN.m @@ -0,0 +1,12 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Test MORGEN network + +for s = {'imex1','imex2','generic','rk4'} + for m = {'ode_mid','ode_end'} + + morgen('MORGEN','day',m{:},s{:},{},'dt=60'); + end%for +end%for diff --git a/tests/sim_RodS18.m b/tests/sim_RodS18.m new file mode 100644 index 0000000..477fd49 --- /dev/null +++ b/tests/sim_RodS18.m @@ -0,0 +1,13 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Small network from RodS18 + +for s = {'imex1','imex2','generic','rk4'} + for m = {'ode_mid','ode_end'} + + morgen('RodS18','training',m{:},s{:},{},'dt=20'); + end%for +end%for + diff --git a/tests/sim_comptest.m b/tests/sim_comptest.m new file mode 100644 index 0000000..249464d --- /dev/null +++ b/tests/sim_comptest.m @@ -0,0 +1,13 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Compressor test + +for s = {'imex1','imex2','generic','rk4'} + for m = {'ode_mid','ode_end'} + + morgen('comptest','training',m{:},s{:},{},'dt=20'); + end%for +end%for + diff --git a/tests/sim_diamond.m b/tests/sim_diamond.m new file mode 100644 index 0000000..23d87d5 --- /dev/null +++ b/tests/sim_diamond.m @@ -0,0 +1,13 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Diamond test network + +for s = {'imex1','imex2','generic','rk4'} + for m = {'ode_mid','ode_end'} + + morgen('diamond','training',m{:},s{:},{},'dt=20'); + end%for +end%for + diff --git a/tests/sim_fork1.m b/tests/sim_fork1.m new file mode 100644 index 0000000..9aba763 --- /dev/null +++ b/tests/sim_fork1.m @@ -0,0 +1,13 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Fork with two inflows + +for s = {'imex1','imex2','generic','rk4'} + for m = {'ode_mid','ode_end'} + + morgen('fork1','training',m{:},s{:},{},'dt=20'); + end%for +end%for + diff --git a/tests/sim_fork2.m b/tests/sim_fork2.m new file mode 100644 index 0000000..72cece1 --- /dev/null +++ b/tests/sim_fork2.m @@ -0,0 +1,13 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: Fork with two outflows + +for s = {'imex1','imex2','generic','rk4'} + for m = {'ode_mid','ode_end'} + + morgen('fork2','training',m{:},s{:},{},'dt=20'); + end%for +end%for + diff --git a/tests/sim_pipeline.m b/tests/sim_pipeline.m new file mode 100644 index 0000000..b8fcc48 --- /dev/null +++ b/tests/sim_pipeline.m @@ -0,0 +1,13 @@ +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: BSD 2-Clause (opensource.org/licenses/BSD-2-clause) +%%% summary: test pipeline + +for s = {'imex1','imex2','generic','rk4'} + for m = {'ode_mid','ode_end'} + + morgen('pipeline','day',m{:},s{:},{},'dt=20'); + end%for +end%for + diff --git a/tools/cmp_friction.m b/tools/cmp_friction.m new file mode 100644 index 0000000..0b19cc7 --- /dev/null +++ b/tools/cmp_friction.m @@ -0,0 +1,15 @@ +function r = cmp_friction(Re,D,k) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Compare friction factors + + r = [friction_altshul(Re,D,k); ... + friction_schifrinson(Re,D,k); ... + friction_hofer(Re,D,k); ... + friction_nikuradse(Re,D,k); ... + friction_pmt1025(Re,D,k); ... + friction_igt(Re,D,k)]; +end + diff --git a/tools/json2csv.m b/tools/json2csv.m new file mode 100644 index 0000000..8731ae3 --- /dev/null +++ b/tools/json2csv.m @@ -0,0 +1,89 @@ +function json2csv(network_path,output_name) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Convert json to MORGEN csv + + raw = jsondecode(fileread(network_path)); + + fields = fieldnames(raw); + + csv{1} = '# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m]'; + + curr = 2; + + nodes = {}; + height = {}; + + n = 1; + + % list nodes + for k = 1:numel(fields) + + if isstruct(raw.(fields{k})) && (lower(raw.(fields{k}).obj_type) == 'n') + + nodes{n} = fields{k}; + height{n} = str2num(raw.(fields{k}).H); + n = n + 1; + end%if + end%for + + % process edges + for k = 1:numel(fields) + + if isstruct(raw.(fields{k})) && not(lower(raw.(fields{k}).obj_type) == 'n') + + node1 = find(strcmp(nodes,strrep(raw.(fields{k}).node1,'-','_'))); + node2 = find(strcmp(nodes,strrep(raw.(fields{k}).node2,'-','_'))); + + switch lower(raw.(fields{k}).obj_type) + + case 'p' % pipeline + + pipelength = str2num(raw.(fields{k}).l); + diameter = str2num(raw.(fields{k}).d); + roughness = str2num(raw.(fields{k}).k); + + csv{curr} = ['P,', ... + num2str(node1,'%u'),',', ... + num2str(node2,'%u'),',', ... + num2str(pipelength,'%.1f'),',', ... + num2str(diameter,'%.2f'),',', ... + num2str(height{node1} - height{node2},'%.1f'),',', ... + num2str(roughness,'%.4f')]; + curr = curr + 1; + + case 'c' % compressor + + diameter = str2num(raw.(fields{k}).d); + + csv{curr} = ['C,', ... + num2str(node1,'%u'),',', ... + num2str(node2,'%u')]; + curr = curr + 1; + + case 'v' % valve -> short pipe TODO + + diameter = str2num(raw.(fields{k}).d); + + csv{curr} = ['S,', ... + num2str(node1,'%u'),',', ... + num2str(node2,'%u')]; + curr = curr + 1; + + case 'r' % resistor -> short pipe + + csv{curr} = ['S,', ... + num2str(node1,'%u'),',', ... + num2str(node2,'%u')]; + curr = curr + 1; + + end%switch + end%if + end%for + + fhandle = fopen(['../networks/',output_name,'.net'],'w'); + fprintf(fhandle,'%s\n',csv{:}); + fclose(fhandle); +end diff --git a/tools/randscen.m b/tools/randscen.m new file mode 100644 index 0000000..af03e29 --- /dev/null +++ b/tools/randscen.m @@ -0,0 +1,97 @@ +function randscen(training,output) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Generate random scenario from training scenario + + %% Read Training Scenario + + f = fopen(['../networks/',training,'/training.ini'],'r'); + + co = textscan(f,'%s = %s','CommentStyle','#'); + + ini = cell2struct(co{2},co{1}); + + fclose(f); + + %% Write Random Scenario + + f = fopen([output,'.ini'],'w'); + + fprintf(f,'T0 = %g\n',str2num(ini.T0)); + fprintf(f,'Rs = %g\n',str2num(ini.Rs)); + fprintf(f,'tH = %g\n',86400.0); + + %% Compressor Pressures + + if isfield(ini,'cp') + compressor_pressure = cell2mat(cellfun(@(c) str2num(c),strsplit(ini.cp,'|'),'UniformOutput',false))'; + + fprintf(f,'cp = '); + for l = 1:(numel(compressor_pressure) - 1); + + fprintf(f,'%g|',compressor_pressure(l)); + end%for + + fprintf(f,'%g\n',compressor_pressure(end)); + end%if + + %% Supply Pressures + + supply_pressure = cell2mat(cellfun(@(c) str2num(c),strsplit(ini.up,'|'),'UniformOutput',false))'; + + fprintf(f,'up = '); + for k = 1:24 + + for l = 1:numel(supply_pressure) + + if l < numel(supply_pressure) + + fprintf(f,'%g;',supply_pressure(l)); + elseif k < 24 + + fprintf(f,'%g|',supply_pressure(l)); + else + + fprintf(f,'%g\n',supply_pressure(l)); + end%if + end%for + end%for + + %% Demand Mass-Fluxes + + demand_massflux = cell2mat(cellfun(@(c) str2num(c),strsplit(ini.uq,'|'),'UniformOutput',false))'; + + rand_demand = [demand_massflux; demand_massflux .* (0.75 + 0.5*rand(23,numel(demand_massflux)))]; + + fprintf(f,'uq = '); + for k = 1:24 + + for l = 1:numel(demand_massflux) + + if l < numel(demand_massflux) + + fprintf(f,'%g;',rand_demand(k,l)); + elseif k < 24 + + fprintf(f,'%g|',rand_demand(k,l)); + else + + fprintf(f,'%g\n',rand_demand(k,l)); + end%if + end%for + end%for + + %% Time Inidices + + fprintf(f,'ut = '); + for k = 0:22 + + fprintf(f,'%g|',k*3600); + end%for + + fprintf(f,'%g\n',23*3600); + + fclose(f); +end diff --git a/tools/vf2mf.m b/tools/vf2mf.m new file mode 100644 index 0000000..2dade09 --- /dev/null +++ b/tools/vf2mf.m @@ -0,0 +1,14 @@ +function mf = vf2mf(vf,den) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Convert volume flow [m^3/h] in mass flow [kg/s] + + if nargin == 1 + + den = 0.7; % [kg/m^3] for high caloric natural gas + end%if + + mf = (vf / 3600.0) * den; +end diff --git a/tools/xml2csv.xsl b/tools/xml2csv.xsl new file mode 100644 index 0000000..00ecf51 --- /dev/null +++ b/tools/xml2csv.xsl @@ -0,0 +1,272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Unknown unit: + + + + + + + +# type, identifier-in, identifier-out, pipe-length [m], pipe diameter [m], height difference [m], pipe roughness [m] + + + + + + + + + + + + + + + + + + + + + +P,,, + + +, + + +,, + + + + + + +S,, + + + + +S,, + + + + +C,, + + + +V,, + + + + + + +Unknown network edge type: + + + + + + + + + + + +S,, + + + + + +S,, + + + + + diff --git a/utils/assert_warn.m b/utils/assert_warn.m new file mode 100644 index 0000000..f831d48 --- /dev/null +++ b/utils/assert_warn.m @@ -0,0 +1,17 @@ +function assert_warn(c,m) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Conditional warning. + + if c + + fprintf('\n\n'); + ws = warning; + warning('off','backtrace'); + warning(m); + warning(ws); + fprintf('\n'); + end%if +end diff --git a/utils/cfl.m b/utils/cfl.m new file mode 100644 index 0000000..e6ba78e --- /dev/null +++ b/utils/cfl.m @@ -0,0 +1,9 @@ +function c = cfl(dx,dt,v) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Compute Courant-Friedrichs-Levy constant. + + c = v * (dt / dx); +end diff --git a/utils/circsurf.m b/utils/circsurf.m new file mode 100644 index 0000000..73b1fc5 --- /dev/null +++ b/utils/circsurf.m @@ -0,0 +1,9 @@ +function a = circsurf(diam) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Vectorized circle surface for given diameter. + + a = (0.25 * pi) * (diam .* diam); +end diff --git a/utils/cleanup.m b/utils/cleanup.m new file mode 100644 index 0000000..324d49f --- /dev/null +++ b/utils/cleanup.m @@ -0,0 +1,13 @@ +function cleanup() +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: morgen on exit cleanup. + + clear steadystate; + clear rk4; + clear imex1; + clear imex2; + fprintf('Bye\n\n'); +end diff --git a/utils/cmov.m b/utils/cmov.m new file mode 100644 index 0000000..58a3bd7 --- /dev/null +++ b/utils/cmov.m @@ -0,0 +1,9 @@ +function r = cmov(c,varargin) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Return 2nd argument if c is true, else return 3rd argument. + + r = varargin{2 - c}; +end diff --git a/utils/compressibility/compressibility_aga88.m b/utils/compressibility/compressibility_aga88.m new file mode 100644 index 0000000..fe2f54a --- /dev/null +++ b/utils/compressibility/compressibility_aga88.m @@ -0,0 +1,9 @@ +function z = compressibility_aga88(p,T,pc,Tc) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: AGA-88 compressibility factor for pressures below 70bar. + + z = 1.0 + (0.257 - 0.533 * Tc / T) * p ./ pc; +end diff --git a/utils/compressibility/compressibility_dvgw.m b/utils/compressibility/compressibility_dvgw.m new file mode 100644 index 0000000..0764153 --- /dev/null +++ b/utils/compressibility/compressibility_dvgw.m @@ -0,0 +1,9 @@ +function z = compressibility_dvgw(p,T,pc,Tc) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: DVGW-G-2000 compressibility formula for up to 70bar. + + z = 1.0 - p ./ 450.0; +end diff --git a/utils/compressibility/compressibility_ideal.m b/utils/compressibility/compressibility_ideal.m new file mode 100644 index 0000000..3a7ae9c --- /dev/null +++ b/utils/compressibility/compressibility_ideal.m @@ -0,0 +1,9 @@ +function z = compressibility_ideal(p,T,pc,Tc) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Ideal gas compressibility factor dummy. + + z = ones(numel(p),1); +end diff --git a/utils/compressibility/compressibility_papay.m b/utils/compressibility/compressibility_papay.m new file mode 100644 index 0000000..d79ffcd --- /dev/null +++ b/utils/compressibility/compressibility_papay.m @@ -0,0 +1,12 @@ +function z = compressibility_papay(p,T,pc,Tc) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Papay compressibility factor for pressures below 150bar. + + a = -3.52 / pc * exp(-2.26 * T / Tc); + b = 0.274 / (pc * pc) * exp(-1.878 * T / Tc); + + z = 1.0 + a * p + b * (p .* p); +end diff --git a/utils/constant/constant_gravity.m b/utils/constant/constant_gravity.m new file mode 100644 index 0000000..5bc271f --- /dev/null +++ b/utils/constant/constant_gravity.m @@ -0,0 +1,9 @@ +function g = constant_gravity() +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Get earth standard gravity acceleration. + + g = 9.80665; % Standard Gravity [m / s^2] +end diff --git a/utils/format/format_ini.m b/utils/format/format_ini.m new file mode 100644 index 0000000..eadf623 --- /dev/null +++ b/utils/format/format_ini.m @@ -0,0 +1,15 @@ +function content = format_ini(filename) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Read ini file and return structure. + + fh = fopen(filename,'r'); + + co = textscan(fh,'%s = %s','CommentStyle','#'); + + content = cell2struct(co{2},co{1}); + + fclose(fh); +end diff --git a/utils/format/format_network.m b/utils/format/format_network.m new file mode 100644 index 0000000..ea3ba7b --- /dev/null +++ b/utils/format/format_network.m @@ -0,0 +1,194 @@ +function refined_network = format_network(network_path,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Read net file and return a network structure. + +% TODO valves +% FIXME textscan padding and broadcasting in lines 60,61 in Octave (fails for networks with compressors) + + % Load CSV file into cell array of columns + if isfile(network_path) + + col = textscan(fileread(network_path),'%c %f %f %f %f %f %f','HeaderLines',1,'Delimiter',',','EndOfLine','\n'); + + % If Octave returns a cell convert to array + if iscell(col{1}) + + col{1} = cell2mat(col{1}); + end%if + else + + error(['morgen: Could not locate network: ',network_path,' !']); + end%if + + % Setup network + idlist = upper(col{1}); + edgelist = [col{2},col{3}]; + + network = struct(); + + network.length = col{4}; + network.diameter = col{5}; + network.incline = col{6}; + network.roughness = col{7}; + + % Test validity of network definition + assert( all(ischar(idlist)), 'morgen: Illegal edge identifier.'); + assert( all(edgelist(:) > 0), 'morgen: Illegal edge list entry.'); + assert( all(isnumeric(network.incline) | isnan(network.incline)), 'morgen: Illegal edge incline.'); + assert( all((network.length > 0) | isnan(network.length)), 'morgen: Illegal edge length.'); + assert( all((network.diameter > 0) | isnan(network.diameter)), 'morgen: Illegal edge diameter.'); + assert( all((network.roughness >= 0) | isnan(network.roughness)), 'morgen: Illegal edge roughness.'); + + % Determine supply nodes + uni_from = find(histc(edgelist(:,1),1:max(edgelist(:,1))) == 1); + supply_nodes = intersect(setdiff(edgelist(:,1),edgelist(:,2)),uni_from); + + % Determine demand nodes + uni_to = find(histc(edgelist(:,2),1:max(edgelist(:,2))) == 1); + demand_nodes = intersect(setdiff(edgelist(:,2),edgelist(:,1)),uni_to); + +%% Refine network + + nom_len = 2.0 * config.dt * config.vmax; + + [refined_idlist,refined_edgelist,refined_network] = refine(idlist,edgelist,network,nom_len); + + refined_network.node_op(supply_nodes,:) = []; + refined_network.node_op(:,supply_nodes) = []; + refined_network.node_op = refined_network.node_op ./ vecnorm(refined_network.node_op,2,1); + refined_network.edge_op = refined_network.edge_op ./ vecnorm(refined_network.edge_op,2,1); + +%% Quantify network + + [supply_edges,~] = find(refined_edgelist(:,1) == supply_nodes'); + + [demand_edges,~] = find(refined_edgelist(:,2) == demand_nodes'); + + compressor_edges = find(refined_idlist == 'C'); + + refined_network.nEdges = numel(refined_idlist); + refined_network.nSupply = numel(supply_nodes); + refined_network.nDemand = numel(demand_nodes); + refined_network.nInternal = numel(unique(refined_edgelist(:))) - refined_network.nSupply - refined_network.nDemand; + refined_network.nCompressor = numel(compressor_edges); + +%% Build operators + + % Assemble incidence matrix (nodes x edges) + incidence = sparse(refined_edgelist, ... + repmat((1:refined_network.nEdges)',[1,2]), ... + repmat([-1,1],[refined_network.nEdges,1])); + + % Assemble supply operator + refined_network.Bs = sparse(1:refined_network.nSupply,supply_edges,-1, ... + refined_network.nSupply,refined_network.nEdges); + + refined_network.Fc = sparse(1:refined_network.nCompressor,compressor_edges,-1, ... + max(1,refined_network.nCompressor),refined_network.nEdges); + + % PQ reduced incidence matrix (remove all zero rows and supply node rows) + refined_network.PQ = incidence(setdiff(find(any(incidence,2)),supply_nodes),:); % Remove all supply nodes! + + % Assemble demand operator + refined_network.Bd = refined_network.PQ(:,demand_edges); + refined_network.Bd(refined_network.Bd < 0) = 0; + + % QP transposed reduced incidence matrix (edges x nodes) + refined_network.QP = refined_network.PQ'; +% + % Correct incidence for compressors + tmp = refined_network.QP(compressor_edges,:); + + tmp(tmp < 0) = 0; + + refined_network.QP(compressor_edges,:) = tmp; +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +function [refined_idlist,refined_edgelist,refined_network] = refine(idlist,edgelist,network,nom_len) +%%% summary: Refine too-long pipes in network + + nEdges = numel(idlist); + nNodes = max(edgelist(:)); + + extra = floor(network.length ./ nom_len); + + eff_extra = sum(extra(not(isnan(extra)))); + + total = numel(idlist) + eff_extra; + + mean_diam = mean(network.diameter(find(idlist == 'P'))); + + % pre-allocate + refined_id = zeros(total,1); + refined_edgelist = zeros(total,2); + + refined_network = struct(); + + refined_network.nomLen = nom_len; + + refined_network.length = zeros(total,1); + refined_network.incline = zeros(total,1); + refined_network.diameter = zeros(total,1); + refined_network.roughness = zeros(total,1); + + refined_network.edge_op = [speye(nEdges); sparse(eff_extra,nEdges)]; + refined_network.node_op = [speye(nNodes); sparse(eff_extra,nNodes)]; + + next_edge = size(edgelist,1) + 1; + next_node = max(edgelist(:)) + 1; + + for k = 1:numel(idlist) + + %% Handle too long pipes + if (idlist(k) == 'P') && (extra(k) > 0) + + new_edges = next_edge:(next_edge + extra(k) - 1); + new_nodes = next_node:(next_node + extra(k) - 1); + + refined_edgelist([k,new_edges],:) = [[edgelist(k,1);new_nodes'], ... % from + [new_nodes';edgelist(k,2)]]; % to + + refined_idlist([k,new_edges]) = 'P'; + + refined_network.length([k,new_edges]) = [repmat(nom_len,[extra(k),1]); ... + rem(network.length(k),nom_len)]; + refined_network.incline([k,new_edges]) = network.incline(k) ./ extra(k); + refined_network.diameter([k,new_edges]) = network.diameter(k); + refined_network.roughness([k,new_edges]) = network.roughness(k); + + next_edge = new_edges(end) + 1; + next_node = new_nodes(end) + 1; + + refined_network.edge_op(new_edges,k) = 1.0; + refined_network.node_op(new_nodes,edgelist(k,2)) = 1.0; + + %% Handle non-pipes + elseif not(idlist(k) == 'P') + + refined_idlist(k) = idlist(k); + refined_edgelist(k,:) = edgelist(k,:); + + refined_network.length(k) = nom_len; + refined_network.incline(k) = 0; + refined_network.diameter(k) = mean_diam; + refined_network.roughness(k) = 0; + + %% Handle nominal pipes + else + + % copy unrefined network + refined_idlist(k) = idlist(k); + refined_edgelist(k,:) = edgelist(k,:); + + refined_network.length(k) = network.length(k); + refined_network.incline(k) = network.incline(k); + refined_network.diameter(k) = network.diameter(k); + refined_network.roughness(k) = network.roughness(k); + end%if + end%for +end diff --git a/utils/format/format_scenario.m b/utils/format/format_scenario.m new file mode 100644 index 0000000..2ed7097 --- /dev/null +++ b/utils/format/format_scenario.m @@ -0,0 +1,42 @@ +function scenario = format_scenario(scenario_path,network) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Read scenario ini file and return a structure. + + ini = format_ini(scenario_path); + + scenario.T0 = celsius2kelvin(str2double(ini.T0)); % ambient temperature + scenario.Rs = str2double(ini.Rs); % specific gas constant + scenario.Tf = str2double(ini.tH); % time horizon + + supply_pressure = cell2mat(cellfun(@(c) str2num(c),strsplit(ini.up,'|'),'UniformOutput',false)); + assert(size(supply_pressure,1) == network.nSupply,'network/scenario supply mismatch'); + + demand_massflux = cell2mat(cellfun(@(c) str2num(c),strsplit(ini.uq,'|'),'UniformOutput',false)); + assert(size(demand_massflux,1) == network.nDemand,'network/scenario demand mismatch'); + + time_index = str2double(strsplit(ini.ut,'|')); + assert(numel(time_index) == size(supply_pressure,2),'scenario time/supply mismatch'); + assert(numel(time_index) == size(demand_massflux,2),'scenario time/demand mismatch'); + + % Decode and center input time series + scenario.us = [supply_pressure(:,1); demand_massflux(:,1)]; % steady state input + + centered_input = [supply_pressure; demand_massflux] - scenario.us; % shift by time zero values (assumed to be steady-state) + + scenario.ut = @(t) centered_input(:,find(t >= time_index,1,'last')); % input function + + % Decode compressors + if isfield(ini,'cp') + + scenario.cp = str2num(ini.cp); + assert(numel(scenario.cp) == network.nCompressor,'network/scenario demand mismatch'); + else + + scenario.cp = 0; + assert(0 == network.nCompressor,'network/scenario demand mismatch'); + end%if +end + diff --git a/utils/format/save_ini.m b/utils/format/save_ini.m new file mode 100644 index 0000000..5eab36d --- /dev/null +++ b/utils/format/save_ini.m @@ -0,0 +1,18 @@ +function save_ini(filename,key,val) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Save ini file. + + fh = fopen(filename,'w'); + + assert(numel(key) == numel(val),'key/value dimension mismatch.'); + + for k = 1:numel(key) + + fprintf(fh,'"%s" = %.3f\n',key{k},val{k}); + end%for + + fclose(fh); +end diff --git a/utils/friction/friction_altshul.m b/utils/friction/friction_altshul.m new file mode 100644 index 0000000..b1efeba --- /dev/null +++ b/utils/friction/friction_altshul.m @@ -0,0 +1,9 @@ +function l = friction_altshul(Re,D,k) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Altshul friction factor formula for turbulent flows. + + l = 0.11 * ( (68.0./Re) + (k./D) ).^0.25; +end diff --git a/utils/friction/friction_hofer.m b/utils/friction/friction_hofer.m new file mode 100644 index 0000000..cae19f3 --- /dev/null +++ b/utils/friction/friction_hofer.m @@ -0,0 +1,9 @@ +function l = friction_hofer(Re,D,k) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Hofer friction factor formula for turbulent flows. + + l = 1.0 ./ (-2.0 * log10( (4.518./Re) .* log10(Re./7.0) + k./(3.71*D) )).^2.0; +end diff --git a/utils/friction/friction_igt.m b/utils/friction/friction_igt.m new file mode 100644 index 0000000..0386967 --- /dev/null +++ b/utils/friction/friction_igt.m @@ -0,0 +1,10 @@ +function l = friction_igt(Re,D,k) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: IGT friction factor formula for turbulent flows. + + l = 0.1875 ./ Re.^0.2; +end + diff --git a/utils/friction/friction_nikuradse.m b/utils/friction/friction_nikuradse.m new file mode 100644 index 0000000..304cb68 --- /dev/null +++ b/utils/friction/friction_nikuradse.m @@ -0,0 +1,9 @@ +function l = friction_nikuradse(Re,D,k) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Nikuradse friction factor formula for turbulent flows. + + l = 1.0 ./ ( -2.0 * log10( k./(3.71*D) ) ).^2.0; +end diff --git a/utils/friction/friction_pmt1025.m b/utils/friction/friction_pmt1025.m new file mode 100644 index 0000000..3964d65 --- /dev/null +++ b/utils/friction/friction_pmt1025.m @@ -0,0 +1,9 @@ +function l = friction_pmt1025(Re,D,k) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: PMT-1025 friction factor formula for turbulent flows. + + l = 0.067 * ( (158.0./Re) + (2.0*k)./D ).^0.2; +end diff --git a/utils/friction/friction_schifrinson.m b/utils/friction/friction_schifrinson.m new file mode 100644 index 0000000..9e9e1ed --- /dev/null +++ b/utils/friction/friction_schifrinson.m @@ -0,0 +1,9 @@ +function l = friction_schifrinson(Re,D,k) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Schifrinson friction factor formula for turbulent flows. + + l = 0.11 * (k./D).^0.25; +end diff --git a/utils/inifield.m b/utils/inifield.m new file mode 100644 index 0000000..228aee1 --- /dev/null +++ b/utils/inifield.m @@ -0,0 +1,29 @@ +function v = inifield(ini,field,default,options) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Get structure field and test if from options. + + v = default; + + if isfield(ini,field) + + v = str2double(getfield(ini,field)); + + if isnan(v) % if NaN use char string value + + v = default; + + if nargin == 4 + + iv = find(strcmpi(getfield(ini,field),options)); + + if any(iv) + + v = options{iv}; + end%if + end%if + end%if + end%if +end diff --git a/utils/make_rom.m b/utils/make_rom.m new file mode 100644 index 0000000..e05083a --- /dev/null +++ b/utils/make_rom.m @@ -0,0 +1,45 @@ +function rdiscrete = make_rom(name,discrete,spaces,order) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Reduced order model assembler. + + if isa(order,'char') && strcmp(order,'name') % Return method name + + rdiscrete = name; + elseif isa(order,'char') && strcmp(order,'save') % Return projectors + + rdiscrete = spaces; + else + + rdiscrete.nPorts = discrete.nPorts; + + rdiscrete.nP = min(order,size(spaces{1,1},2)); + rdiscrete.nQ = min(order,size(spaces{2,1},2)); + + L1 = blkdiag(spaces{1,1}(:,1:rdiscrete.nP), ... + spaces{2,1}(:,1:rdiscrete.nQ))'; + + if (size(spaces,2) == 1) % Structured Galerkin + + R1 = L1'; + else % Structured Petrov-Galerkin + + assert(size(spaces{1,1},2) == size(spaces{1,2},2) && ... + size(spaces{2,1},2) == size(spaces{2,2},2), ... + 'morgen: Incompatible Petrov-Galerkin projections!'); + + R1 = blkdiag(spaces{1,2}(:,1:rdiscrete.nP), ... + spaces{2,2}(:,1:rdiscrete.nQ)); + end%if + + rdiscrete.E = @(p,z) L1 * discrete.E(p,z) * R1; + rdiscrete.A = L1 * discrete.A * R1; + rdiscrete.B = L1 * discrete.B; + rdiscrete.F = L1 * discrete.F; + rdiscrete.C = discrete.C * R1; + rdiscrete.f = @(xs,x,u,p,z) L1 * discrete.f(xs,R1 * x,u,p,z); + rdiscrete.J = @(xs,x,u,p,z) L1 * discrete.J(xs,R1 * x,u,p,z) * R1; + end%if +end diff --git a/utils/morscore.m b/utils/morscore.m new file mode 100644 index 0000000..7361d93 --- /dev/null +++ b/utils/morscore.m @@ -0,0 +1,21 @@ +function s = morscore(orders,errors) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: MORscore computation. + + pp = errors; + pp(isnan(errors)) = 1.0; + + nx = orders ./ max(orders); + ny = log10(pp) ./ floor(log10(eps)); + + if not(nx(end) == 1) + + nx(end+1) = 1; + ny(end+1) = ny(end); + end%if + + s = max(0, trapz(nx(:),ny(:))); +end diff --git a/utils/norm/norm_l0.m b/utils/norm/norm_l0.m new file mode 100644 index 0000000..b05c232 --- /dev/null +++ b/utils/norm/norm_l0.m @@ -0,0 +1,9 @@ +function n = norm_l0(x,h) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Time-domain approximate Lebesgue-0 norm. + + n = sum(prod(abs(x),1).^(1.0/size(x,1)),2); +end diff --git a/utils/norm/norm_l1.m b/utils/norm/norm_l1.m new file mode 100644 index 0000000..e52882d --- /dev/null +++ b/utils/norm/norm_l1.m @@ -0,0 +1,9 @@ +function n = norm_l1(x,h) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Time-domain approximate Lebesgue-1 norm. + + n = abs(h) * norm(x(:),1); +end diff --git a/utils/norm/norm_l2.m b/utils/norm/norm_l2.m new file mode 100644 index 0000000..562f7d7 --- /dev/null +++ b/utils/norm/norm_l2.m @@ -0,0 +1,9 @@ +function n = norm_l2(x,h) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Time-domain approximate Lebesgue-2 norm. + + n = sqrt(h) * norm(x(:),2); +end diff --git a/utils/norm/norm_l8.m b/utils/norm/norm_l8.m new file mode 100644 index 0000000..b6ad96d --- /dev/null +++ b/utils/norm/norm_l8.m @@ -0,0 +1,9 @@ +function n = norm_l8(x,h) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Time-domain approximate Lebesgue-infinity norm. + + n = norm(x(:),Inf); +end diff --git a/utils/plot/plot_breven.m b/utils/plot/plot_breven.m new file mode 100644 index 0000000..eb2eb8c --- /dev/null +++ b/utils/plot/plot_breven.m @@ -0,0 +1,40 @@ +function plot_breven(plot_path,name,orders,data,labels,compact) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: plot comparable data as lines. + + ndata = numel(data); + colors = lines12(ndata); + + if compact + + subplot(2,6,[9,10]); + title('Breakeven'); + else + + figure('Name',['[',name,'] Breakeven'],'NumberTitle','off'); + end%if + + semilogy(orders(:),data{1}(:),'Color',colors(1,:),'LineWidth',4); + hold on; + + for k = 2:ndata + + semilogy(orders(:),data{k}(:),'Color',colors(k,:),'LineWidth',4); + end%for + + yl = ylim(); + ylim([min(yl(1),1.0),max(yl(2),10)]); + + hold off; + xlim([min(orders),max(orders)]); + yl = ylim(); + ylim([10.^floor(log10(yl(1))), max(1,10.^ceil(log10(yl(2))))]); + xlabel('Reduced Dimension'); + ylabel('Breakeven'); + if not(compact), legend([labels;''],'location','SouthOutside'); end%if + + print('-depsc',[plot_path,'/',name,'_breven.eps']); +end diff --git a/utils/plot/plot_error.m b/utils/plot/plot_error.m new file mode 100644 index 0000000..c56abed --- /dev/null +++ b/utils/plot/plot_error.m @@ -0,0 +1,51 @@ +function plot_error(plot_path,name,id,orders,data,labels,scores,compact,yscale) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: plot comparable data as lines. + + ndata = numel(data); + colors = lines12(ndata); + + if compact + + subplot(2,6,[5,6,11,12]); + else + + f = figure('Name',[id,' [',name,'] Relative ',id,' Output Model Reduction Error'],'NumberTitle','off'); + pbaspect([3,2,1]); + end%if + + semilogy(orders(:),data{1}(:),'Color',colors(1,:),'LineWidth',4); + hold on; + + for k = 2:ndata + + semilogy(orders(:),data{k}(:),'Color',colors(k,:),'LineWidth',4); + end%for + + ylabel(['Relative ',id,' Output Error']); + + hold off; + xlim([min(orders),max(orders)]); + ylim([10^yscale,1]); + xlabel('Reduced Dimension'); + set([gca; findall(gca,'Type','text')],'FontSize',16); + + if compact + + scorelabels = cellfun(@(l,s) [l,' \mu=',sprintf('%.2f',s)],labels,scores,'UniformOutput',false); + legend(scorelabels,'location','SouthOutside'); + else + + print('-depsc',[plot_path,'/',name,'_',id,'error.eps']); + + if not(exist('OCTAVE_VERSION','builtin')) + + pause(2); + legend_print(f,labels,[plot_path,'/',name]); + end%if + end%if +end + diff --git a/utils/plot/plot_offline.m b/utils/plot/plot_offline.m new file mode 100644 index 0000000..2c6b72d --- /dev/null +++ b/utils/plot/plot_offline.m @@ -0,0 +1,42 @@ +function plot_offline(plot_path,name,data,labels,compact) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-01-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: plot offline time as horizontal bars. + + ndata = numel(labels); + + if compact + + subplot(2,6,[3,4]); + else + + figure('Name',['[',name,'] Offline Time'],'NumberTitle','off'); + end%if + + h = barh(cell2mat(data)); + set(h,'FaceColor','flat'); + + if exist('OCTAVE_VERSION','builtin') + + set(get(h,'Children'),'CData',lines12(ndata)); + else + + set(h,'CData',lines12(ndata)); + end%if + + set(gca,'YDir','reverse'); + xlabel('Time [s]'); + + if compact + + ylabel('Offline Time'); + set(gca,'YTickLabel',''); + else + + set(gca,'YTickLabel',labels); + end%if + + print('-depsc',[plot_path,'/',name,'_offline.eps']); +end diff --git a/utils/plot/plot_online.m b/utils/plot/plot_online.m new file mode 100644 index 0000000..c475ceb --- /dev/null +++ b/utils/plot/plot_online.m @@ -0,0 +1,41 @@ +function plot_online(plot_path,name,orders,data,labels,compact) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-01-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: plot comparable data as lines. + + ndata = numel(data); + colors = lines12(ndata); + + if compact + + subplot(2,6,[9,10]); + title('Relative Online Time'); + else + + figure('Name',['[',name,'] Online Time'],'NumberTitle','off'); + end%if + + semilogy(orders(:),data{1}(:),'Color',colors(1,:),'LineWidth',4); + hold on; + + for k = 2:ndata + + semilogy(orders(:),data{k}(:),'Color',colors(k,:),'LineWidth',4); + end%for + + semilogy(orders(:),ones(1,numel(orders(:))),'k','LineWidth',4); + yl = ylim(); + ylim([min(yl(1),0.1),max(yl(2),10)]); + + hold off; + xlim([min(orders),max(orders)]); + yl = ylim(); + ylim([10.^floor(log10(yl(1))), max(1,10.^ceil(log10(yl(2))))]); + xlabel('Reduced Dimension'); + ylabel('Relative Online Time'); + if not(compact), legend([labels;''],'location','SouthOutside'); end%if + + print('-depsc',[plot_path,'/',name,'_online.eps']); +end diff --git a/utils/plot/plot_output.m b/utils/plot/plot_output.m new file mode 100644 index 0000000..3489e41 --- /dev/null +++ b/utils/plot/plot_output.m @@ -0,0 +1,63 @@ +function plot_output(plot_path,name,solution,network,compact) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-01-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: plot mass flow at supply nodes and pressure at demand nodes. + + if compact + + figure('Name',name,'NumberTitle','off','DefaultAxesFontSize',8); + b = 4; + + if not(exist('OCTAVE_VERSION','builtin')) + sgtitle(name,'Interpreter','None'); + end%if + else + + figure('Name',['[',name,'] Supply and Demand Node Pressure and Flow'],'NumberTitle','off','DefaultAxesFontSize',8); + b = 0; + end%if + + subplot(2,2+b,1); + set(0,'DefaultAxesColorOrder',monomapper(1,network.nSupply)); + plot(solution.t,solution.u(1:network.nSupply,:),'linewidth',3); + ylabel('Pressure @ Supply [bar]'); + xlim([0,solution.t(end)]); + yl = ylim(); + ylim([floor(yl(1)),max(ceil(yl(2)),floor(yl(1))+2)]); + + subplot(2,2+b,2); + set(0,'DefaultAxesColorOrder',monomapper(2/3,network.nDemand)); + plot(solution.t,solution.u(network.nSupply+1:end,:),'linewidth',3); + ylabel('Mass Flow @ Demand [kg/s]'); + xlim([0,solution.t(end)]); + yl = ylim(); + ylim([floor(yl(1)),max(ceil(yl(2)),floor(yl(1))+2)]); + + subplot(2,2+b,3+b); + set(0,'DefaultAxesColorOrder',monomapper(2/3,network.nSupply)); + plot(solution.t,solution.y(1:network.nSupply,:),'linewidth',3); + ylabel('Mass Flow @ Supply [kg/s]'); + xlim([0,solution.t(end)]); + yl = ylim(); + %ylim([floor(yl(1)),max(ceil(yl(2)),floor(yl(1))+2)]); % TODO activate once steady-state testing is done + + subplot(2,2+b,4+b); + set(0,'DefaultAxesColorOrder',monomapper(1,network.nDemand)); + plot(solution.t,solution.y(network.nSupply+1:end,:),'linewidth',3); + ylabel('Pressure @ Demand [bar]'); + xlim([0,solution.t(end)]); + yl = ylim(); + %ylim([floor(yl(1)),max(ceil(yl(2)),floor(yl(1))+2)]); % TODO activate once steady-state testing is done + + print('-depsc','-painters',[plot_path,'/',name,'_output.eps']); +end + +function cm = monomapper(hue,num) + + cm = hsv2rgb([hue*ones(num,1), ... + [linspace(0.5,1.0-(mod(num,2)==0)/num,ceil(num/2))';ones(floor(num/2),1)], ... + [ones(floor(num/2),1);linspace(1.0-(mod(num,2)==0)/num,0.5,ceil(num/2))']]); +end + diff --git a/utils/plot/private/legend_print.m b/utils/plot/private/legend_print.m new file mode 100644 index 0000000..f10f19f --- /dev/null +++ b/utils/plot/private/legend_print.m @@ -0,0 +1,31 @@ +function legend_print(fig,lab,name) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: plot only legend of current figure + + leg = legend(lab); + + fig = copyobj(gcf,0); + ws = warning('off','all'); + lineh = findall(fig,'type','line'); + for i = 1:length(lineh) + + lineh(i).XData = NaN; + end%for + axis off + + leg.Units = 'pixels'; + boxLineWidth = leg.LineWidth; + + leg.Position = [6 * boxLineWidth, 6 * boxLineWidth, leg.Position(3), leg.Position(4)]; + legLoc = leg.Position; + + fig.Units = 'pixels'; + fig.InnerPosition = [1, 1, legLoc(3) + 48 * boxLineWidth, legLoc(4) + 48 * boxLineWidth]; + + saveas(fig,[name,'_legend.eps'],'epsc'); + close(fig); + warning(ws); +end diff --git a/utils/plot/private/lines12.m b/utils/plot/private/lines12.m new file mode 100644 index 0000000..0e9574e --- /dev/null +++ b/utils/plot/private/lines12.m @@ -0,0 +1,24 @@ +function r = lines12(n) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Twelve distinguishable color map + + if nargin<1 || isempty(n), n = 12; end%if + + x = [166,206,227; ... + 31,120,180; ... + 178,223,138; ... + 51,160,44; ... + 251,154,153; ... + 227,26,28; ... + 253,191,111; ... + 255,127,0; ... + 202,178,214; ... + 106,61,154; ... + 255,255,153; ... + 177,89,40]./256; + + r = x(rem(0:(n-1),size(x,1))+1,:); +end diff --git a/utils/setfields.m b/utils/setfields.m new file mode 100644 index 0000000..c6e13df --- /dev/null +++ b/utils/setfields.m @@ -0,0 +1,14 @@ +function t = setfields(s,varargin) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Set multiple structure fields at once. + + t = s; + + for k = 1:2:(nargin - 1) + + t.(varargin{k}) = varargin{k+1}; + end%for +end diff --git a/utils/sparsegrid.m b/utils/sparsegrid.m new file mode 100644 index 0000000..7e82140 --- /dev/null +++ b/utils/sparsegrid.m @@ -0,0 +1,43 @@ +function p = sparsegrid(pmin,pmax,level) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Return sparse parameter grid for 2d parameter space. + + pavg = 0.5 * (pmin + pmax); + + switch(level) + + case 1 + + p = [pavg, ... + [pavg(1);pmin(2)], [pavg(1);pmax(2)], [pmin(1);pavg(2)], [pmax(1);pavg(2)]]; + + case 2 + + p = [pavg, ... + [pavg(1);pmin(2)], [pavg(1);pmax(2)], [pmin(1);pavg(2)], [pmax(1);pavg(2)] ... + pmin, [pmin(1);pmax(2)], [pmax(1);pmin(2)], pmax]; + + case 3 + + p = [pavg, ... + [pavg(1);pmin(2)], [pavg(1);pmax(2)], [pmin(1);pavg(2)], [pmax(1);pavg(2)] ... + pmin, [pmin(1);pmax(2)], [pmax(1);pmin(2)], pmax, ... + 0.5*[pavg(1);pmin(2)], 0.5*[pavg(1);pmax(2)], 0.5*[pmin(1);pavg(2)], 0.5*[pmax(1);pavg(2)]]; + + case 4 + + p = [pavg, ... + [pavg(1);pmin(2)], [pavg(1);pmax(2)], [pmin(1);pavg(2)], [pmax(1);pavg(2)] ... + pmin, [pmin(1);pmax(2)], [pmax(1);pmin(2)], pmax, ... + 0.5*[pavg(1);pmin(2)], 0.5*[pavg(1);pmax(2)], 0.5*[pmin(1);pavg(2)], 0.5*[pmax(1);pavg(2)], ... + 0.5*pmin, 0.5*[pmin(1);pmax(2)], 0.5*[pmax(1);pmin(2)], 0.5*pmax]; + + otherwise + + p = pavg; + + end%switch +end diff --git a/utils/steadystate.m b/utils/steadystate.m new file mode 100644 index 0000000..b2aa796 --- /dev/null +++ b/utils/steadystate.m @@ -0,0 +1,132 @@ +function steady = steadystate(discrete,scenario,config) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Caching steady-state computation. + + persistent p0; + persistent xs; + persistent ys; + persistent z0; + persistent err; + persistent iter1; + persistent iter2; + + % Caching: Reusable steady state + if isempty(p0) || ... + not((p0(1) == scenario.T0) && (p0(2) == scenario.Rs)) + + clear leastnorm; + + x0 = sparse(discrete.nP+discrete.nQ,1); + p0 = [scenario.T0; scenario.Rs]; + + % Right-hand side + b = -(discrete.B * scenario.us + discrete.F * scenario.cp); + f = @(x,z) discrete.f(x0,x,scenario.us,p0,z); + +% +% / 0 Apq \ / ps \ / -bpd \ +% | | | | = | | +% \ Aqp 0 / \ qs / \ -bqs - fq / +% +% A xs b +% + + % Component extraction + Apq = discrete.A(1:discrete.nP,discrete.nP+1:end); + Aqp = discrete.A(discrete.nP+1:end,1:discrete.nP); + bpd = b(1:discrete.nP); + bqs = b(discrete.nP+1:end); + + qs = leastnorm(bpd,Apq); % Only computed once, hence first + ps = leastnorm(bqs,Aqp); % Repeatedly computed, hence second to exploit caching + + z0 = 1.0; + + fs = f([ps;qs],z0); + + err = norm(discrete.A * [ps;qs] - b + fs); + + iter1 = 1; + + % Simple iterative steady-state refinement + while (err > config.maxerror) && (iter1 < config.maxiter) + + ps = leastnorm(bqs - fs(discrete.nP+1:end)); + + z0 = mean(config.compressibility(ps,scenario.T0)); + + fs = f([ps;qs],z0); + + err = norm(discrete.A * [ps;qs] - b + fs); + + iter1 = iter1 + 1; + end%while + + xs = [ps;qs]; + + iter2 = 0; + + % IMEX-1 steady-state approximation + if (err > config.maxerror) + + warning('off','Octave:lu:sparse_input'); + [AL,AU,AP] = lu(discrete.E(p0,z0) - config.dt * discrete.A,'vector'); + + while (err > config.maxerror) && (iter2 < config.maxiter) + + ts = config.dt * (discrete.A * xs - b + fs); + + xs = xs + AU \ (AL \ ts(AP)); + + fs = f(xs,z0); + + err = norm(discrete.A * xs - b + fs); + + iter2 = iter2 + 1; + end%while + end%if + + ys = discrete.C * xs; + + assert_warn(err > config.maxerror,['Inaccurate steady-state! (',num2str(err),' > ',num2str(config.maxerror),')']); + end%if + + steady = struct('xs',xs, ... + 'ys',ys, ... + 'z0',z0, ... + 'err',err, ... + 'iter1',iter1, ... + 'iter2',iter2); +end + +%% Local function: leastnorm + +function x = leastnorm(b,A) +% summary: QR-based least-norm solver + + persistent Q; + persistent R; + persistent P; + + if not(exist('OCTAVE_VERSION','builtin')) + + if (nargin == 2) + + [Q,R,P] = qr(A',0); + end%if + + x = Q * (R' \ b(P)); + else + + if (nargin == 2) + + [Q,R] = qr(A',0); + end%if + + x = Q * (R' \ b); + end%if +end + diff --git a/utils/thunklog.m b/utils/thunklog.m new file mode 100644 index 0000000..79bf410 --- /dev/null +++ b/utils/thunklog.m @@ -0,0 +1,47 @@ +function thunklog(s) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Auto linebreak logger. + + persistent col; + persistent colmax; + + switch nargin + + case 1 + + if (s == 0) + + colmax = []; + col = []; + elseif (s == -1) + + col = col - not(isempty(col)); + fprintf('\b'); + else + + colmax = s; + col = 1; + end%if + + case 0 + + if not(isempty(col)) + + if (col == 1) + + fprintf(' '); + elseif (col > colmax) + + fprintf('\n '); + col = 1; + end%if + + col = col + 1; + end%if + + fprintf('='); + end%switch +end diff --git a/utils/training/training_impulse.m b/utils/training/training_impulse.m new file mode 100644 index 0000000..88d6ebc --- /dev/null +++ b/utils/training/training_impulse.m @@ -0,0 +1,9 @@ +function u = training_impulse(t,dt) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Impulse training input. + + u = (dt <= t) ./ dt; +end diff --git a/utils/training/training_randombinary.m b/utils/training/training_randombinary.m new file mode 100644 index 0000000..ec06ca2 --- /dev/null +++ b/utils/training/training_randombinary.m @@ -0,0 +1,9 @@ +function u = training_randombinary(t) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Random-binary training input. + + u = randi([0,1],1,1); +end diff --git a/utils/training/training_step.m b/utils/training/training_step.m new file mode 100644 index 0000000..a0c0d12 --- /dev/null +++ b/utils/training/training_step.m @@ -0,0 +1,9 @@ +function u = training_step(t) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Constant step training input. + + u = 1.0; +end diff --git a/utils/training/training_whitenoise.m b/utils/training/training_whitenoise.m new file mode 100644 index 0000000..ed4a2f8 --- /dev/null +++ b/utils/training/training_whitenoise.m @@ -0,0 +1,9 @@ +function u = training_whitenoise(t) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: White-noise training input. + + u = randn(1,1); +end diff --git a/utils/units/celsius2kelvin.m b/utils/units/celsius2kelvin.m new file mode 100644 index 0000000..687a65f --- /dev/null +++ b/utils/units/celsius2kelvin.m @@ -0,0 +1,9 @@ +function y = celsius2kelvin(t) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Convert degree Celsius to degree Kelvin. + + y = t + 273.15; +end diff --git a/utils/units/kelvin2celsius.m b/utils/units/kelvin2celsius.m new file mode 100644 index 0000000..b46050a --- /dev/null +++ b/utils/units/kelvin2celsius.m @@ -0,0 +1,9 @@ +function y = kelvin2celsius(t) +%%% project: morgen - Model Order Reduction for Gas and Energy Networks +%%% version: 0.9 (2020-11-24) +%%% authors: C. Himpe (0000-0003-2194-6754), S. Grundel (0000-0002-0209-6566) +%%% license: 2-Clause BSD (opensource.org/licenses/BSD-2-clause) +%%% summary: Convert degree Kelvin to degree Celsius. + + y = t - 273.15; +end